taskforce-loop-engineering 0.15.7 → 0.15.8

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.15.8 - 2026-08-25
6
+
7
+ - Preserve every non-blocking risk from the effective terminal checkpoint in `final_judgement.residual_risks`, including accepted project completions without a continuation action.
8
+ - Deduplicate repeated terminal risks while retaining the accepted completion outcome.
9
+ - Add regression coverage proving accepted terminal checkpoints keep their operational risks visible.
10
+
5
11
  ## 0.15.7 - 2026-08-24
6
12
 
7
13
  - Prevent accepted phase checkpoints from producing `ready_to_apply` when they explicitly mark project completion as `in_progress`, including both string and object completion forms.
package/lib/core.mjs CHANGED
@@ -3852,6 +3852,7 @@ export function buildFinalJudgement(contract, acceptancePlan, devPlan, checkpoin
3852
3852
  const explicitContinuationReviews = effectiveReviews.filter((review) =>
3853
3853
  (review.checkpointRisks?.length ?? 0) > 0 && continuationNextAction(review.checkpointNextAction)
3854
3854
  );
3855
+ const effectiveResidualRisks = [...new Set(effectiveReviews.flatMap((review) => review.checkpointRisks ?? []))];
3855
3856
  const deferredGateCount = effectiveReviews.reduce((count, review) => count + (review.deferredGates?.length ?? 0), 0);
3856
3857
  let outcome = 'needs_revision';
3857
3858
 
@@ -3954,7 +3955,7 @@ export function buildFinalJudgement(contract, acceptancePlan, devPlan, checkpoin
3954
3955
  residual_risks: [
3955
3956
  ...(contract.requires_human_gate ? ['Human gate still required before external or high-risk action.'] : []),
3956
3957
  ...(context.verificationFailed ? ['Configured verification has failing commands.'] : []),
3957
- ...explicitContinuationReviews.flatMap((review) => review.checkpointRisks ?? [])
3958
+ ...effectiveResidualRisks
3958
3959
  ],
3959
3960
  created_at: new Date().toISOString()
3960
3961
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taskforce-loop-engineering",
3
- "version": "0.15.7",
3
+ "version": "0.15.8",
4
4
  "private": false,
5
5
  "description": "OpenClaw-native loop engineering CLI, templates, and skill for verifiable agent work loops.",
6
6
  "type": "module",
@@ -175,7 +175,13 @@ assert.equal(inferTaskScope({ body: 'Continue the overall project with a product
175
175
 
176
176
  {
177
177
  const devPlan = { checkpoints: [{ id: 'cp1' }] };
178
- const reviews = { reviews: [{ checkpointId: 'cp6', sequence: 6, status: 'accepted', projectCompletion: { status: 'accepted' } }] };
178
+ const reviews = { reviews: [{
179
+ checkpointId: 'cp6', sequence: 6, status: 'accepted', projectCompletion: { status: 'accepted' },
180
+ checkpointRisks: [
181
+ 'A non-blocking operational risk remains after acceptance.',
182
+ 'A non-blocking operational risk remains after acceptance.'
183
+ ]
184
+ }] };
179
185
  const judgement = buildFinalJudgement(
180
186
  { ...baseContract, task_scope: 'project' },
181
187
  basePlan,
@@ -185,6 +191,7 @@ assert.equal(inferTaskScope({ body: 'Continue the overall project with a product
185
191
  { dispatchStatus: 'completed' }
186
192
  );
187
193
  assert.equal(judgement.outcome, 'ready_to_apply');
194
+ assert.deepEqual(judgement.residual_risks, ['A non-blocking operational risk remains after acceptance.']);
188
195
  }
189
196
 
190
197
  console.log('final judgement self-test passed');