Brain interface: intent↔interface mismatch analysis (problem statement, evidence-backed) #43
Closed
opened 2026-06-15 17:57:14 +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#43
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.
What this is
An evidence-backed problem statement for the brain interface, produced by a two-column intent analysis of real usage (autonomous agents + human-in-the-loop). It is deliberately not a redesign — the verb signatures, consumer split, and layer model are a separate, deliberate step left to the human. This issue exists so the finding doesn't evaporate before that step.
Evidence
mathias/brainbranchanalysis/intent-two-column,analysis/2026-06-15-brain-intent-two-column-analysis.md(commit2ea5644).brain/sessions/analysis/agent-intent-column.{jsonl,md}(commite8dbcf6).Method: classify each brain call by what it was trying to do (knowledge-act), not which tool it called; find intent↔interface mismatches.
Headline finding
Both columns, independently, ~37–38% mismatch with 0% genuine
intent_unclear. Usage is not chaotic — the muddiness is in the interface, not the behaviour. The brain today is append + keyword-search: good at create and lexical read, missing update, missing promotion-as-operation, and serving semantic intent with a lexical (BM25) tool.The structural root: the interface was never split by consumer, so the mechanism-named tools (
brain_write,brain_query,brain_ingest, …) read as purpose-less — each serves whichever consumer happens to call it, with no statement of which knowledge-act it's for. And each consumer is missing a different verb.The gaps (by consumer)
Shared — highest priority:
update / supersede— the seam. Agents 5/5 mismatch (blind-rewrite same slug → duplicates/contradictions). Humans 5+ (manual cherry-pick; brain PR #1 closed because content existed at two paths with no reconcile; re-ingest overwrites wholesale). The one act both consumers need and neither has. Highest-value gap. Note: distinct from #23 (embedding re-sync on edit) — this is a missing write verb, not an embedding-staleness fix.brain_ingest_rawignoring the path prefix.Agent-only:
verify_write_landed— 4/4 mismatch. No read-after-write; agents lexical-re-query their own just-written note to confirm it landed. Humans never hit this.synthesized_answer.brain_answerdistrusted — replaced by parallelbrain_query.Human-only:
curate / promote raw→wiki. Top human friction. Already tracked — see #38 (brain_pending+brain_promote). Not re-specced here.Relationship to existing issues
brain_updatesupersede-by-slug write verb + read-after-write (brain_get,brain_writehandle). The implementation issue for the two highest-priority gaps named here.update/supersedewrite verb.brain_context.What's NOT in this issue
No verb signatures. No consumer-split design. No layer-model redesign. Those are the deliberate next step (notebook-first). This issue is the durable handle for the problem, with evidence attached.
Suggested done-when (for the problem-framing, not the fix)
update/supersedeandverify_write_landedbecome tracked implementation issues. (2026-06-22 — both YES.update/supersede→ #45 as supersede-by-slug whole-note replace, git as history layer.verify_write_landed→ folded into #45 asbrain_get+brain_writehandle rather than its own issue.)Decision log — 2026-06-22 review session
Worked the done-when sequence end to end:
update/supersedetracked — decision: YES. Shape = supersede-by-slug, whole-note replace (not patch, not append-tombstone) — agents regenerate whole notes, so patch-addressing solves a non-problem. Provenance = git is the history mechanism (no sidecar, no tombstone); superseded content recoverable but not queryable; frontmatter stamps the supersession.verify_write_landedtracked — decision: YES, but folded into the same issue (#45) asbrain_get(id|path)+ extendingbrain_writeto return a handle. Not its own issue — it's a return-value change plus one getter.Still open: the redesign step (consumer-split / layer-model) below.
Last box closed — the redesign step is decided, not just scheduled
This issue's final done-when read "redesign step scheduled (separate issue / ADR) once the verb set and consumer split are decided." Ticked, and stronger than written: the decision is made rather than merely calendared.
ADR-0009 Decision is filled (infra PR #296): no consumer split — split by authority instead.
The interesting part is that this issue's own evidence argued against the redesign it pointed at. #43/#44 is naturally read as "two consumers, ~37–38% mismatch each, therefore split the surface by consumer." Re-read for which acts each column performs rather than which acts each column fails at, four of the five gaps are shared — update/supersede (the highest-value one) is shared, semantic-vs-lexical is shared, write-schema confusion is shared. Only promote raw→wiki is genuinely consumer-specific. So the consumer axis explains where each side hurts, not what each side does, and splitting the verb set on it would duplicate the shared surface to express one act.
verify_write_landed— this issue's cleanest agent-only finding, 4/4 mismatch — is what settled it. It is not a missing verb; it is a missing return value, already solved by #45's handle plusbrain_get. Had the consumer split been done in June as framed, that gap would plausibly have become a permanent agent-onlyverifyverb encoding another verb's temporary deficiency. The framing was right to be captured and right to be left open.What replaces it: the
knowledge/→wiki/seam and instruction-carrying files require a human principal regardless of who initiates, enforced server-side — reusing thebrain_edit_rootgate shipped in #96/#97. A model that has just read an untrusted page must not be able to promote that page's claims into curated space where later readers treat them as reviewed. That is a capability boundary; consumer-splitting the names would not have provided it.Also worth recording against this issue's own diagnosis: the authority gate deciding the layer is what finally turns "layer routing is a noun with no verb" into a verb (
promote/reject), and it removes thebrain_ingest_raw-ignores-the-path-prefix class you flagged, because no caller states a layer any longer.Not fixed, and not claimed to be — the other two clusters this issue named:
recallverb with a strategy hint) but the ranking quality gap is untouched. Renaming a lexical tool does not make it semantic.brain_answerdistrust — orthogonal. Agents re-queried within a minute because synthesis was not good enough, not because the tool was misnamed.recall's strategy hint is deliberately escapable so this cannot be papered over.Both stay open on their own merits and should not be considered addressed by the redesign.
Verb-by-verb design: #80. Implementation is not started and is gated on review of ADR-0009 + #80.
With this box ticked, every done-when on this issue is complete. Closing is your call — the problem statement it holds is still the best single description of why the surface is shaped the way it is, so there may be value in leaving it as the durable handle it was filed to be.
Closing — verified live 2026-10-04: all four done-when boxes in the body are checked. The last one was ticked 2026-08-22, when ADR-0009's Decision chose to split by authority, not by consumer, with the verb set designed on #80. The two clusters explicitly left unaddressed (semantic ranking quality,
brain_answerdistrust) stand on their own merits and are not part of this problem-framing issue. Closed issues stay searchable, so this still works as the durable handle for why the surface has its current shape.Created via git-mcp on behalf of @mathias