agents-relay 2.0.127 → 2.0.129

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.
@@ -20,7 +20,7 @@ export const reviewLifecycleV2 = new GraphRuntime(source, {
20
20
  reviewUnblocked: boolGuard('reviewUnblocked'),
21
21
  },
22
22
  actions: Object.fromEntries(['review.create', 'review.cancelStale', 'review.createFix', 'review.requestMerge'].map(id => [id, { id }])),
23
- events: Object.fromEntries(['reconcile', 'review.started', 'review.approved', 'review.changes_required', 'review.blocked', 'review.retry', 'head.changed'].map(id => [id, { id }])),
23
+ events: Object.fromEntries(['reconcile', 'review.started', 'review.approved', 'review.changes_required', 'review.legacy_blocked', 'review.retry', 'head.changed'].map(id => [id, { id }])),
24
24
  });
25
25
  export function reviewGraphState(outcome) {
26
26
  if (!outcome)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agents-relay",
3
- "version": "2.0.127",
3
+ "version": "2.0.129",
4
4
  "description": "Durable async agent jobs coordinated through GitHub pull requests",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,6 +19,15 @@ For every non-satisfied objective:
19
19
  3. Mark the points in that graph that deserve durable Task boundaries.
20
20
  4. Create only the next useful executable Task batch from those boundaries.
21
21
 
22
+ ### Objective decomposition and convergence
23
+
24
+ - **Never bundle independently testable acceptance layers into one giant Task.** Break objectives into separately verifiable deliverables (for example, contract tests, real-provider compliance, scheduler-driven end-to-end scenarios, and integration evidence). Give each Task concrete acceptance checks and an observable output.
25
+ - Split a large Task when its remaining work spans distinct implementation areas, independently testable failure paths, or more than one meaningful review/recovery cycle. Put shared prerequisites in earlier Tasks and express true dependencies explicitly; independent work may run in parallel.
26
+ - For a failed Task with repeated deterministic acceptance gaps, do not reissue the identical broad assignment. Identify the *missing acceptance cases*, create focused same-Job repair Tasks with valid `same_job_dependency` resolutions, and specify how their evidence unblocks the original Task. Preserve the original failed Task and failure history.
27
+ - For event-driven workflows, separate basic ingress/persistence checks from real scheduler-driven multi-stage scenarios. Require negative-path, multi-failure recovery and no-false-completion evidence before claiming full objective coverage.
28
+ - In `assessment`, show the entire remaining objective as a dependency graph, clearly distinguishing already proven work, the executable batch, subsequent verification, and Relay-owned review/merge. Never report overall `satisfied` merely because one batch has passed.
29
+
30
+
22
31
  A Task is **not** just a workflow step. Create a Task when its outcome deserves an independent durable lifecycle because it may need to be:
23
32
 
24
33
  - discussed or referenced later;
@@ -5,6 +5,7 @@ pending["state: PENDING"]
5
5
  started["state: STARTED"]
6
6
  approved["state: APPROVED"]
7
7
  changes["state: CHANGES_REQUIRED"]
8
+ %% BLOCKED is only for legacy records awaiting authoritative unblock.
8
9
  blocked["state: BLOCKED"]
9
10
  stale["state: STALE"]
10
11
 
@@ -91,6 +92,7 @@ pendingUnapproved -->|true| createPendingRetry
91
92
  pendingUnapproved -->|false| pending
92
93
  createPendingRetry --> pending
93
94
 
95
+ pending -->|on: review.legacy_blocked| blocked
94
96
  pending -->|on: review.started| started
95
97
  pending -->|on: review.approved| autoMergePending
96
98
  autoMergePending -->|true| mergePending
@@ -98,7 +100,6 @@ mergePending --> approved
98
100
  autoMergePending -->|false| approved
99
101
  pending -->|on: review.changes_required| fixPending
100
102
  fixPending --> changes
101
- pending -->|on: review.blocked| blocked
102
103
 
103
104
  started -->|on: review.approved| autoMergeStarted
104
105
  autoMergeStarted -->|true| mergeStarted
@@ -106,7 +107,6 @@ mergeStarted --> approved
106
107
  autoMergeStarted -->|false| approved
107
108
  started -->|on: review.changes_required| fixStarted
108
109
  fixStarted --> changes
109
- started -->|on: review.blocked| blocked
110
110
  changes -->|on: review.changes_required| fixChanges
111
111
  fixChanges --> changes
112
112