Repository navigation
feat(planning): gate interview page answers on open prerequisites and expect declared dependencies #9709
Copy link
Copy link
Closed
feat(planning): gate interview page answers on open prerequisites and expect declared dependencies#9709
Feature
Copy link
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.
Description
Parent
Refs #5796
Depends on
- none: on the frontier now
Outcome
Saving a decision on a question whose dependsOn names a still-open question follows a frontierLock
setting, and skills are expected to declare dependsOn so the lock has data to act on.
frontierLock: confirm(default): Save on a blocked question opens "Q100 depends on Q22, which is still
open. [Go to Q22] [Answer anyway]". Answer anyway sendsoutOfOrder: ["Q22"], which the server stores; when
Q22 is decided,derive_statesmarks Q100stale. The rail shows a padlock chip in place ofBlocked.frontierLock: hard: the server answers 409{"error": "blocked", "waitsOn": [...]}.frontierLock: off: today's behavior.- Ask, Rephrase and Research this stay enabled in every mode.
addandadd-roundwarn when a question omitsdependsOn([]declares independence) and when it names
a question open in the same round; under arequireDependssetting both refuse. surface.md "A round" states
the rule besidecommits, and the interview skill requires every posted question to declaredependsOn.
Decisions
- G1 (owner, 2026-10-18, batch item D5): default
confirm, shipped together with G2, because 0 of 87
questions declareddependsOn, so a lock alone does nothing. - Constraint C8: ship defaults, every behavior tunable.
- feat(planning): redesign the interview page for the multi-round flow #4547 Answer-anyway contract:
confirmkeeps answering one click away.
Key interfaces
- Interview page:
plugins/planning/surface/index.html; page server:plugins/planning/surface/server.py
(record(),derive_states); round CLI:plugins/planning/surface/round.pybehindround.sh;
exporters:plugins/planning/surface/exporters.py. - The interview skill's surface contract,
plugins/planning/skills/interview/context/surface.md, documents
every new op, field, setting and refusal.
Done when
- A server test sets
frontierLock: hard, saves on a blocked question and gets 409 with"error": "blocked"and the open ids inwaitsOn. - A server test under
confirmstoresoutOfOrderon the event, and a later decision on the prerequisite derivesstalefor the dependent. - Round tests:
addwithoutdependsOnexits 0 with a warning naming the id;addnaming a same-round open question warns; both exit non-zero underrequireDepends. - A page test shows the confirm dialog with "Go to" and "Answer anyway" on a blocked save, and Ask enabled under
hard. -
grep -n "frontierLock" plugins/planning/skills/interview/context/surface.mdandgrep -n "requireDepends" plugins/planning/skills/interview/context/surface.mdeach print a line. -
scripts/run-test-file.sh plugins/planning/surface/test_server.pyexits 0. -
scripts/run-test-file.sh plugins/planning/surface/test_round.pyexits 0. -
bash plugins/planning/surface/surface.test.shexits 0, so a data dir without the new fields still loads, renders and exports. -
scripts/check-changelog-fragments.sh --check-required origin/mainexits 0.
Out of scope
- Marking dependents when an earlier answer changes (its own slice under feat(planning): interview page does not enforce answer order or react to changed answers like the terminal interview #5796).
- Constraint staleness (planning: mark interview recommendations stale when a new constraint arrives mid-interview #5769).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.Fully specified and briefed; eligible for autonomous pickup from the frontier.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.
Type
Fields
No fields configured for Feature.
Activity