feat: preserve unlinked observations - #45
Merged
Merged
Conversation
Represent environment feedback without a precise tool-call link instead of dropping it or inventing an association. 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code <noreply@letta.com>
devanshrj
force-pushed
the
letta/generic-observation-records-75bb40a3
branch
from
August 19, 2026 22:19
187aa08 to
6fdb7c8
Compare
devanshrj
changed the base branch from
letta/opt-in-system-records-36ca3650
to
main
August 19, 2026 22:19
Treat generic observations as part of the immediately introduced v3 contract and clarify the unlinked-feedback example. 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code <noreply@letta.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
observationrecord for environment feedback that cannot be attributed to one specific tool calltoolrecords and keep generic observations independent offilters.toolResultsCANONICAL_SCHEMA_VERSIONat 3 as an immediate follow-up to feat: add opt-in system message records #44Why a separate record
A concrete case is a Terminus agent step that executes multiple terminal commands but records one merged terminal snapshot. The output belongs to the command batch, not any one
tool_call_id. Mapping it to the first or last command would invent an association, so it is preserved as a generic observation.This PR also preserves the same source-native shape when OpenHands emits environment feedback without an action link.
Validation
bun run check(168 passed, 7 dependency-gated skips)PYTHONPATH=python/src python3.12 -m unittest discover -s python/tests -v(11 passed, 1 dependency-gated skip)npm pack --dry-rungit diff --check