fix(kanban): gate children on explicit approval - #67156
peacockesq wants to merge 1 commit into
Conversation
|
Thanks for the focused typed-edge implementation. The current-main premise is confirmed: Problems
Suggested changes
This is an automated hermes-sweeper review. |
SummaryOne PR addresses issue #67132. #67156 replaces status-only release for explicitly typed approval dependencies with fail-closed structured approval checks across recompute, claim, promotion, reclaim, CLI, tool, and dashboard paths, while intentionally retaining legacy behavior for untyped dependencies. Related pull requests
Suggested consolidationKeep #67156 open with a salvage path: retain the typed-edge schema, centralized blocker enforcement, diagnostics, and coverage, then expose outgoing approval-gated children and the exact Complex graphflowchart LR
classDef open fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a
classDef merged fill:#dcfce7,stroke:#15803d,color:#14532d
classDef closed fill:#e5e7eb,stroke:#6b7280,color:#1f2937
classDef unverified fill:#f3f4f6,stroke:#9ca3af,color:#374151
classDef best stroke-width:3px,stroke:#b45309
classDef target stroke-width:3px,stroke:#4338ca
I67132(["issue #67132 (open)"])
P67156["PR #67156 (open)"]
P67156 -->|best fix| I67132
class I67132 open
class P67156 open
class P67156 best
class P67156 target
click I67132 "https://github.com/NousResearch/hermes-agent/issues/67132"
click P67156 "https://github.com/NousResearch/hermes-agent/pull/67156"
Graph: solid arrow = fixes / best fix, dashed arrow = partial or unverified (see edge label); boxed group = PRs duplicating each other; amber border = best fix; indigo border = target; gray node = closed (state tag in the node label). Cross-PR triage: Reviewed 1 pull request and 1 issue in this complex. Each diff was read against this issue; Assessment working set: 59 kB of PR diffs, 7 kB of issue/PR text, 2 kB of discussion (2 comments), 2 verify verdicts. verdicts reflect diff content, not PR titles. Part of an automated triage batch. |
Summary
Fixes #67132.
Kanban now supports an explicit
approvalcontract on selected parent→child dependency edges. Untyped edges preserve the existing done/archived semantics, while approval-gated edges fail closed until the parent has a terminal completed run with unambiguous structuredapproved: truemetadata.This prevents rejected or ambiguous reviews from releasing candidate/release children without redefining ordinary dependencies or blocking remediation fan-out.
What changed
task_links.gate_typeSQLite migration (NULLkeeps legacy behavior).approval_parentsto task creation andgate_type="approval"to link creation across DB, CLI, model tool, and dashboard API surfaces.dependency_blockers()and enforce it in:approval_gate_heldevents with only parent ID, gate type, and gate state.Compatibility
RED proof on pre-fix main
A temporary DB with a proposed typed marker reproduced the bug before implementation:
Verification
All commands were run after rebasing onto upstream
mainat73e32f37e7bde4f5528ab04b5b6356bcf00d0af0and with Kanban board environment pins removed so tests used temporary databases.The repository-wide type checker still reports existing diagnostics in pre-existing Kanban files outside this change (for example the known
judge_goaltuple mismatch); this PR does not expand that unrelated scope.Safety