Fix baseline operator fixtures and centralize the external-merge lifecycle writer #806

Open
toasterson wants to merge 3 commits from fix/baseline-nightly-fixtures-20261019 into main
Owner

Fix five baseline integration fixture files that called operator verbs with PATs granting only workitem.write. Their positive operator contexts now also grant operator.write; production authorization and business-result assertions are unchanged. Session tokens and missing-scope PATs remain denied.

The scheduler fixture now matches the existing shared operator boundary: authorization runs before handler argument parsing or handler audit writes. It verifies exact PAT/scope denials, no handler rejection audit and no extra tick; authorized validation audits, durable completion and client-disconnect behavior remain covered.

The external-merge reconciler already implements WorkItemLifecycleService in a child module. Its exact transaction-local authority statement and terminal UPDATE now live in a private parent-service writer, called at the same point. SQL text, binds, ordering, transaction, graph resolution, retained-owner/acceptance fences, audit rows and commit are preserved. Source equivalence is verified. The new PostgreSQL/Forgejo HTTP regression proves audit-failure rollback and that successful completion changes only the existing five lifecycle/wake fields; pinned graphs, replay, concurrency and retained owners remain covered. No behavior change was found.

The lifecycle guard also exposed a pre-series cfg(test) central fixture using direct lifecycle writes. It now uses canonical create/transition/unpark. The guard retains its existing central-module exception and corrects its exact inventory from two to four already-existing audited writers: preparation, delivery parking, stall parking and outcome-policy parking. No new module exemption, production central SQL or production MCP change.

Validation at clean, pushed HEAD (4cb159a87e):

Integration file Passed
external_merge_reconciliation_test.rs 11
workitem_forensics_authz_test.rs 1
ai_gate_reject_handoff_test.rs 21
stale_gate_test.rs 20
wi_519_lifecycle_parity_test.rs 7
wi_595_pipeline_gate_test.rs 7
operator_scheduler_tick_test.rs 4
wi_577_lifecycle_create_update_promote_test.rs 11

All 82 integration tests passed with real local Docker/PostgreSQL fixtures, zero ignored tests and zero Docker skips. The modified central stall fixture and a separate exact lifecycle-guard rerun also passed. Two build jobs, serial test files, 31.25 GiB disk guard. The wrapper verifies local and remote heads match and tracked source stays clean throughout. Wrapper log SHA256: 8f81b8b4576a6deae306e4c7bcd4d7b92f8c759ed928251e4cac667d53b07a45. Initial failed receipts are retained; no failed run was relabelled green.

Independent base: main c2afbd43fad06a7b54b3fc9e38dab4c3f0a8536a (merged #805). No stack dependency on #802–#804. Main has since advanced; its integration merge is deferred to the operator's sequence below.

CI proof is pending #804. Published normally in commit mode. After #804 merges to main, merge main into this PR normally, preserving all jobs; its tests diff then selects the nightly pool for proof. No special dispatch path, workflow override or image-publication run. external_merge_reconciliation_test is added to the existing nightly pool so the defining regression executes; it is one named suite from the historical uncovered inventory, not a claim that the other uncovered files have run.

No PR merge, deployment, live recovery or history rewrite. Operator merge gate retained.

Fix five baseline integration fixture files that called operator verbs with PATs granting only `workitem.write`. Their positive operator contexts now also grant `operator.write`; production authorization and business-result assertions are unchanged. Session tokens and missing-scope PATs remain denied. The scheduler fixture now matches the existing shared operator boundary: authorization runs before handler argument parsing or handler audit writes. It verifies exact PAT/scope denials, no handler rejection audit and no extra tick; authorized validation audits, durable completion and client-disconnect behavior remain covered. The external-merge reconciler already implements `WorkItemLifecycleService` in a child module. Its exact transaction-local authority statement and terminal UPDATE now live in a private parent-service writer, called at the same point. SQL text, binds, ordering, transaction, graph resolution, retained-owner/acceptance fences, audit rows and commit are preserved. Source equivalence is verified. The new PostgreSQL/Forgejo HTTP regression proves audit-failure rollback and that successful completion changes only the existing five lifecycle/wake fields; pinned graphs, replay, concurrency and retained owners remain covered. No behavior change was found. The lifecycle guard also exposed a pre-series `cfg(test)` central fixture using direct lifecycle writes. It now uses canonical create/transition/unpark. The guard retains its existing central-module exception and corrects its exact inventory from two to four already-existing audited writers: preparation, delivery parking, stall parking and outcome-policy parking. No new module exemption, production central SQL or production MCP change. Validation at clean, pushed `HEAD` (4cb159a87ed822599ed25dc485dd25da0370aa8a): | Integration file | Passed | |---|---:| | `external_merge_reconciliation_test.rs` | 11 | | `workitem_forensics_authz_test.rs` | 1 | | `ai_gate_reject_handoff_test.rs` | 21 | | `stale_gate_test.rs` | 20 | | `wi_519_lifecycle_parity_test.rs` | 7 | | `wi_595_pipeline_gate_test.rs` | 7 | | `operator_scheduler_tick_test.rs` | 4 | | `wi_577_lifecycle_create_update_promote_test.rs` | 11 | All 82 integration tests passed with real local Docker/PostgreSQL fixtures, zero ignored tests and zero Docker skips. The modified central stall fixture and a separate exact lifecycle-guard rerun also passed. Two build jobs, serial test files, 31.25 GiB disk guard. The wrapper verifies local and remote heads match and tracked source stays clean throughout. Wrapper log SHA256: `8f81b8b4576a6deae306e4c7bcd4d7b92f8c759ed928251e4cac667d53b07a45`. Initial failed receipts are retained; no failed run was relabelled green. Independent base: main `c2afbd43fad06a7b54b3fc9e38dab4c3f0a8536a` (merged #805). No stack dependency on #802–#804. Main has since advanced; its integration merge is deferred to the operator's sequence below. **CI proof is pending #804.** Published normally in commit mode. After #804 merges to main, merge main into this PR normally, preserving all jobs; its tests diff then selects the nightly pool for proof. No special dispatch path, workflow override or image-publication run. `external_merge_reconciliation_test` is added to the existing nightly pool so the defining regression executes; it is one named suite from the historical uncovered inventory, not a claim that the other uncovered files have run. No PR merge, deployment, live recovery or history rewrite. Operator merge gate retained.
Align baseline fixtures and lifecycle inventory with the shared operator boundary
All checks were successful
CI / conflict-check (push) Successful in 42s
CI / test (push) Successful in 24m19s
4cb159a87e
All checks were successful
CI / conflict-check (push) Successful in 42s
CI / test (push) Successful in 24m19s
This pull request has changes conflicting with the target branch.
  • .solstice/job.sh
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/baseline-nightly-fixtures-20261019:fix/baseline-nightly-fixtures-20261019
git switch fix/baseline-nightly-fixtures-20261019

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff fix/baseline-nightly-fixtures-20261019
git switch fix/baseline-nightly-fixtures-20261019
git rebase main
git switch main
git merge --ff-only fix/baseline-nightly-fixtures-20261019
git switch fix/baseline-nightly-fixtures-20261019
git rebase main
git switch main
git merge --no-ff fix/baseline-nightly-fixtures-20261019
git switch main
git merge --squash fix/baseline-nightly-fixtures-20261019
git switch main
git merge --ff-only fix/baseline-nightly-fixtures-20261019
git switch main
git merge fix/baseline-nightly-fixtures-20261019
git push origin main
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
toasterson/Anima!806
No description provided.