You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Two gaps in the interview page's commitment handling, to be built together.
The page has no hedged decision kind. The skill records a conditional accept as hedged (skills/interview/context/surface.md:132), but hedged appears nowhere in surface/round.py, exporters.py or index.html. A hedged reply reaches the ledger only as own text (free-text: hedged: ..., exporters.py:203-204).
The register gate grades a page export clean while commitments are unticked. The exported register carries confirmed commitments only (exporters.py:547-590); unconfirmed ones reach the Brief as named risks (exporters.py:629-655), never as open rows, so scripts/check-open-questions.sh has nothing to grade.
Blocked on
Blocked on #4611 (ledger row grammar, PR #5470). Do not start before that merges: the ledger grammar decides how a hedged decision and an unticked commitment are written.
Evidence
Finding 9 of the fix(planning): interview page surface defects from a live session (layout, commitments, sync, wake cost) #5191 repro (planning 0.46.0): accepted questions kept unticked commitments and the accepted card shows no indicator. The wrap-up view has commitment checkboxes and "Confirm all (N)" (plugins/planning/surface/index.html:751-752, :1012-1020, :1401; confirm-commitments op at round.py:628), but acceptance does not confirm commitments.
Finding 17: a stale commitment survives a revision into the export. revise never writes commits (round.py:441-498, :1452-1454; only cmd_add does, round.py:772), so the old text reaches exporters.py:629-655 as a live named risk. The write-path gap is fix(planning): let interview revise update a question's commitments #5452.
export-brief carried 21 commitments as "unconfirmed, named risks" (exporters.py:629-655).
Problem
Two gaps in the interview page's commitment handling, to be built together.
hedgeddecision kind. The skill records a conditional accept as hedged (skills/interview/context/surface.md:132), buthedgedappears nowhere insurface/round.py,exporters.pyorindex.html. A hedged reply reaches the ledger only asowntext (free-text: hedged: ...,exporters.py:203-204).exporters.py:547-590); unconfirmed ones reach the Brief as named risks (exporters.py:629-655), never asopenrows, soscripts/check-open-questions.shhas nothing to grade.Blocked on
Blocked on #4611 (ledger row grammar, PR #5470). Do not start before that merges: the ledger grammar decides how a hedged decision and an unticked commitment are written.
Evidence
plugins/planning/surface/index.html:751-752,:1012-1020,:1401;confirm-commitmentsop atround.py:628), but acceptance does not confirm commitments.revisenever writescommits(round.py:441-498,:1452-1454; onlycmd_adddoes,round.py:772), so the old text reachesexporters.py:629-655as a live named risk. The write-path gap is fix(planning): let interview revise update a question's commitments #5452.export-briefcarried 21 commitments as "unconfirmed, named risks" (exporters.py:629-655).exporters.py:647-651is fix(planning): route interview acceptance criteria into export-brief #5461 and is out of scope here.Proposed approach
hedgeddecision kind that exports as its own resolution with the condition text.openinlock.Acceptance criteria
hedgeddecision can be recorded on the page and exports as its own resolution carrying the condition text.lockgrades an accepted or hedged row with an unticked commitment asopen.tests/interview-defenses.test.shdigests re-pinned if skill text changes.Context
Refs #4653 (owner decision 2026-09-29, Option B, items 1 and 2). Blocked on #4611 (PR #5470). Related: #5191, #5452, #5461, #4474, #4423.