FE-1116: Session-local elicitation gaps from a graph-derived seed#280
FE-1116: Session-local elicitation gaps from a graph-derived seed#280lunelson wants to merge 12 commits into
Conversation
…ard 1) D94-L rejects earliest-band array reads; readiness-band consumers now read one code-owned per-kind scalar (requirement moves commitment->projection, story moves elicitation->band-less). Reconciles readiness-bands.md, data-model.md, and question-kinds-per-intent-kind.md ownership split. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds the brunch.elicitation_scratchpad custom entry (parse/fold/append, mirroring the runtime-state fold pattern) plus read/write Pi tools that reconstruct current scratchpad state from the session branch. Old persisted-gap tools are untouched pending Card 3 (repoint consumers) and Card 4 (delete).
update_elicitation_scratchpad requires id for resolve/update, but the rendered text omitted it — an agent reading tool content (not details) had no way to reference an item. Render id=<id> on every line.
…s (Card 4) Retires elicitation_gaps (table, schema types, seeded floor, driver, command-layer CRUD, old read/update tools) and readiness-estimate count-based scoring, with no compatibility bridge. Repoints the two live prompt docs that still named the deleted register/tool (elicit and ingest SKILL.md) to the session scratchpad; renames the capture-quality probe's spawn_gap outcome to scratchpad_note to match. Topology-doc reconciliation is deliberately deferred to Card 6 per the frontier's own sequencing. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…p register (Card 4 fixup) Card 4 deleted the elicitation_gaps register and its tools, but a scope review found live model-facing prompt/skill/reference docs across elicit/ingest/map/analyze/review/propose/project still named elicitation_gap, elicitation-gap capture, or "open gaps" as if the register still existed. Repoints all of them to the session-local elicitation scratchpad language, including elicitor.md itself. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
PR SummaryHigh Risk Overview Elicitation / readiness: The asking agenda moves to a branch-folded Persistence: Drizzle 0007 drops Docs / plan: Adds landed design ledger Reviewed by Cursor Bugbot for commit 5196d5d. Bugbot is set up for automated code reviews on this repo. Configure here. |
There was a problem hiding this comment.
Pull request overview
This PR completes the migration away from the persisted, spec-global elicitation_gaps register and count-based readiness scoring, replacing it with a session-local elicitation scratchpad (custom entry fold + read/write tools) and a thin, neutral graph-fact seed. It also reconciles readiness-band classification to a single latestExpectedBand scalar and updates prompts/skills/tests/fixtures accordingly.
Changes:
- Replace persisted elicitation gaps + readiness scoring with a session-local
brunch.elicitation_scratchpadfold projection and Pi tools (read_elicitation_scratchpad/update_elicitation_scratchpad). - Introduce a “Graph facts” seed renderer (counts + zero-kinds with latest expected band) and propagate scratchpad/seed into spec/session context composition.
- Remove
bandsForKind/earliest-band reads in favor oflatestExpectedBand, delete elicitation-gap schema/driver/register plumbing, and add a DB migration droppingelicitation_gaps.
Reviewed changes
Copilot reviewed 105 out of 105 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/session/specification-overview-context.ts | Spec overview now returns scratchpad |
| src/session/originate-assistant-turn.ts | Origination seed uses scratchpad fold |
| src/session/elicitation-scratchpad.ts | New scratchpad fold + append helper |
| src/session/tests/originate-assistant-turn.test.ts | Remove gap reads from origination tests |
| src/session/tests/elicitation-scratchpad.test.ts | New scratchpad parsing/fold tests |
| src/projections/session/transcript-context.ts | Tool name allowlist updated |
| src/projections/session/readiness-estimate.ts | Delete readiness scoring projection |
| src/projections/session/tests/readiness-estimate.test.ts | Delete readiness projection tests |
| src/probes/capture-quality-loop.ts | Rename spawn_gap → scratchpad_note |
| src/probes/tests/capture-quality-loop.test.ts | Update probe expectations |
| src/graph/workspace-store.ts | Remove gap readers + repair call |
| src/graph/TOPOLOGY.md | Update band derivation terminology |
| src/graph/schema/nodes.ts | Replace bandsForKind with latestExpectedBand |
| src/graph/schema/kinds.ts | Remove gap-related enums |
| src/graph/schema/elicitation-gaps.ts | Delete elicitation gap types |
| src/graph/schema/elicitation-gap-fixtures.ts | Delete gap fixtures builders |
| src/graph/queries.ts | Filter by latestExpectedBand; delete gap query |
| src/graph/index.ts | Remove gap exports; export latestExpectedBand |
| src/graph/elicitation-driver.ts | Delete gap ranking driver |
| src/graph/command-executor/command-validation.ts | Remove gap validation plumbing |
| src/graph/command-executor/command-types.ts | Remove gap command result/types |
| src/graph/tests/workspace-store.test.ts | Delete gap repair runtime test |
| src/graph/tests/seed-fixtures.test.ts | Remove gap floor assertions; use latestExpectedBand |
| src/graph/tests/read-api.test.ts | Update band filtering expectations |
| src/graph/tests/queries.test.ts | Update band derivation tests; delete gap query tests |
| src/graph/tests/observed-shapes-coverage.test.ts | Remove elicitation_gaps observed shape |
| src/graph/tests/elicitation-driver.test.ts | Delete driver tests |
| src/graph/tests/capture-commitment-gradient-gate.test.ts | Delete gap-based routing gate test |
| src/dev/tests/tier-2-scaffold.test.ts | Seed now includes graph facts + scratchpad |
| src/dev/tests/tier-2-harness.test.ts | Expect scratchpad marker in context |
| src/dev/tests/faux-harness.test.ts | Remove faux gap readers |
| src/db/schema.ts | Drop elicitation_gaps table definition |
| src/db/row-schemas.ts | Remove elicitation gap row schemas |
| src/db/tests/connection.test.ts | Update legacy migration expectations |
| src/app/pi-subagents.ts | Subagent snapshot carries scratchpad fold |
| src/app/pi-extensions.ts | Register scratchpad tool extension; remove gap wiring |
| src/app/brunch-tui.ts | Remove gap reads from graph readers |
| src/app/tests/brunch-tui.test.ts | Expect scratchpad tools; remove gap stubs |
| src/agents/skills/review/SKILL.md | Update lexicon to scratchpad |
| src/agents/skills/propose/references/present-review-set.md | Route low-confidence → scratchpad |
| src/agents/skills/propose/references/design.md | Update guidance wording |
| src/agents/skills/project/references/intent-to-design.md | Update guidance wording |
| src/agents/skills/map/SKILL.md | Replace “gap” outcomes with scratchpad |
| src/agents/skills/map/references/routing.md | Route low-confidence → scratchpad |
| src/agents/skills/map/references/map-plans.md | Update plan routing wording |
| src/agents/skills/map/references/map-edges.md | Update edge routing wording |
| src/agents/skills/ingest/SKILL.md | Update ingest chain to scratchpad |
| src/agents/skills/elicit/SKILL.md | Update elicitation substrate to scratchpad |
| src/agents/skills/elicit/references/question-kinds-per-intent-kind.md | Adjust ownership split + remove band table duplication |
| src/agents/skills/analyze/SKILL.md | Update analysis chain wording |
| src/agents/skills/analyze/references/neighborhoods.md | Update example wording |
| src/agents/runtime/elicitor/active-tools.ts | Swap active tool names to scratchpad tools |
| src/agents/references/readiness-bands.md | Route low-confidence → scratchpad |
| src/agents/prompts/elicitor.md | Add scratchpad-first session orientation directive |
| src/agents/contexts/seeds/turn-context.ts | Render scratchpad + remove readiness estimate |
| src/agents/contexts/seeds/origination.ts | Seed now includes graph facts + scratchpad |
| src/agents/contexts/seeds/graph-fact-seed.ts | New thin graph-fact seed renderer |
| src/agents/contexts/seeds/tests/turn-context.test.ts | Update turn-context expectations |
| src/agents/contexts/seeds/tests/origination.test.ts | Update origination seed expectations |
| src/agents/contexts/seeds/tests/graph-fact-seed.test.ts | New tests for graph-fact seed |
| src/agents/contexts/seeds/snapshots/turn-context-workspace-seed.md | Snapshot updates for scratchpad line |
| src/agents/contexts/seeds/snapshots/turn-context-graph-oracle.md | Snapshot updated for new band buckets |
| src/agents/contexts/seeds/snapshots/turn-context-graph-intent.md | Snapshot updated for new band buckets |
| src/agents/contexts/seeds/snapshots/turn-context-graph-design.md | Snapshot updated for new band buckets |
| src/agents/contexts/seeds/snapshots/origination-full-overview.md | Snapshot updated for graph facts + scratchpad |
| src/agents/contexts/data-model/spec/spec-context.ts | Render graph facts + scratchpad; remove gaps section |
| src/agents/contexts/data-model/spec/tests/spec-context.test.ts | Expect no readiness/coverage language |
| src/agents/contexts/data-model/spec/snapshots/spec-context.md | Snapshot updated for facts + empty scratchpad |
| src/agents/contexts/data-model/session/readiness-estimate.ts | Delete readiness estimate renderer |
| src/agents/contexts/data-model/graph/graph-slice.ts | Use latestExpectedBand for rendering |
| src/agents/contexts/data-model/graph/tests/graph-slice.test.ts | Update band-bucket expectations |
| src/agents/contexts/data-model/graph/snapshots/graph-overview-kind-coverage-matrix.md | Snapshot updated for latestExpectedBand bucketing |
| src/agents/contexts/data-model/elicitation-scratchpad.ts | New scratchpad formatter + update result formatter |
| src/agents/contexts/data-model/elicitation-gaps.ts | Delete old gap agenda formatter |
| src/agents/contexts/data-model/tests/elicitation-gaps.test.ts | Delete old gap formatter tests |
| src/.pi/extensions/subagents/prompt-assembly.ts | Subagent background snapshot uses scratchpad |
| src/.pi/extensions/commands/index.ts | Remove gap-dependent tool posture wiring |
| src/.pi/extensions/brunch-data/graph/index.ts | Remove getElicitationGaps from readers interface |
| src/.pi/extensions/brunch-data/elicitation/scratchpad-tools.ts | New scratchpad read/write tools |
| src/.pi/extensions/brunch-data/elicitation/index.ts | Re-export scratchpad tools registrar |
| src/.pi/extensions/brunch-data/context/get-specification.ts | Pass session entries into spec overview |
| src/.pi/extensions/agent-runtime/system-prompts/world-reads.ts | Cache only queryGraph; remove gaps caching |
| src/.pi/extensions/agent-runtime/system-prompts/index.ts | Update active tool computation signature |
| src/.pi/extensions/agent-runtime/system-prompts/tests/world-reads.test.ts | Update cache tests; assert scratchpad not cached |
| src/.pi/extensions/agent-runtime/runtime/index.ts | Remove conservative gap fallback |
| src/.pi/extensions/tests/subagents.test.ts | Update injected world snapshot shape |
| src/.pi/extensions/tests/registry.test.ts | Expect scratchpad tool registration |
| src/.pi/extensions/tests/commands-runtime-switch.test.ts | Remove gap-derived picker/test dependencies |
| src/.pi/extensions/tests/brunch-data-reconciliation.test.ts | Update tool posture expectations |
| src/.pi/extensions/tests/brunch-data-graph.test.ts | Remove getElicitationGaps from graph reads |
| src/.pi/extensions/tests/brunch-data-elicitation.test.ts | Delete old elicitation register tests |
| src/.pi/extensions/tests/brunch-data-elicitation-scratchpad.test.ts | New scratchpad tool tests |
| src/.pi/extensions/tests/agent-runtime-system-prompts.test.ts | Update tool grants to scratchpad read |
| src/.pi/extensions/tests/agent-runtime-authority-matrix.test.ts | Remove uncovered-gaps fallback test |
| src/.pi/extensions/snapshots/subagent-explorer-prompt.md | Snapshot updated for scratchpad line |
| memory/PLAN.md | Plan updated to reflect new frontier shape |
| drizzle/meta/_journal.json | Add migration journal entry |
| drizzle/0007_jittery_mongu.sql | Migration drops elicitation_gaps table |
| .fixtures/runs/capture-quality/sample-llm-extractions.json | Update expectedOutcome values |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
… (Card 5) Adds `settlement` (advisory | settled) to nodes and edges, orthogonal to `basis` (D99-L, I52-L): schema + migration, CommandExecutor create/patch support with monotonic advisory->settled promotion enforcement, a queryGraph settlement filter, advisory labeling in graph-slice rendering, and a mutate_graph tool createSettlement param so agents can actually reach the documented advisory-capture route. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…visory edge labeling, patch_edge regression guard) Scoping-agent review of 6f660bb found edge settlement half-enforced: queryGraph's settled-only filter only checked node settlement (an advisory edge between two settled nodes leaked through), graph-slice rendering didn't label advisory edges, and patch_edge had no monotonic transition guard. All three now match the node path's behavior. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…losure oracles) Reconciles all co-located TOPOLOGY.md files named in the design doc against the materialized session-scratchpad + settlement model from Cards 1-5, adds a grep-level closure test guarding against the retired gap-register attractor reappearing, and flips SPEC/PLAN/design-doc status to landed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 786a8af. Configure here.
|
Resolved the open review threads in commit |
| Adding more questions never adds ontology; it adds priming for an existing kind. A session | ||
| elicitation scratchpad item is therefore a **situated question that refers to a graph node kind**, | ||
| not an entry in a persisted parallel "typology" vocabulary. |
| `agents/contexts/seeds/origination.ts` composes the seed's provider-visible | ||
| payload (spec overview + top-ranked open gaps) from spec-scoped reads; | ||
| payload (spec overview + session scratchpad projection) from spec-scoped reads; |
| const zeroCountKinds = NODE_KINDS.filter((kind) => !nodeCountsByKind[kind]).map((kind) => ({ | ||
| kind, | ||
| band: latestExpectedBand(kind), | ||
| })); |


Stack Context
FE-1116 closes the elicitation-gap-guidance frontier: the persisted spec-global gap register is retired in favor of session-local elicitation scratchpad state, graph-derived seed facts, latestExpectedBand readiness reads, and advisory/settled graph settlement.
What changed
latestExpectedBand(kind)scalar and reconciled reference docs.settlement: advisory | settledon graph items and enforced settled-only reads plus monotonic promotion.Verification
npm run verify✅