Repository navigation
feat: allow tasks to wait for multiple prerequisites - #1509
ivankuznetsov wants to merge 22 commits into
Conversation
13d8f40 to
93a77f7
Compare
Reviewer: codex-ce-code-review - Pass 01High
Medium
NitNo findings. Validation: source review and read-only in-memory Ruby reproductions; no full test suite or filesystem-writing integration tests run under the single-output-file constraint. |
Reviewer: claude-opus-5-ce-code-review - Pass 01ce-code-review — support-multiple-dependencies-per-task-260928-b4f8 (pass 1)Scope: Graph semantics were probed directly against the new traversal and are correct: cycle verdicts do High
Medium
Nit
|
37b85f0 to
944071d
Compare
Hive-Execute-Complete: 40bcaaa57bd722c76888bd904b91957502daf7076b62c1fcbd08666bf3975020
Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci
Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci
Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci
944071d to
3ecde2f
Compare
Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Findings: 34 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix
Reviewer: codex-ce-code-review - Pass 02HighMedium
Nit |
Traverse dependency edges even when their gates are invalid so creation cannot accept a resolvable cycle. Preserve qualified upstream self-reference paths and align status and fingerprint base selection with project config. Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 02 Hive-Fix-Findings: 3 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: codex-ce-code-review Hive-Fix-Phase: fix
Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Stage: 4-execute Hive-Auto-Commit: residue Hive-Auto-Commit-Reason: stage_exit
Exercise the real CLI process boundary for repeated dependency creation, idempotent replay, and invalid later values. Keep JSON, text, and TUI blocker projections aligned as individual prerequisites reach the list gate. Hive-Execute-Complete: 40bcaaa57bd722c76888bd904b91957502daf7076b62c1fcbd08666bf3975020
Use race-tolerant temporary directory cleanup and disable Git auto-maintenance before fixture commits can spawn detached maintenance processes. Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci
Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 02 Hive-Fix-Phase: ci
Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Findings: 20 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix
Reviewer: claude-opus-5-ce-code-review - Pass 02High
Medium
Nit
|
Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 02 Hive-Fix-Findings: 20 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix
…b4f8 Keep main's 36-second incident aggregate budget and drop this branch's unrelated e2e budget loosening plus its three changelog fragments. Renumber the dependency ADR to ADR-056 after main claimed 053-055, and regenerate the OpenClaw skill projection. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pass 02 stopped a non-finite scalar depends_on from reaching the admission snapshot, but an invalid list such as [a, .nan] was still preserved verbatim, so DependencySnapshot.semantic_fingerprint raised JSON::GeneratorError and froze TUI/Web dependency projections. Keep the list shape for diagnostics while rendering non-finite floats as text at any depth. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t stack Cross-project and invalid scalars always resolve the default base, so neither status nor admission_fingerprint needs a git for-each-ref subprocess or targeted base context for them. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Verification of the unreviewed fix pass 02 (06a0000)Fix pass 02 landed without a re-review or CI gate (the review-loop bug fixed on main in #1537). I checked every pass-02 finding against the code at the new head, Merged main (no rebase) in c39de28:
Fixed in this pass:
Already fixed by pass 02, checked:
Removed: the e2e aggregate budget increase (32 → 36 → 40 s) and its fragments, as listed above. CI: run 38826068700 on Not merged. |
* feat(dependencies): U1 preserve dependency declaration shape * feat(cli): U2 capture repeated task dependencies * feat(dependencies): U3 evaluate dependency graphs * feat(dependencies): U5 keep lists on the default branch * feat(status): U4 expose all dependency blockers * refactor(dependencies): reuse admission snapshot projections * docs(dependencies): U6 prove and document fan-in Hive-Execute-Complete: 40bcaaa57bd722c76888bd904b91957502daf7076b62c1fcbd08666bf3975020 * fix(dependencies): cover multi-dependency CI branches Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci * fix(ci): restore incident aggregate timing headroom Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci * fix(ci): allow hosted incident timing variance Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci * feat(runtime): U1 inspect read-only state storage safely * fix(status): U2 carry read-only inspection through CLI Attempt the ordinary writable activation and registration path first, then scope a Linux/procfs-confirmed operational inspection to the one CLI invocation. Preserve typed storage failures through attempt and status boundaries while keeping other status schemas unchanged. * test(status): U3 prove read-only mounts in Docker Exercise clean, paired-WAL, and unpaired-sidecar state through the candidate CLI on real read-only binds and a read-only container root. Register the proof as a required, isolated CI merge gate and retain its scenario evidence. * fix(runtime): preserve inspection component contracts Keep operational route parsing inside the low-level inspection component so runtime database consumers do not load CLI agent dependencies. Update the quiescence status contract to assert the intentional inaccessible-storage classification instead of legacy corruption guidance. * docs(status): U4 document read-only operational audits Describe writable-first fallback eligibility, Linux/procfs and owning-uid limits, the three-way sidecar policy, typed guidance, error envelopes, and the permanent Docker proof with its recorded successful AE1 and AE4 outcomes. Hive-Execute-Complete: 3dbbf1dc3e3d4bfc4b08cd48101049d1d8289636fe7c84e5b01d2dff5f28d3ad * fix(coverage): exercise operational storage fallbacks Hive-Task-Slug: make-hive-status-operational-work-261001-7e85 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci * fix(test): stabilize changed-runner git fixture cleanup Use the shared race-tolerant temporary directory cleanup and disable Git auto-maintenance before fixture commits can spawn background maintenance. Hive-Task-Slug: make-hive-status-operational-work-261001-7e85 Hive-Fix-Pass: 02 Hive-Fix-Phase: ci * fix(task-meta): fence updates to the observed task (U1) Separate creation from update-only persistence and preserve directory identity across legitimate moves while rejecting missing or replacement task folders. * fix(task-meta): reject stale updates at caller boundaries (U2) Carry transient directory identity through generation, review, migration, completion, and automatic rollback so stale work cannot report success or mutate a same-path replacement. * test(task-meta): prove stale update boundaries (U3) Cover deletion and same-path replacement races through every live metadata rewrite caller, update the managed wiki contracts, and keep the Patrol Fix test double aligned with observation-aware completion snapshots. Hive-Execute-Complete: ba02aee95a7f131b12764a659badff46b33597b0a3f8b0939721470536632441 * fix(coverage): exercise stale task custody branches Hive-Task-Slug: patrol-id-backfiller-can-resurrect-a-dropp-coding-c6a9d445 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci * fix(task-id): require allocation before task capture Fail closed and roll back task candidates when the runtime control plane cannot allocate an ID, avoiding id-less tasks that durable attempt admission cannot run. Hive-Task-Slug: patrol-id-backfiller-can-resurrect-a-dropp-coding-c6a9d445 Hive-Fix-Pass: 02 Hive-Fix-Phase: ci * fix(ci): restore incident aggregate headroom Keep the advisory timing signal above observed hosted-runner variance while retaining the existing per-scenario ceiling and functional E2E gates. Hive-Task-Slug: patrol-id-backfiller-can-resurrect-a-dropp-coding-c6a9d445 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci * fix(attempts): U1 fail closed on torn tails * test(attempts): U2 prove StreamLog contention recovery * test(attempts): U3 pin tail recovery consumers * refactor(attempts): simplify StreamLog snapshot state * docs(attempts): U4 document tail recovery contract Hive-Execute-Complete: 50e4c12223b5609bc3ee72bd2abc2b2dabca3a708c76600645b911e5867771f2 * fix(ci): restore incident aggregate headroom Keep the advisory timing signal above observed hosted-runner variance while retaining the strict per-scenario ceiling and functional E2E gate. Hive-Task-Slug: patrol-streamlog-append-after-a-torn-tail-coding-3fc93742 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci * fix(dependencies): close multi-dependency review gaps Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Findings: 34 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix * fix(attempts): harden stream log recovery Hive-Task-Slug: patrol-streamlog-append-after-a-torn-tail-coding-3fc93742 Hive-Fix-Pass: 01 Hive-Fix-Findings: 19 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix * fix(ci): remove unrelated incident budget change Hive-Task-Slug: patrol-streamlog-append-after-a-torn-tail-coding-3fc93742 Hive-Fix-Pass: 01 Hive-Fix-Findings: 1 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix * fix(status): harden read-only operational inspection Hive-Task-Slug: make-hive-status-operational-work-261001-7e85 Hive-Fix-Pass: 01 Hive-Fix-Findings: 25 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix * fix(task-custody): close review race gaps Fence completion, rollback, migration, and plan-review mutations to the observed task identity while preserving legacy allocation and metadata compatibility. Hive-Task-Slug: patrol-id-backfiller-can-resurrect-a-dropp-coding-c6a9d445 Hive-Fix-Pass: 01 Hive-Fix-Findings: 28 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix * fix(dependencies): close graph and base-mode review gaps Traverse dependency edges even when their gates are invalid so creation cannot accept a resolvable cycle. Preserve qualified upstream self-reference paths and align status and fingerprint base selection with project config. Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 02 Hive-Fix-Findings: 3 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: codex-ce-code-review Hive-Fix-Phase: fix * fix(attempts): align stream log recovery cleanup Keep strict reconciliation in parity with public replay and ensure every constructor or descriptor-replacement failure releases retained resources. Hive-Task-Slug: patrol-streamlog-append-after-a-torn-tail-coding-3fc93742 Hive-Fix-Pass: 02 Hive-Fix-Findings: 3 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: codex-ce-code-review Hive-Fix-Phase: fix * fix(test): qualify read-only recovery evidence Hive-Task-Slug: make-hive-status-operational-work-261001-7e85 Hive-Fix-Pass: 02 Hive-Fix-Findings: 2 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: codex-ce-code-review Hive-Fix-Phase: fix * fix(daemon): emit one resume failure envelope Preserve parseable lifecycle errors on schema-skewed daemon resume and align the publication-race test with the lstat-based initial storage probe. * fix(task-custody): close remaining stale-task races Hive-Task-Slug: patrol-id-backfiller-can-resurrect-a-dropp-coding-c6a9d445 Hive-Fix-Pass: 02 Hive-Fix-Findings: 4 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: codex-ce-code-review Hive-Fix-Phase: fix * test(runtime): preserve unreadable lifecycle contract * chore(4-execute): commit residual worktree changes Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Stage: 4-execute Hive-Auto-Commit: residue Hive-Auto-Commit-Reason: stage_exit * test(dependencies): prove terminal fan-in outcomes (U2/U4/U6) Exercise the real CLI process boundary for repeated dependency creation, idempotent replay, and invalid later values. Keep JSON, text, and TUI blocker projections aligned as individual prerequisites reach the list gate. Hive-Execute-Complete: 40bcaaa57bd722c76888bd904b91957502daf7076b62c1fcbd08666bf3975020 * fix(test): stabilize changed-runner fixture cleanup Use race-tolerant temporary directory cleanup and disable Git auto-maintenance before fixture commits can spawn detached maintenance processes. Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Phase: ci * fix(coverage): exercise dependency fallback branches Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 02 Hive-Fix-Phase: ci * fix(dependencies): harden multi-dependency review paths Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 01 Hive-Fix-Findings: 20 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix * fix(dependencies): harden multi-dependency review findings Hive-Task-Slug: support-multiple-dependencies-per-task-260928-b4f8 Hive-Fix-Pass: 02 Hive-Fix-Findings: 20 Hive-Triage-Bias: courageous Hive-Reviewer-Sources: claude-opus-5-ce-code-review,codex-ce-code-review Hive-Fix-Phase: fix * fix(attempts): skip non-object stream log records in replay and reconciliation A newline-terminated record that parses as non-object JSON or carries an out-of-range sequence raised NoMethodError/FloatDomainError out of StreamLog.read, the constructor, and every later append, so one foreign line made the log permanently unappendable. Treat these records as malformed in both the public and strict parsers. Also pin Base64 padding-bit parity between strict reconciliation and Base64.strict_decode64 with an exhaustive final-quantum test and a reopen-path regression. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(ci): cover read-only storage fallbacks and repin evidence upload Cover the four lib lines the exact-100% gate reported uncovered: a partially unparseable mountinfo table and a failed post-fork reset both leave read-only storage unconfirmed, and a non-storage Unavailable during attempt-repository initialization stays a RepositoryError. Repin the read-only evidence upload to the repository-wide upload-artifact revision that main moved to, which the CI partition contract enforces. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(decide): restore return-to-stage rollback under commit custody Approve releases project and task custody before it raises, so decide's return-to-stage rollback restored decision files with no lock that a supported drop respects. The restore now re-enters the project commit lock, and both return and repeat rollbacks raise RollbackFailed when a stale or replaced task blocks restoration instead of silently skipping. Drop the rollback_failed error-kind mapping: hive-decide.v1 has no such enum value, so a --json rollback failure would fail envelope validation. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(task-custody): share exclusive cross-device relocation Approve and the managed-workflow migrator carried three copies of the cp_r/handle/cleanup sequence, and the copy-failure path still removed the destination unconditionally. TaskMeta.relocate_across_devices! now creates the destination with an exclusive mkdir and holds its handle before copying, so no cleanup path can delete a pre-existing or replaced destination; an existing destination surfaces as a collision. Approve also revalidates the observation before renaming, so a same-path replacement is never moved into the destination stage, and its two state-file rollback helpers share one guarded restore. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(task-custody): cover lease custody callers and guard branches Pin that run and plan-review claim observed leases under project commit custody, and exercise the stale, invalid-metadata, and git-failure branches the coverage gate reported as uncovered. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(dependencies): keep invalid list evidence JSON-safe Pass 02 stopped a non-finite scalar depends_on from reaching the admission snapshot, but an invalid list such as [a, .nan] was still preserved verbatim, so DependencySnapshot.semantic_fingerprint raised JSON::GeneratorError and froze TUI/Web dependency projections. Keep the list shape for diagnostics while rendering non-finite floats as text at any depth. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * perf(dependencies): skip branch inventory for declarations that cannot stack Cross-project and invalid scalars always resolve the default base, so neither status nor admission_fingerprint needs a git for-each-ref subprocess or targeted base context for them. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * style(test): drop spaces inside Set reference brackets Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(plan): pass the observation keyword in the preflight review test Main's headless-Claude refactor added a start_plan_review call that predates the PR's required observation keyword; the merge combined cleanly but the test raised ArgumentError in coverage shard 4/6. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * test(task-custody): cover pin revalidation and restage git failures The pin-revalidation test passed a nil observation, so it raised StaleTask before ever reaching the changed-pin branch; give it a real observation and assert the pin message. Cover the tolerated git failure when restaging restored decision files. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(babysitter): skip repairs for Actions billing holds * test(plan): adopt multi-dependency plans through the observed helper #1509's adoption tests called adopt_plan_dependency! directly; #1514 made the observation keyword required, so they go through adopt_dependency. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Merged as part of #1545, which batched the finished PRs (including this PR's head) into one CI run. |
Summary
Tasks can now wait for every declared prerequisite, so clearing one dependency cannot release work that still depends on others.
9-done. Repeated--depends-onflags create an array and explain the base/gate transition.dependency_base_mode.hive-status.v9andhive-operational-status.v5; superseded schemas are retired. Array singular blocker fields are null; scalar singular fields are also null when only transitive blockers remain. Upgrade and restart all readers before writing arrays, and avoid downgrade while arrays remain.Planning carries the user-directed decision that arrays supply no implicit Git base. List eligibility uses the coding workflow's merge-before-
9-donecontract; admission does not independently verify merge ancestry. Draft-PR workflow restrictions remain in place.The branch also adjusts the advisory incident aggregate timing budget from 32 to 40 seconds for hosted-runner variance, with a superseding historical note.
Test plan
Recorded implementation validation (not rerun during description refresh):
bin/test --allcheckpoint executed. Four failures attributed in the implementation record to host contention passed immediate serial reruns (37 runs, 324 assertions); the combined broad run was not fully green.Outcome-evidence capture is recorded as unavailable (
outcome_evidence_review_blocked); no demo or screenshot is claimed.Review summary
Two review passes are complete. All recorded findings were fixed or explicitly resolved without a fix; no user questions remain in the escalation records. Fix sentinels identify
262af0f5afand final head06a00001908ff0ad944ae0384c123091d5bf1ce8.Fixes address cycle traversal cost and route-dependent diagnostics, malformed declaration reporting, declaration-sensitive fingerprints, bounded dependency visualization, shared branch/config observations, creation-error preservation, and missing shape/freshness regressions. The supplied review record includes independent graph and fail-closed checks; it does not establish completion of the current hosted CI run.
Linked task
Hive task
43367:support-multiple-dependencies-per-task-260928-b4f8— Support multiple task dependencies (U1–U6).