A memory waits in its own words - #735
Open
WaylandYang wants to merge 3 commits into
Open
WaylandYang wants to merge 3 commits into
WaylandYang wants to merge 3 commits into
Conversation
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: WaylandYang <wayland0916@gmail.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: WaylandYang <wayland0916@gmail.com>
This was referenced Sep 16, 2026
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.
Follows #731 (0044 cut 1). Memory documents (
rememberin chat and over MCP, decisions 0015 and 0018) now go through the open extraction path like every other document. Their statements still wait for a person's nod; what waits is an open statement in the document's own words, and the nod writes it as one. This removes the last reason the typed extraction path is entered, so that path can be deleted next.Ledger (migration 0062)
pending_factsgainsphrase,qualifiers(role-keyed, value or entity),time_words(verbatim words with their char offset),quote_start,quote_end.rejected_factsgainsphrase, so a rejection blocks only that phrase between the same pair, not every statement between them.Store
pending::Proposalcarriesphrase,qualifiers,time_words,quote_span. With a phrase, "already asserted" looks at live open rows (layer = 'open' AND phrase = …); the pending and rejected checks include the phrase.pending::confirmwith a phrase writes throughgraph::insert_open_statement,add_evidence_located,add_statement_qualifierandtime_mentions::record. Norelation_typeslookup and no temporal reconcile: an open statement has no predicate and no place on the world axis yet.attested_atcomes from the document date only fordoc_time_source IN ('content', 'source')(Upload time is used as the document date in extraction #714); a memory log has'none', so it is null.pending::rejectrecords the phrase.Server
extraction::runhands every document torun_openwhen the base's flag is on;run_opentakes the proposer and anawait_nodflag. For a memory document it skips the opening block (one episode per chunk), does not record name evidence or extra names before the nod, and proposes each statement with its qualifiers, located time words and quote span instead of writing it. Thependingevent fires once when something was queued, as before.Web
The pending card shows the phrase in the italic slot that used to hold the model's own word, the verbatim time words instead of a computed range, and the qualifiers as small
role: valuepills. The "no relation in ontology" chip is not shown for an open statement: on this path that is the normal case, not a defect. Strings:pendingOwnWords(en, zh).Tests
a_pending_statement_keeps_the_documents_words(connected): propose an open statement with a qualifier and a time word from a real memory episode;for_chunkreturns them; second proposal isAlreadyPending; confirm writes an openfactsrow (no predicate, novalid_*), evidence withproposed_predicate = phraseand offsets, one qualifier row, one time mention whose offset reproduces the words inchunks.text; the queue empties;AlreadyAssertedafterwards; a rejection blocks only its own phrase.a_fact_awaits_a_nod,an_agent_can_record,no_predicate_still_shows,an_open_statement_keeps_the_documents_wordspass unchanged in behaviour.rememberover MCP with a write token → two pending statements ("moved its headquarters to" with the time words "15 March 2026" at the right offset; "named" with the qualifiertitle: chief operating officer) → nod → an open fact with its time mention; the other stays pending.Not in this change
Deleting the typed extraction path (next PR); the pending card's layer marker beyond the phrase; interpretation of time words (0045).
🤖 Generated with Claude Code