ace-assign 0.66.1 → 0.68.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/.ace-defaults/assign/catalog/composition-rules.yml +0 -0
  3. data/.ace-defaults/assign/catalog/recipes/batch-tasks.recipe.yml +0 -0
  4. data/.ace-defaults/assign/catalog/recipes/documentation.recipe.yml +0 -0
  5. data/.ace-defaults/assign/catalog/recipes/fix-and-review.recipe.yml +0 -0
  6. data/.ace-defaults/assign/catalog/recipes/implement-simple.recipe.yml +0 -0
  7. data/.ace-defaults/assign/catalog/recipes/implement-with-pr.recipe.yml +0 -0
  8. data/.ace-defaults/assign/catalog/recipes/release-only.recipe.yml +0 -0
  9. data/.ace-defaults/assign/catalog/steps/apply-feedback.step.yml +0 -0
  10. data/.ace-defaults/assign/catalog/steps/commit.step.yml +0 -0
  11. data/.ace-defaults/assign/catalog/steps/create-retro.step.yml +0 -0
  12. data/.ace-defaults/assign/catalog/steps/fix-tests.step.yml +0 -0
  13. data/.ace-defaults/assign/catalog/steps/lint.step.yml +0 -0
  14. data/.ace-defaults/assign/catalog/steps/mark-task-done.step.yml +0 -0
  15. data/.ace-defaults/assign/catalog/steps/onboard-base.step.yml +0 -0
  16. data/.ace-defaults/assign/catalog/steps/onboard.step.yml +0 -0
  17. data/.ace-defaults/assign/catalog/steps/plan-task.step.yml +0 -0
  18. data/.ace-defaults/assign/catalog/steps/pre-commit-review.step.yml +0 -0
  19. data/.ace-defaults/assign/catalog/steps/push-to-remote.step.yml +0 -0
  20. data/.ace-defaults/assign/catalog/steps/rebase-with-main.step.yml +0 -0
  21. data/.ace-defaults/assign/catalog/steps/record-demo.step.yml +0 -0
  22. data/.ace-defaults/assign/catalog/steps/reflect-and-refactor.step.yml +0 -0
  23. data/.ace-defaults/assign/catalog/steps/reorganize-commits.step.yml +0 -0
  24. data/.ace-defaults/assign/catalog/steps/research.step.yml +0 -0
  25. data/.ace-defaults/assign/catalog/steps/review-pr.step.yml +0 -0
  26. data/.ace-defaults/assign/catalog/steps/security-audit.step.yml +0 -0
  27. data/.ace-defaults/assign/catalog/steps/split-subtree-root.step.yml +0 -0
  28. data/.ace-defaults/assign/catalog/steps/squash-changelog.step.yml +0 -0
  29. data/.ace-defaults/assign/catalog/steps/task-load.step.yml +0 -0
  30. data/.ace-defaults/assign/catalog/steps/update-docs.step.yml +0 -0
  31. data/.ace-defaults/assign/catalog/steps/verify-test-suite.step.yml +0 -0
  32. data/.ace-defaults/assign/catalog/steps/verify-test.step.yml +0 -0
  33. data/.ace-defaults/assign/catalog/steps/work-on-task.step.yml +0 -0
  34. data/.ace-defaults/assign/presets/close-delivery.yml +57 -0
  35. data/.ace-defaults/assign/presets/deliver-release.yml +57 -0
  36. data/.ace-defaults/assign/presets/integrate-batch.yml +67 -0
  37. data/.ace-defaults/assign/presets/quick-implement.yml +0 -0
  38. data/.ace-defaults/assign/presets/release-only.yml +0 -0
  39. data/.ace-defaults/assign/presets/supervise-delivery.yml +67 -0
  40. data/.ace-defaults/assign/presets/work-on-docs.yml +0 -0
  41. data/.ace-defaults/assign/presets/work-on-task-in-place.yml +0 -0
  42. data/.ace-defaults/nav/protocols/skill-sources/ace-assign.yml +0 -0
  43. data/.ace-defaults/nav/protocols/wfi-sources/ace-assign.yml +0 -0
  44. data/CHANGELOG.md +13 -0
  45. data/Rakefile +0 -0
  46. data/docs/demo/canonical-skill-source.gif +0 -0
  47. data/docs/demo/fork-provider.cast +0 -0
  48. data/docs/demo/fork-provider.gif +0 -0
  49. data/docs/demo/fork-provider.recording.json +0 -0
  50. data/docs/demo/fork-provider.tape.yml +0 -0
  51. data/docs/getting-started.md +0 -0
  52. data/docs/handbook.md +0 -0
  53. data/handbook/guides/fork-context.g.md +0 -0
  54. data/handbook/skills/as-assign-add-task/SKILL.md +0 -0
  55. data/handbook/skills/as-assign-compose/SKILL.md +0 -0
  56. data/handbook/skills/as-assign-create/SKILL.md +0 -0
  57. data/handbook/skills/as-assign-drive/SKILL.md +0 -0
  58. data/handbook/skills/as-assign-prepare/SKILL.md +0 -0
  59. data/handbook/skills/as-assign-recover-fork/SKILL.md +0 -0
  60. data/handbook/skills/as-assign-run-in-batches/SKILL.md +0 -0
  61. data/handbook/skills/as-assign-start/SKILL.md +0 -0
  62. data/handbook/skills/as-create-retro-internal/SKILL.md +0 -0
  63. data/handbook/skills/as-mark-task-done-internal/SKILL.md +0 -0
  64. data/handbook/skills/as-reflect-and-refactor-internal/SKILL.md +0 -0
  65. data/handbook/skills/as-task-load-internal/SKILL.md +0 -0
  66. data/handbook/workflow-instructions/assign/add-task.wf.md +0 -0
  67. data/handbook/workflow-instructions/assign/compose.wf.md +0 -0
  68. data/handbook/workflow-instructions/assign/create-retro-internal.wf.md +0 -0
  69. data/handbook/workflow-instructions/assign/create.wf.md +0 -0
  70. data/handbook/workflow-instructions/assign/drive.wf.md +39 -0
  71. data/handbook/workflow-instructions/assign/mark-task-done-internal.wf.md +0 -0
  72. data/handbook/workflow-instructions/assign/recover-fork.wf.md +0 -0
  73. data/handbook/workflow-instructions/assign/reflect-and-refactor-internal.wf.md +0 -0
  74. data/handbook/workflow-instructions/assign/run-in-batches.wf.md +0 -0
  75. data/handbook/workflow-instructions/assign/start.wf.md +0 -0
  76. data/handbook/workflow-instructions/assign/task-load-internal.wf.md +0 -0
  77. data/handbook/workflow-instructions/assign/verify-test-suite.wf.md +0 -0
  78. data/lib/ace/assign/atoms/assign_frontmatter_parser.rb +0 -0
  79. data/lib/ace/assign/atoms/catalog_loader.rb +0 -0
  80. data/lib/ace/assign/atoms/composition_rules.rb +0 -0
  81. data/lib/ace/assign/atoms/fixed_merge_schemas.rb +398 -0
  82. data/lib/ace/assign/atoms/number_generator.rb +0 -0
  83. data/lib/ace/assign/atoms/preset_expander.rb +0 -0
  84. data/lib/ace/assign/atoms/preset_loader.rb +0 -0
  85. data/lib/ace/assign/atoms/preset_step_resolver.rb +0 -0
  86. data/lib/ace/assign/atoms/step_file_parser.rb +0 -0
  87. data/lib/ace/assign/atoms/step_numbering.rb +0 -0
  88. data/lib/ace/assign/atoms/step_sorter.rb +0 -0
  89. data/lib/ace/assign/atoms/tree_formatter.rb +0 -0
  90. data/lib/ace/assign/cli/commands/add.rb +0 -0
  91. data/lib/ace/assign/cli/commands/list.rb +0 -0
  92. data/lib/ace/assign/cli/commands/retry_cmd.rb +0 -0
  93. data/lib/ace/assign/errors.rb +5 -1
  94. data/lib/ace/assign/models/assignment_info.rb +0 -0
  95. data/lib/ace/assign/models/evidence_event.rb +1 -0
  96. data/lib/ace/assign/models/queue_state.rb +0 -0
  97. data/lib/ace/assign/models/step.rb +0 -0
  98. data/lib/ace/assign/molecules/assignment_discoverer.rb +0 -0
  99. data/lib/ace/assign/molecules/evidence_journal.rb +281 -10
  100. data/lib/ace/assign/molecules/fixed_effect_reference.rb +31 -0
  101. data/lib/ace/assign/molecules/ordinary_merge_cli.rb +68 -0
  102. data/lib/ace/assign/molecules/ordinary_merge_contract.rb +410 -0
  103. data/lib/ace/assign/molecules/preset_inferrer.rb +0 -0
  104. data/lib/ace/assign/molecules/skill_assign_source_resolver.rb +0 -0
  105. data/lib/ace/assign/molecules/step_renumberer.rb +0 -0
  106. data/lib/ace/assign/organisms/attempt_coordinator.rb +90 -7
  107. data/lib/ace/assign/organisms/ordinary_merge_consumer.rb +365 -0
  108. data/lib/ace/assign/version.rb +1 -1
  109. data/lib/ace/assign.rb +3 -0
  110. metadata +11 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f3a7677c3fb1ce863011485e2d0b2274f447f444292eecd60dc19a5b6df2a53a
4
- data.tar.gz: 4519d9fd2fac314f8f2769e63e13a06d05b915061ef1993147ce56c352262f06
3
+ metadata.gz: e21e0378ad7810b04e9a92cbac849a7e7ce09b9add705c668a826dc9e3cd87f6
4
+ data.tar.gz: 0d56587d4589765dbc83758e882a9482a9ce4a12dc9c803aaeacc7cc0314cb57
5
5
  SHA512:
6
- metadata.gz: 2b7cc2b8df1826250baa869d8ecac05474ee2cc0762737b3cf848e51f310436df47517a8370ffced04a82cd398f8b817f63b1fc9de9e081efcfd0331e7c2f339
7
- data.tar.gz: 3003f3e3cf8729d99d1810aa5cb152c58dd6a50f182f8321b782a7dcd5f96e89fd9558bfe582e213b5108add78d8a213c2b4f5d0317e85a07a12e3f8d3f643d5
6
+ metadata.gz: 93380ddd286cd79c67fad691e875f703e60282f585746dbc3da8b04b5145310cc94ff1577416ba4164db25e90a30a1481588ae1b070ce196daea709ba8c55c25
7
+ data.tar.gz: e9ac0d6ef4ac39f6812e1c8f276f64dab32d15aa023830b2bf563a2211addd4353d875736506d2103a6d2b4c01efbdcf66bb205dd2e091e08e361a4146140476
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,57 @@
1
+ # Close only an accepted delivery scope after preservation and writer checks.
2
+ # Usage: ace-assign create --task TASK[,TASK...] --preset close-delivery
3
+
4
+ name: close-delivery
5
+ description: Preserve delivery evidence and work, prove quiescence, and close only accepted delivery scope
6
+
7
+ parameters:
8
+ taskrefs:
9
+ required: true
10
+ type: array
11
+ description: Producer task references whose accepted delivery scope is being closed
12
+
13
+ steps:
14
+ - name: preserve-delivery-record
15
+ number: "010"
16
+ instructions: |
17
+ For producer task references {{taskrefs}}, preserve accepted evidence and work
18
+ before any cleanup: exact source heads, decision records, tests, independent
19
+ review, integration/release manifests, operation references, callbacks, receipts,
20
+ blockers, and uncertain effects. Verify the durable destinations and retain the
21
+ delivery tag and producer references so archived delivery remains discoverable.
22
+ Do not change producer task status or reparent producer tasks.
23
+
24
+ - name: verify-no-surviving-writers
25
+ number: "020"
26
+ instructions: |
27
+ Execute current canonical status checks for every assignment, attempt, worker,
28
+ reviewer, integrator, publisher, callback handler, worktree, and other scoped
29
+ actor. Require positive evidence of no surviving writers. Missing, unreadable,
30
+ active, or uncertain lifecycle state blocks closure and cleanup; a quiet terminal
31
+ or completed worker is not proof.
32
+
33
+ - name: verify-accepted-scope
34
+ number: "030"
35
+ instructions: |
36
+ Compare the requested closure against the accepted delivery scope and project
37
+ decision record. Confirm every intended outcome has an attributable accepted
38
+ receipt and every excluded, deferred, blocked, or uncertain item remains visible.
39
+ Close only the accepted delivery scope; never close producer work, unrelated
40
+ delivery tasks, or a broader release because one path succeeded.
41
+
42
+ - name: reference-host-operations
43
+ number: "040"
44
+ instructions: |
45
+ Preserve references to host-owned root installation, deployment, service, and
46
+ cleanup operations. This preset neither performs nor claims those effects. A
47
+ missing root receipt remains attributable to the host owner and blocks only the
48
+ scope that requires it.
49
+
50
+ - name: close-accepted-delivery
51
+ number: "050"
52
+ instructions: |
53
+ After preservation, no-surviving-writers proof, and full accepted-scope
54
+ reconciliation, close and archive only this delivery record through the existing
55
+ task/Assign owner. Preserve the delivery tag, producer references, and evidence
56
+ links. Do not infer implementation-parent or producer task status changes.
57
+
@@ -0,0 +1,57 @@
1
+ # Prepare a stable release cut from an explicitly accepted producer set.
2
+ # Usage: ace-assign create --task TASK[,TASK...] --preset deliver-release
3
+
4
+ name: deliver-release
5
+ description: Prepare and bind a stable release cut without exercising publication authority
6
+
7
+ parameters:
8
+ taskrefs:
9
+ required: true
10
+ type: array
11
+ description: Producer task references contributing to the accepted release source set
12
+
13
+ steps:
14
+ - name: bind-release-cut
15
+ number: "010"
16
+ instructions: |
17
+ From producer task references {{taskrefs}}, record one immutable release manifest
18
+ containing the exact accepted source set (repository/ref and commit SHA for every
19
+ member), every package name and version, every artifact digest with algorithm,
20
+ the decision actor and timestamp, and the policy/plan revision plus evidence
21
+ references that accepted the cut. Reject incomplete or ambiguous bindings.
22
+ Once accepted, do not add later merges or silently replace a source, version, or
23
+ artifact; make a new release-cut decision instead.
24
+
25
+ - name: verify-release-evidence
26
+ number: "020"
27
+ instructions: |
28
+ Verify tests and independent review are current for every exact source head in the
29
+ manifest. Reconcile target movement and provenance before preparation. A moved or
30
+ rebuilt source requires renewed evidence and a newly bound artifact digest.
31
+
32
+ - name: prepare-release-artifacts
33
+ number: "030"
34
+ instructions: |
35
+ Perform only project-authorized local release preparation. Build artifacts from
36
+ the bound source set, verify the declared package name and version, compute the
37
+ final artifact digest, and update the manifest before it is accepted. Preparation
38
+ is not publication, installation, deployment, or proof of any of those effects.
39
+
40
+ - name: publication-authority-placeholder
41
+ number: "040"
42
+ instructions: |
43
+ Publication placeholder only. Do not run a publish command in this preset. Route
44
+ the exact manifest to the separate publication authority named by project policy.
45
+ Missing credentials, publisher identity, or admission is
46
+ BLOCKED(provision, owner). If that authority accepts a request and returns a
47
+ durable operation reference plus reconciliation path, record
48
+ WAIT(reference, next-check); otherwise preserve uncertainty and do not retry.
49
+
50
+ - name: record-release-outcome
51
+ number: "050"
52
+ instructions: |
53
+ Record only attributable publication, installation, or deployment receipts from
54
+ their owning authorities, each bound to the exact manifest. Host-owned root
55
+ effects remain referenced external operations. Keep later merges outside this
56
+ release outcome.
57
+
@@ -0,0 +1,67 @@
1
+ # Select and integrate an ordered batch from existing producer tasks.
2
+ # Usage: ace-assign create --task TASK[,TASK...] --preset integrate-batch
3
+
4
+ name: integrate-batch
5
+ description: Select a dependency-valid integration batch and renew exact-head evidence after candidate movement
6
+
7
+ parameters:
8
+ taskrefs:
9
+ required: true
10
+ type: array
11
+ description: Existing producer task references eligible for batch selection
12
+
13
+ steps:
14
+ - name: select-integration-batch
15
+ number: "010"
16
+ instructions: |
17
+ Resolve the current project delivery guide and evaluate producer task references
18
+ {{taskrefs}}. Record the ordered eligible set, selected entries in intended
19
+ integration order, deferred entries with reasons, decision actor and timestamp,
20
+ policy/plan revision, and evidence references. Bind each selected entry to its
21
+ exact candidate head SHA and the current target branch SHA. Do not derive order
22
+ from completion time and do not reparent producer tasks.
23
+
24
+ - name: delegate-candidate-update
25
+ number: "020"
26
+ instructions: |
27
+ When the target branch moved or a selected candidate needs rebase, conflict
28
+ resolution, or another head-changing update, delegate that update to an
29
+ attributable executor. Retain the old and new exact candidate head SHA and the
30
+ declared delta. Do not perform integration from evidence bound to the old head.
31
+
32
+ - name: delegate-renewed-evidence
33
+ number: "030"
34
+ instructions: |
35
+ After any candidate movement, delegate renewed evidence for the new exact head:
36
+ prove replay content identity with range-diff or a stronger project-approved
37
+ comparison, run fresh relevant tests, and obtain an independent reviewer verdict.
38
+ The reviewer must be independent of the executor. Content beyond the declared
39
+ replay delta requires the full project review gate, not a verdict-stands shortcut.
40
+
41
+ - name: reevaluate-integration-readiness
42
+ number: "040"
43
+ instructions: |
44
+ Re-read dependency state, candidate and target branch heads, evidence,
45
+ authorization, transport, and grouping constraints immediately before requesting
46
+ integration. Any change voids prior eligibility and requires a new complete
47
+ selection decision record. Defer every candidate whose exact-head evidence is no
48
+ longer current.
49
+
50
+ - name: request-integration
51
+ number: "050"
52
+ instructions: |
53
+ Request integration only through the project's authorized integrator, preserving
54
+ the exact ordered candidates and target binding. This step grants no merge
55
+ authority. Missing provision is BLOCKED(provision, owner). After a request is
56
+ accepted, WAIT requires its durable operation reference and exact reconciliation
57
+ path. On an uncertain effect, reconcile the original operation and never repeat
58
+ the merge request blindly.
59
+
60
+ - name: record-integration-result
61
+ number: "060"
62
+ instructions: |
63
+ Record the authoritative result and resulting target head for each selected entry,
64
+ or the attributable blocker. Re-evaluate remaining candidates against the moved
65
+ target before another effect; successful integration does not select a release cut
66
+ or authorize publication.
67
+
File without changes
File without changes
@@ -0,0 +1,67 @@
1
+ # Delivery queue supervision over existing producer tasks.
2
+ # Usage: ace-assign create --task TASK[,TASK...] --preset supervise-delivery
3
+
4
+ name: supervise-delivery
5
+ description: Supervise dependency-aware integration and release decisions for several PR-ready producer tasks
6
+
7
+ parameters:
8
+ taskrefs:
9
+ required: true
10
+ type: array
11
+ description: Existing producer task references to observe as delivery queue entries
12
+
13
+ steps:
14
+ - name: reconcile-delivery-queue
15
+ number: "010"
16
+ instructions: |
17
+ Reconcile the current canonical Assign attempts, task evidence, candidate heads,
18
+ dependency state, and project delivery guide for producer task references:
19
+ {{taskrefs}}.
20
+
21
+ These are references to producer tasks; never reparent, duplicate, reopen, or
22
+ change producer task status. A PR-ready worker remains terminal even while this
23
+ delivery assignment stays open. No second queue, journal, daemon, or cache may
24
+ be created. Treat an empty observation as current input only: Transiently empty
25
+ is not accepted completion.
26
+
27
+ - name: supervise-delivery-queue
28
+ number: "020"
29
+ instructions: |
30
+ Act as the one running supervisory step for producer task references {{taskrefs}}.
31
+ Apply the resolved project decision guide to dependency readiness, integration
32
+ grouping, evidence freshness, release/demo/production policy, and available
33
+ authority. Integration order follows dependencies and policy, never completion
34
+ order or worker finish timestamps.
35
+
36
+ Before every integration effect, write a canonical step report containing all
37
+ mandatory decision-record fields:
38
+ - ordered eligible set;
39
+ - selected next entry;
40
+ - deferred entries, with a reason for every skipped candidate;
41
+ - decision actor and timestamp;
42
+ - policy/plan revision and evidence references used for the decision.
43
+
44
+ For every entry, evaluate dependency state, exact candidate head SHA, fresh
45
+ test and independent-review evidence bound to that head, required authority and
46
+ transport, and grouping constraints. Re-record the decision after dependency,
47
+ candidate head, evidence, authority, transport, or target-branch movement.
48
+
49
+ - name: reconcile-integration-operation
50
+ number: "030"
51
+ instructions: |
52
+ Reconcile each requested integration through its original canonical operation.
53
+ Use WAIT(reference, next-check) only after an authorized request has a durable
54
+ operation reference and an exact public poll/reconcile path. Use
55
+ BLOCKED(provision, owner) when authority, transport, provisioning, or the durable
56
+ result path is absent. A lost or uncertain response without a durable path is
57
+ BLOCKED with the responsible host owner; never invent WAIT and never blindly
58
+ repeat launch, merge, publication, or deployment.
59
+
60
+ - name: decide-delivery-continuation
61
+ number: "040"
62
+ instructions: |
63
+ Record the explicit project-policy decision to integrate more candidates, cut a
64
+ release from the current accepted set, deploy through a separately authorized
65
+ project workflow, or keep this delivery open. Preserve callbacks and resume from
66
+ canonical state. Producer completion alone never closes this assignment.
67
+
File without changes
data/CHANGELOG.md CHANGED
@@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.68.0] - 2026-10-14
11
+
12
+ ### Added
13
+
14
+ - Admit ordinary fixed merge requests through the maintained `ace-lab service request/status --mode ordinary-merge` producer via the closed-argv `OrdinaryMergeCli`, with opaque-reference recovery, exact terminal receipt acceptance, and the canonical request digest defined as lowercase SHA-256 over the full eight-field immutable binding per spec ruling r4 — re-derived from the recorded binding on every poll and validated against every acknowledgment, refusal, status, and receipt echo.
15
+ - Add fixed merge request schemas, opaque fixed-effect references, evidence-journal records, and coordinator primitives (admit/begin/settle/read-only status) so the canonical Assign attempt/evidence state remains the sole durable record: an identical resubmission replays the original acknowledgment, a reused, consumed, expired, or out-of-scope authorization raises the distinct `AuthorizationConflict`, and a restarted receiver can never begin the effect twice.
16
+
17
+ ## [0.67.0] - 2026-10-12
18
+
19
+ ### Added
20
+
21
+ - Add project-adaptable delivery supervision presets for dependency-aware queue decisions, renewed-evidence integration batches, immutable release cuts, and evidence-preserving closure.
22
+
10
23
  ## [0.66.1] - 2026-10-10
11
24
 
12
25
  ### Fixed
data/Rakefile CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/docs/handbook.md CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -747,6 +747,45 @@ ace-assign attempt reconcile --attempt "$ATTEMPT_ID" --receipt /tmp/attempt-rece
747
747
  - Running attempts stay running only while their recorded process is verifiably live; anything else becomes `stopped` or `uncertain`.
748
748
  - Never replay `merge`, `publish`, or `deploy` automatically. Reconciliation records evidence; it never re-executes effects.
749
749
 
750
+ #### Integration Gate and Typed Outcomes (every integration invocation)
751
+
752
+ These gates apply at EVERY integration entry point — a native integrate
753
+ command, a service invocation, or an assignment integration step — with
754
+ shared contract validation so no entry point bypasses them.
755
+
756
+ - Before any mutation, resolve FRESH repository, PR, candidate exact head,
757
+ target base/head, review/test evidence and the authorized executor; recheck
758
+ target/head immediately before the mutation. A detected race invalidates
759
+ eligibility for that invocation.
760
+ - The low-level privileged integrator ENFORCES the gates and returns one typed
761
+ outcome: `merged`, `needs-rebase`, `blocked` or `uncertain`. It never
762
+ authors, rebases or reviews its own candidate. Relay alone is not
763
+ execution: the queue owner monitors until receipt and continuation.
764
+ - If the target (current main) is NOT an ancestor of the candidate head, the
765
+ outcome is `needs-rebase`: never merge and never silently rewrite. The queue
766
+ owner delegates `wfi://git/rebase` (as-git-rebase, including CHANGELOG
767
+ preservation) in the candidate's isolated worktree, obtains refreshed
768
+ exact-head checks plus independent review of the NEW head, updates the PR,
769
+ verifies remote candidate identity and resubmits. A common old base does
770
+ NOT make sibling heads sequentially fast-forwardable.
771
+ - Integration is serial in PREPARATION as well as in effect: the accepted
772
+ receipt for one candidate causes preparation of ONLY the next selected
773
+ candidate — never a mass rebase of the remaining queue. Each candidate, on
774
+ its turn: resolve fresh target main; delegate `wfi://git/rebase` in that
775
+ candidate's isolated worktree IF needed; run the applicable checks; obtain
776
+ an INDEPENDENT EXPLICIT review of the resulting exact head (patch identity
777
+ may support a short delta review but never substitutes the explicit
778
+ independent head approval); verify the remote PR head/base; issue ONE
779
+ scoped integrator request; wait/reconcile the actual integration receipt;
780
+ refresh main; select and prepare ONLY the next candidate. Queued later
781
+ PRs keep their existing branches/heads untouched until their turn; prior
782
+ batch work is never rolled back or reset.
783
+ - `uncertain` triggers reconciliation against the original durable reference;
784
+ it never permits blind retry.
785
+ - Never push directly to main; never switch the canonical checkout to a topic
786
+ branch; never reuse a stale review as approval for a different or moved
787
+ head.
788
+
750
789
  ### Human-in-the-Loop (HITL) Stall Protocol
751
790
 
752
791
  Canonical source of truth: `wfi://hitl`.
File without changes
File without changes
File without changes
File without changes