design(brain): remember + recall consolidations under ADR-0009/0012 (blocked on 0009 design) #80
Open
opened 2026-07-07 07:45:59 +00:00 by mathias
·
2 comments
No Branch/Tag Specified
main
fix/pipeline-writes-158
fix/edit-path-io-192
fix/create-regular-188
fix/guard-special-179
fix/linkcheck-keeps-write-178
fix/write-dir-redirect-173
fix/tunnel-detect-174
fix/pipeline-root-157
w3/154-mcp-auth-wiring
fix/tunnel-traversal
test/in-brain-targets-171
fix/brain-scan-root-157
fix/graph-wiki-root-157
fix/vectorstore-root-157
fix/notes-root-157
fix/search-root-157
fix/brainwide-root-157
fix/raw-symlinks-153
feat/symlink-tripwire-157
fix/rest-auth-149
fix/123-brain-edit-envelope-check
feat/106-page-aware-extraction
fix/105-source-drift-on-main
fix/104-surface-merge-conflicts-on-main
agent/b1-compile-on-ingest
agent/104-surface-merge-conflicts
agent/105-source-drift
agent/107-loud-unconfigured-alerting
feat/brain-read-edit
fix/capture-i1-refusal-names-target
renovate/configure
feat/consolidate-single-harness
icebox/cmd-routing
feat/brain-pending-promote
fix/close-session-classification-refresh
fix/capture-summarywriter
v0.24.0
v0.23.1
v0.23.0
v0.22.0
v0.21.1
v0.21.0
v0.20.1
v0.20.0
v0.19.1
v0.19.0
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.0
v0.16.1
v0.16.0
v0.15.0
v0.14.0
v0.13.2
v0.13.1
v0.13.0
v0.12.1
v0.12.0
v0.11.2
icebox/cmd-routing-2026-07-01
v0.11.1
v0.11.0
v0.10.0
v0.9.0
v0.8.0
v0.7.0
v0.6.0
v0.5.0
v0.4.1
v0.4.0
v0.3.0
v0.2.0
v0.1.0
Labels
Clear labels
agent/ready
blocked/client
blocked/supplier
blocked/upstream
risk/high
risk/low
risk/medium
size/l
size/m
size/s
size/xs
status:dispatch
status:dispatched
status:review
status:reviewing
type/chore
type/decision
type/docs
type/feat
type/fix
type/ops
type/research
type/test
Meets the agent-ready contract; authorizes unattended execution
Waiting on the client
Waiting on a supplier
Waiting on an upstream project or vendor
Irreversible, security-relevant, or control plane
Reversible, local, test-covered
Touches shared state, deploys or data
Too big - split it
Under two days
Under half a day
Under an hour
Maintenance, no behaviour change
Human decision required; never agent/ready
Documentation only
New capability
Corrects broken behaviour
Infrastructure, deploy, runtime
Investigate; output is a finding, not code
Test coverage only
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mathias/hyperguild#80
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Charter: ADR-0012 (consolidation heuristic) · Blocked on: ADR-0009 design being decided first
Intent
The two big consolidations ADR-0012 names for the brain surface:
remember— collapsebrain_write/brain_ingest/brain_ingest_raw(three doors for one intent: "put this knowledge in"). Per the consolidation heuristic, the caller has no legitimate stake in which extraction mechanism runs — that's the server's call — so this is a clean collapse to one intent-named verb, with extraction strategy as an optional server-defaulted hint.recall— collapsebrain_query/brain_answer/brain_graph(three retrieval mechanisms for one intent: "find what's relevant"). Here the caller sometimes has a legitimate stake (occasionally you really do want graph traversal), so per the heuristic this is one verb + an optionalstrategyhint defaulting to server choice — NOT a hard wall hiding the mechanisms.brain_getstays separate (fetch-exact-handle is a distinct intent, not a mechanism of recall).Why this is blocked, not ready
This is not immediately actionable. ADR-0012 explicitly hands the brain-specific verb-set design to ADR-0009 (consumer-split), which is still a STUB with its Decision section as TODO. The agent-facing vs human-facing split has to be decided first — e.g. does
remembermean the same thing for an autonomous agent as for a human curating raw→wiki? Isrecall's default strategy consumer-dependent? Those are 0009's questions. Buildingremember/recallbefore 0009 is decided would hard-code answers to questions that are supposed to be deliberated.So: this issue tracks the consolidation intent and keeps ADR-0012's "tracked separately" claim honest, but its first real step is doing ADR-0009's design, under the charter.
Acceptance (gated)
rememberverb designed (write/ingest/ingest_raw → one verb + optional extraction hint)recallverb designed (query/answer/graph → one verb + optional strategy hint, server-default)brain_getconfirmed to remain separate (distinct intent)Related
Unblocked — ADR-0009 is decided, and this design follows from it
ADR-0009's Decision section is filled (infra PR #296): no consumer split; split by authority instead. The blocker this issue names is gone. Design below, no implementation — that stays gated on your review of both.
The decision that matters for this issue: the authority gate decides the layer, so callers stop choosing paths. That single move dissolves #43's "layer routing is a noun with no verb" and the
brain_ingest_raw-ignores-the-path-prefix bug class, because no caller states a layer any more.The verb set
rememberbrain_write+brain_ingest_rawdigestbrain_ingestrecallbrain_query+brain_answer+brain_graphstrategy, server defaultgetbrain_get+brain_readrawhintsupersedebrain_updaterevisebrain_editpromote/rejectbrain_promote+ brain#81brain_edit_rootbrain_pendingbecomes the read half ofpromoterather than a verb of its own.brain_indexis already gone (#78, verified live — 17 tools, absent).Two deviations from ADR-0012's literal suggestion, both justified per its own rule
1.
rememberdoes NOT swallowbrain_ingest. The charter names "remembercollapsing write/ingest/ingest_raw." Applying the charter's own consolidation heuristic rather than its example, that collapse fails the test:brain_write/brain_ingest_raw— "record this thing I concluded." Differ only in destination layer. The caller has no legitimate stake once authority decides the layer. Collapse.brain_ingest— "digest this external source into pages." An LLM pipeline rewrites the input; my words do not survive verbatim. A caller absolutely does have a stake in whether the corpus stores what it said or a model's extraction of what it said.Those are two intents, not two mechanisms for one intent — the heuristic's third bullet. #44's "write-schema confusion (3 param shapes + ingest)" is real evidence, but it is confusion about parameter shape, not about intent; collapsing intents to fix a params problem would trade a small annoyance for a permanent ambiguity about whether the corpus holds your claim or a paraphrase of it.
2.
getabsorbingbrain_readis a new consolidation the charter did not name. Both mean "fetch this exact handle"; they differ only in parsed-frontmatter vs raw bytes. That is textbook rule-1 mechanism leak, and it postdates ADR-0012 (brain_readshipped 2026-08-18). Worth catching now rather than after callers accumulate.recall's strategy hint must stay escapablePer ADR-0009 §3: agents distrusted
brain_answerand re-queried within a minute because synthesis quality was insufficient, not because the name was wrong.recalldefaults to server choice, but a caller that does not trust synthesis must be able to ask for raw retrieval — otherwise the rename hides a trust problem behind a nicer surface. Suggested shape:Deprecation — versioned, no hard breaks
Per ADR-0012's obligation. Three phases, each independently shippable and revertible:
tools/listone at a time (the #78 precedent: de-surfaced ≠ removed, a caller that knows the name still works). Migrate the known callers: SKILLs, agentsquad, capture's BrainStore, brain-gardener, dma-cli.The surface gets temporarily larger, not smaller — worth stating plainly since it looks like regression mid-migration.
Needs your call before implementation
digestas a name. It is the one coined verb here, and ADR-0012 requires new verbs to fit the existing vocabulary (capture,recall,remember,supersede,ship).digestfits grammatically;ingestis the incumbent but is mechanism-named. Alternative: keepbrain_ingestun-renamed and out of scope, on the grounds that its callers are pipelines rather than models.brain_contextfold intorecall? It is arguablyrecallwith a project scope and a server-chosen limit. Folding it is tidy; it is also the one verb with a session-start intent that a strategy hint does not express. My lean: leave it, revisit after the migration.brain_classifyandbrain_tunnelare both mechanism-named and both auto-called in places. Rule 4 says an auto-called op must not be a caller verb. Neither was audited here — worth their own pass rather than a guess in this comment.Refs: ADR-0009 (infra PR #296), ADR-0012, #43, #44, #45, #78, #96, #97, brain#81.
Decision on
digest: don't coin it.brain_ingeststays out of scope.Reversing my own recommendation from the design comment above, on the "keep it simple" principle.
I proposed
digestas a new intent-named verb for the extraction path. Rejecting it, for now:remember, three read doors become onerecall, two fetch doors become oneget.digestdeletes nothing — it renames a single verb that already has exactly one job. That is churn plus a deprecation cycle for a vocabulary improvement.remembermust not swallow extraction: "store what I concluded" and "digest this external source into pages" are different intents, and collapsing them would make it ambiguous whether the corpus holds your words or a model's paraphrase. That holds whatever the second verb is called.brain_ingestkeeps the boundary today at zero cost.Revised scope for this issue:
remember,recall,get,supersede,revise, plus the gatedpromote/reject.brain_ingestis explicitly out, not forgotten.Reverses if: a model-facing caller ever needs to choose extraction deliberately — at which point it needs an intent name and
digestis the one to use — or ifbrain_ingestgrows a second mechanism-named sibling, which would make it a consolidation candidate on rule 1's own terms rather than on tidiness.Recording it here so the next reader doesn't re-derive
digestfrom ADR-0012's example list and assume it was overlooked.