feat(planning): hedged decision kind and unticked-commitment gate on the interview page - #5631
Conversation
A hedged decision is an accept that carries a required one-line condition. It flows through the record-terminal op, the page event and responses rebuild, the four schemas, and the exporters: the ledger writes `answer:: hedged: <rec>` with the condition in `note::`, import-ledger reads it back as `hedged` (refusing one with no condition), and the legacy `free-text: hedged: ...` form still imports as `own`. Refs #5471 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mitment as open An accept or hedged decision whose recommendation still has an unconfirmed commitment now exports as an open register row that keeps its answer, note and commitments, so `lock` (check-open-questions.sh) no longer passes on a promise nobody confirmed. Import restores the decision with those commitments unticked, and the Brief names the gated rows beside the named risks. Refs #5471 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The page offers Hedged as a choice (key h) whose note is the required condition, posts it as a hedged event, styles it like Accepted, and counts its commitments in To confirm. Refs #5471 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the skill text Refs #5471 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…itment gate Refs #5471 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @kyle-sexton's task in 2m 34s —— View job Reviewing PR #5631
SummaryReviewed the What I checked closely:
Not independently verified (author-claimed only, per lane rules): the PR's cited test run output (432 unittest tests, No issues found worth blocking on. |
|
Claude finished @kyle-sexton's task in 1m 8s —— View job Security review
No security issues found. Scope: this PR adds a Notes from the review:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a2f238c3eb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…dged answers Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 3m 4s —— View job Security review — PR #5631
No security issues found. Scope: reviewed the full PR diff ( What I checked:
|
|
Claude finished @kyle-sexton's task in 3m 0s —— View job Reviewing PR #5631
SummaryRan the CI code-review lane ( No inline comments posted — I did not find a new high-confidence correctness issue a careful senior reviewer would block on. What I traced closely:
Not independently re-verified here (author-claimed in the PR body): the cited test run output. I read the diff and the new/changed tests rather than executing the suite. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 8s —— View job Security review — PR #5631
No security issues found — skip gate applies (this head already has a successful security review that still applies). Diffed
neither of which is authored on this PR or touches
No new security-relevant surface was introduced since the last completed review of this content. |
|
Claude finished @kyle-sexton's task in 1m 49s —— View job Reviewing PR #5631
SummaryRan the CI code-review lane ( Skip gate applied (criterion 4: this head already has a successful review from this lane that still applies). Confirmed via
No new findings to post; nothing in this PR's own diff has changed since the prior passes that already cleared it. |
Closes #5471
Summary
The interview page had no
hedgeddecision kind, and the register gate graded a row clean while its commitments were unticked. This adds thehedgedkind end to end and makes an accepted or hedged row with an unticked commitment export asopen, solock(check-open-questions.sh) fails it.Fix
surface/round.py,server.py,schema/*.json:hedgeddecision with a required condition note.surface/exporters.py: exportsanswer:: hedged: <recommendation>with the condition innote::;import_ledgerreads it back ashedged(legacyfree-text: hedged:still imports asown).settle()returnsopenfor an accept or hedge with any unticked commitment, including afterrevisereplaces the commitment list; import accepts that combination.surface/index.html: Hedged choice (keyh), hedged rows show commitments under To confirm.interview/context/surface.md,loop.md,audit-answers),DEFERRED.mdrows 1-2 removed,interview-defenses.test.shdigests re-pinned.planning0.52.0 to 0.53.0 with CHANGELOG entry.Verification
python3 -m unittest discover -s plugins/planning/surface -p 'test_*.py': 432 tests, OK (1 skipped)bash plugins/planning/tests/interview-defenses.test.sh: PASS=165 FAIL=0bash plugins/planning/scripts/check-open-questions.test.sh: passedscripts/validate-plugins.sh: passedscripts/check-changelog-parity.sh --check,--check-order,--check-bump origin/main: passedplugins/planning/surface: passed (T2)Related
Refs #4653 (owner decision, Option B items 1 and 2). Follows #4611 / #5470. Related: #5452, #5191, #5461.
🤖 Generated with Claude Code