fix(planning): expose per-question answered flag in /api/state - #5483
Conversation
state is dependency staleness, so a question with a terminal decision read "open" and looked unanswered. answered is computed with the same rule as the page (latest_decision) and documented in the README and schema. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… 0.47.0 Move the inline import comment onto its own line so ruff format --check passes, and bump the minor version since the entry is filed under Added. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…swered # Conflicts: # plugins/planning/.claude-plugin/plugin.json # plugins/planning/CHANGELOG.md
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 encountered an error after 0s —— View job I'll analyze this and get back to you. |
|
Claude encountered an error after 0s —— View job I'll analyze this and get back to you. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5d44811e49
ℹ️ 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".
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 2m 31s —— View job Code review complete
No blocking findings. Notes
Unable to verify: this lane's sandbox denied |
|
Claude finished @kyle-sexton's task in 1m 4s —— View job Security review (
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 0s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 2m 54s —— View job Code review (
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 9s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 46s —— View job Security review (
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 39s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 44s —— View job Code review (
|
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 1m 33s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 1m 14s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 1m 21s —— View job Security review (
|
…swered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 1s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 39s —— View job Code review (
|
…swered 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 54s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 31s —— View job Code review (
|
…swered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 36s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 55s —— View job Security review (
|
…swered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 52s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 43s —— View job Security review (
|
…swered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 10s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 45s —— View job Code review (
|
…swered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 44s —— View job Code review (
|
|
Claude finished @kyle-sexton's task in 1m 0s —— View job Security review (
|
…swered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 50s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 28s —— View job Code review (
|
…swered Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 46s —— View job Security review (
|
|
Claude finished @kyle-sexton's task in 50s —— View job Code review (
|
Closes #5459
Summary
/api/statereportedstate: openfor a question that already had a terminal decision, becausestateis dependency staleness (open,stale,upstream-pending,archived), not an answered flag. A consumer could not tell answered from unanswered questions.Fix
Hub.state()inplugins/planning/surface/server.pynow setsansweredon each question, computed with the page's own rule (exporters.latest_decision).README.mdandschema/questions.schema.jsondocumentansweredand state thatstateis not an answered flag.planningbumped to 0.47.0 with a changelog entry. Finding 15a (page sync afterrecord-terminal) did not reproduce in the issue's repro pass, so no code change there.Verification
python3 -m unittest test_server test_schema test_exporters test_roundinplugins/planning/surface: 330 tests OK (1 skipped), including a new test foranswered.scripts/check-changelog-parity.sh --check --check-order: pass.scripts/validate-plugins.sh: all manifests and the catalog validated.Related
Refs #5191 (finding 15 origin).
🤖 Generated with Claude Code