follow-up: synchronous semantic read-after-write for brain_update — DEFERRED (retro skill uses option b) #47
Closed
opened 2026-06-22 06:27:04 +00:00 by mathias
·
1 comment
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#47
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.
RESOLUTION (2026-06-22): NOT needed for the retro skill → option (b). Deferred, not closed-wontfix.
The retro skill is batch: one session in, finite findings out, exit. Worked the decision:
brain_get(id)+ content-hash check — direct file read, immediate, strictly better than fuzzy vector search for confirming a known id.Decision: option (b). No synchronous re-embed built. This issue stays open-deferred as a ready spec — reopen/build only if a future consumer needs sub-5-min semantic read-after-write (e.g. a continuous/iterative skill that re-reads its own evolving output semantically, unlike this batch one).
Design rule banked into the retro-skill spec: front-load all brain reads before any
brain_update; no semantic query after the firstbrain_updatein a run. Batch shape satisfies this naturally — it's a guardrail, not a fight. Falsifiable check: if the skill design ever wants to issue a semantic query post-supersede, that's the signal to revisit (a).Context
Deferred from #45 / PR #46. Surfaced by the Step 0 trace there.
Today no MCP write handler re-embeds in-handler. Embedding refresh is out-of-band and mtime-driven via
vectorstore.StartSync(default 5 min ticker,ingestion/cmd/server/main.go:301) plusPOST /backfill-embeddings.brain_updaterewriting a note advances its mtime, so the next Sync pass re-embeds it — but that leaves a ≤5 min staleness window on the vector/semantic retrieval path.BM25/lexical search and
brain_get(direct file read) are immediate; only pgvector retrieval lags.Problem (the gap this issue specs, if ever needed)
If a consumer needs sub-5-min semantic read-after-write — supersede a note then immediately do a vector query expecting the new content — the current architecture won't satisfy it within seconds. The batch retro skill does not trigger this (see Resolution above).
Proposed (option a — the build, if revived)
Wire a
vectorstore.Store+ embedder into the MCPServer(mirroringHandler.WithEmbedSync) sobrain_update/brain_writecan re-embed just the changed file in-handler (chunk → embed → upsert, delete stale chunks), best-effort, after the file write. Keep the Sync ticker as the backstop.Related
brain_update(the supersede verb this windows)wiki/hyperguild/decisions/retro-skill-semantic-read-after-write-staleness-constraint.md(the constraint + this resolution)wiki/hyperguild/facts/brain-mcp-embeddings-out-of-band-sync.md(the underlying footgun)follow-up: optional synchronous in-handler embedding refresh for brain_update / brain_writeto follow-up: synchronous semantic read-after-write for brain_update — BLOCKS retro skill (need confirmed)follow-up: synchronous semantic read-after-write for brain_update — BLOCKS retro skill (need confirmed)to follow-up: synchronous semantic read-after-write for brain_update — DEFERRED (retro skill uses option b)Closing — resolved to option (b): do not build.
The issue records its own resolution — synchronous semantic read-after-write for
brain_updateis deferred, with no build wanted unless a future consumer actually needs sub-five-minute semantic read-after-write. No such consumer has appeared since it was filed 2026-06-22, and it has sat with zero comments throughout.A deferred-with-a-decision issue left open is indistinguishable from unplanned work in a tracker. Closing so it stops reading as a commitment.
Closed during the 2026-08-27 estate backlog triage. Reopen if a consumer materialises — the analysis in the body stays valid.