@farmslot/agent-runtime 0.17.5 → 0.18.1

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,18 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.18.1 - 2026-10-12
6
+
7
+ - Update shared runtime dependencies for bounded recipe log observations.
8
+
9
+ ## 0.18.0 - 2026-10-12
10
+
11
+ - Consume the shared acceptance contract and engine-derived claims; automatic ledgers permit only audited untestable overrides (ADR-062).
12
+ - Execute declared deterministic checklist commands through mark and refuse completion without current passing receipts and logs. Track submodule revisions too; require submodule changes to be committed before checking the parent repository.
13
+ - Use neutral review/review-fix task and terminal contracts across execution templates and checklist helpers.
14
+
15
+ - Successful task completion requires verdicts for every registered acceptance criterion, including older contracts without an acceptance opt-in. Missing or unreadable ledgers fail closed; no-change and review outcomes retain their existing contracts.
16
+
5
17
  ## 0.17.5 - 2026-10-11
6
18
 
7
19
  - Align the protocol dependency with 0.37.0 so consumers resolve one copy.
@@ -1,6 +1,6 @@
1
1
  import type { ExecutionTemplateEntry, ExecutionTemplateLayout, ExecutionTemplateSource } from './types.js';
2
- /** Longest-first so `fix-bug` / `pr-complete` / `self-review` win over shorter prefixes. */
3
- export declare const FARMSLOT_FLOW_PREFIXES: readonly ["self-review-fix", "pr-complete", "fix-bug", "review-pr", "update-branch", "self-review", "validate-dep", "ci-fix", "dev", "qa"];
2
+ /** Longest-first so `fix-bug` / `pr-complete` / `review` win over shorter prefixes. */
3
+ export declare const FARMSLOT_FLOW_PREFIXES: readonly ["review-fix", "pr-complete", "fix-bug", "review-pr", "update-branch", "review", "validate-dep", "ci-fix", "dev", "qa"];
4
4
  export declare function humanizeBasename(basename: string): string;
5
5
  export declare function inferFlowFromBasename(basename: string): string | null;
6
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"infer.d.ts","sourceRoot":"","sources":["../../src/execution-template/infer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,sBAAsB,EAEtB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,4IAWzB,CAAC;AAIX,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOrE;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAS/F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAsD7C"}
1
+ {"version":3,"file":"infer.d.ts","sourceRoot":"","sources":["../../src/execution-template/infer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,sBAAsB,EAEtB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,uFAAuF;AACvF,eAAO,MAAM,sBAAsB,kIAWzB,CAAC;AAIX,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOrE;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,uBAAuB,GAAG,MAAM,CAS/F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,uBAAuB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAsD7C"}
@@ -2,14 +2,14 @@ import path from 'node:path';
2
2
  import { EXECUTION_TEMPLATE_DOMAIN_LABEL_PREFIX } from '@farmslot/protocol';
3
3
  import { frontmatterPlatforms, parseMarkdownDocument, } from './frontmatter.js';
4
4
  import { sha256Text } from './snapshot.js';
5
- /** Longest-first so `fix-bug` / `pr-complete` / `self-review` win over shorter prefixes. */
5
+ /** Longest-first so `fix-bug` / `pr-complete` / `review` win over shorter prefixes. */
6
6
  export const FARMSLOT_FLOW_PREFIXES = [
7
- 'self-review-fix',
7
+ 'review-fix',
8
8
  'pr-complete',
9
9
  'fix-bug',
10
10
  'review-pr',
11
11
  'update-branch',
12
- 'self-review',
12
+ 'review',
13
13
  'validate-dep',
14
14
  'ci-fix',
15
15
  'dev',
@@ -1 +1 @@
1
- {"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/execution-template/infer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"infer.js","sourceRoot":"","sources":["../../src/execution-template/infer.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,sCAAsC,EAAE,MAAM,oBAAoB,CAAC;AAE5E,OAAO,EACL,oBAAoB,EAEpB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAQ3C,uFAAuF;AACvF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,YAAY;IACZ,aAAa;IACb,SAAS;IACT,WAAW;IACX,eAAe;IACf,QAAQ;IACR,cAAc;IACd,QAAQ;IACR,KAAK;IACL,IAAI;CACI,CAAC;AAEX,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAEnE,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,QAAQ;SACZ,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;SAC1C,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,sBAAsB,EAAE,CAAC;QAC1C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YAChF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAoB;IACpD,qEAAqE;IACrE,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACvE,IAAK,sBAA4C,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAClF,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,QAAgB;IACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC;YAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,YAAoB,EAAE,MAA+B;IACrF,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,UAAU,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC/D,OAAO,GAAG,IAAI,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAKrC;IACC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,MAAM,GAA2B,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,EAAE,GAAwC,MAAM,CAAC,WAAW,CAAC;IAEnE,MAAM,UAAU,GAAG,OAAO,EAAE,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW;QACjC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;QAC5D,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,IAAI,GAAG,UAAU,IAAI,WAAW,IAAI,qBAAqB,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IAEvF,MAAM,QAAQ,GAAG,OAAO,EAAE,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,MAAM,EAAE,GAAG,QAAQ,IAAI,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAElF,MAAM,WAAW,GAAG,OAAO,EAAE,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,KAAK,GAAG,WAAW,IAAI,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1E,MAAM,iBAAiB,GAAG,OAAO,EAAE,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3F,MAAM,UAAU,GAAG,EAAE,EAAE,OAAO,CAAC;IAC/B,MAAM,OAAO,GAAG,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEnF,MAAM,SAAS,GAAG,oBAAoB,CAAC,EAAE,CAAC,IAAI,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5F,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;QACtE,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG;QACb,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,iBAAiB;YACpB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CACjC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,sCAAsC,GAAG,MAAM,EAAE,CACjE;SACF,CAAC;KACH,CAAC;IAEF,OAAO;QACL,EAAE;QACF,KAAK;QACL,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI;QACJ,OAAO;QACP,SAAS;QACT,MAAM;QACN,IAAI,EAAE,KAAK,CAAC,YAAY;QACxB,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;QACpD,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;QACzB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;QAC7B,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAC9B,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;QAC3C,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW;QACrC,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAE7B,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAC;AAO5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAUhE,mGAAmG;AACnG,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,8BAA8B,CAMhC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,4GAA4G;IAC5G,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,UAAU,EAAE,iBAAiB,CAAC;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,8BAA8B,CAAC;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,iBAAiB,EAAE,wBAAwB,CAAC;IAC5C,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAoF1E;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,EAAE,wBAAwB,GAAG,0BAA0B,CAAC;IAC1E,kBAAkB,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;CACpE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgBzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAE7B,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAC;AAO5B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAUhE,mGAAmG;AACnG,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAC5C,8BAA8B,CAMhC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,4GAA4G;IAC5G,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,yBAAyB,CAAC;IACpC,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,UAAU,EAAE,iBAAiB,CAAC;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6GAA6G;IAC7G,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,8BAA8B,CAAC;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,iBAAiB,EAAE,wBAAwB,CAAC;IAC5C,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAqF1E;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,CAAC,EAAE,wBAAwB,GAAG,0BAA0B,CAAC;IAC1E,kBAAkB,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;CACpE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAgBzE"}
@@ -97,6 +97,7 @@ export async function taskInit(spec) {
97
97
  handoff: handoffMetadata,
98
98
  terminalContract,
99
99
  bugInput: spec.bugInput,
100
+ deterministicCommands: vars,
100
101
  });
101
102
  return { ...written, executionTemplate, handoffMetadata };
102
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task-init/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-document.d.ts","sourceRoot":"","sources":["../../src/task-init/task-document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-document.d.ts","sourceRoot":"","sources":["../../src/task-init/task-document.ts"],"names":[],"mappings":"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"}
@@ -92,6 +92,13 @@ export function buildTaskDocument(input) {
92
92
  if (input.modePreamble.trim())
93
93
  sections.push(input.modePreamble, '');
94
94
  sections.push('## Task', '', '```text', taskBlock, '```', '', '## Description', '', input.description || '_No description_', '', '## Acceptance Criteria', '', renderAcceptanceCriteria(input.acceptanceCriteria));
95
+ if (normalizeAcceptanceCriteria(input.acceptanceCriteria).length > 0) {
96
+ const agentRoot = vars.farmslot_dir?.replace(/^~(?=\/)/, '${HOME}');
97
+ const agent = agentRoot
98
+ ? `node "${agentRoot}/packages/agent-runtime/bin/farmslot-agent.mjs"`
99
+ : 'farmslot-agent';
100
+ sections.push('', '## Acceptance verdicts + recipe coverage', '', `Before successful completion or handing off a PR, set TASK_DIR to \`${taskDir}\` and run \`${agent} ac list\`. Record an honest verdict for every registered AC with \`${agent} ac set AC-N proven --proof-mode state --recipe-node <node-id> --evidence <task-relative-path>\`; choose the actual state, visual or mixed mode and existing evidence, and omit the recipe node when no recipe applies. Use \`untestable --note <reason>\` only when proof is unavailable.`, `Run \`ac list\` again. When recipe.json exists, render coverage with \`${agent} ac render\` to a temporary file, then replace \`artifacts/recipe-coverage.md\` only after a successful render. Run \`${agent} artifact-check ${taskDir} --require-recipe-coverage-if-recipe --require-acceptance-status\` before \`mark complete\`. Missing or unrecorded verdicts refuse completion; checked checklist items alone do not assess an AC.`);
101
+ }
95
102
  if (input.affectedArea && input.affectedArea !== '_Not specified_') {
96
103
  sections.push('', '## Affected Area', '', input.affectedArea);
97
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"task-document.js","sourceRoot":"","sources":["../../src/task-init/task-document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-document.js","sourceRoot":"","sources":["../../src/task-init/task-document.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,8 @@ export interface WriteTaskDirInput {
26
26
  markCommand?: string;
27
27
  handoff: HandoffMetadata;
28
28
  terminalContract: WorkerTerminalContractDocument;
29
+ /** Project command references made available to the selected checklist. */
30
+ deterministicCommands?: Record<string, string>;
29
31
  /** Ticket data as fetched, written to inputs/bug-input.json when present. */
30
32
  bugInput?: unknown;
31
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAIpD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,8FAA8F;AAC9F,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,gBAAgB,EAAE,8BAA8B,CAAC;IACjD,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CASpF;AAED,gFAAgF;AAChF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAC9C,eAAe,UAAQ,GACtB,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAmF/C"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,KAAK,8BAA8B,EACpC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,SAAS,SAAS,CAAC;AAChC,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,sBAAsB,CAAC;AAepD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,8FAA8F;AAC9F,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,gBAAgB,EAAE,8BAA8B,CAAC;IACjD,2EAA2E;IAC3E,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAepF;AAED,gFAAgF;AAChF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAC9C,eAAe,UAAQ,GACtB,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CA8F/C"}
@@ -1,6 +1,7 @@
1
1
  // The task-dir writer: the only code that lays out a task directory. A control
2
2
  // plane and a harness both call it, so the two surfaces cannot drift.
3
3
  import { chmod, mkdir, readFile, writeFile } from 'node:fs/promises';
4
+ import { createRequire } from 'node:module';
4
5
  import path from 'node:path';
5
6
  import { fileURLToPath } from 'node:url';
6
7
  import { isDeepStrictEqual } from 'node:util';
@@ -11,6 +12,8 @@ export const MARK_SHIM = 'mark';
11
12
  /** Whole-command env override honoured by every `mark` shim. */
12
13
  export const MARK_COMMAND_ENV = 'FARMSLOT_MARK_CMD';
13
14
  const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
15
+ const require = createRequire(import.meta.url);
16
+ const { deterministicChecks } = require('../../scripts/worker-terminal-contract.cjs');
14
17
  /**
15
18
  * Quote one word for the shim's default command: double quotes keep spaces
16
19
  * together while `$HOME` (a remote slot's home) still expands.
@@ -42,11 +45,18 @@ export async function writeTaskDir(input) {
42
45
  await mkdir(path.join(taskDir, 'artifacts'), { recursive: true });
43
46
  const taskDocument = path.join(taskDir, TASK_DOCUMENT);
44
47
  await writeFile(taskDocument, input.taskMarkdown, 'utf-8');
45
- return { taskDocument, ...(await ensureTaskRuntime(input, true)) };
48
+ const terminalContract = deterministicChecks.freeze(input.terminalContract, input.checklistMarkdown ?? input.taskMarkdown, input.checklistMarkdown === null ? TASK_DOCUMENT : EXECUTION_CHECKLIST_DOCUMENT, input.deterministicCommands);
49
+ return { taskDocument, ...(await ensureTaskRuntime({ ...input, terminalContract }, true)) };
46
50
  }
47
51
  /** Initialize existing author-owned tasks through the same runtime producer. */
48
52
  export async function ensureTaskRuntime(input, replaceExisting = false) {
49
53
  const taskDir = path.resolve(input.taskDir);
54
+ if (input.checklistMarkdown !== null) {
55
+ input = {
56
+ ...input,
57
+ terminalContract: deterministicChecks.freeze(input.terminalContract, input.checklistMarkdown, EXECUTION_CHECKLIST_DOCUMENT, input.deterministicCommands),
58
+ };
59
+ }
50
60
  if (!replaceExisting) {
51
61
  const existing = async (name) => {
52
62
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sEAAsE;AAEtE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,GAE/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,SAAS,EACT,aAAa,EAEb,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC;AAChC,gEAAgE;AAChE,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAEpD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3F;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,kBAAkB;IAChC,OAAO,QAAQ,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC;AACtG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO;QACL,qBAAqB;QACrB,mBAAmB;QACnB,oDAAoD;QACpD,WAAW,gBAAgB,KAAK,WAAW,eAAe;QAC1D,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAyBD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAwB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAElE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACvD,MAAM,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAE3D,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAA8C,EAC9C,eAAe,GAAG,KAAK;IAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;YACtC,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,SAAS,CAAC;gBACzE,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,CAAC,KAAsB,EAAE,EAAE,CAAC,CAAC;YAC5C,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;YAC1B,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM;YAC1B,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,IAAI,EAAE,kBAAkB,IAAI,EAAE,CAAC;YAC3E,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzF,MAAM,IAAI,KAAK,CACb,sIAAsI,CACvI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,8BAA8B,CAAC,CAAC;QAChE,MAAM,gBAAgB,GAAG,CAAC,EACxB,UAAU,EAAE,WAAW,EACvB,GAAG,KAAK,EACuB,EAAE,EAAE,CAAC,KAAK,CAAC;QAC5C,IACE,QAAQ,KAAK,SAAS;YACtB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAExF,MAAM,IAAI,KAAK,CACb,qHAAqH,CACtH,CAAC;IACN,CAAC;IACD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAE,IAAY,EAAoB,EAAE;QACnE,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,eAAe,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACzF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,KAAK,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;QACrC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,4BAA4B,CAAC,CAAC;QAC7D,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC,CAAC;QAC7E,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SACtB,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,+EAA+E;QAC/E,IACE,OAAO,CAAC,UAAU,CAAC,8CAA8C,CAAC;YAClE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;YAEzC,MAAM,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAClD,MAAM,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAEpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;IAC5E,MAAM,KAAK,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtF,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC;AAC3E,CAAC"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/task-init/write.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farmslot/agent-runtime",
3
- "version": "0.17.5",
3
+ "version": "0.18.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "scripts": {
36
36
  "typecheck": "yarn workspace @farmslot/protocol build && tsc --noEmit --project tsconfig.json",
37
- "test": "node test/mark-checklist-step.test.cjs && node test/mark-subtask.test.cjs && node test/acceptance-ledger.test.cjs && node test/checklist-target-sync.test.mjs && node test/acceptance-ledger-sync.test.mjs && node test/package-exports.test.cjs && node test/check-task-artifact-contract.test.cjs && node test/recipe-quality-builder.test.cjs && node test/task-init.test.mjs && node --import tsx ../../scripts/e2e-subtask-mark.mts && node --import tsx ../../scripts/e2e-acceptance-ledger.mts && node ../../scripts/quality/run-tsx-tests.mjs --cwd . --tsconfig tsconfig.json src/execution-template && node ../../scripts/quality/run-tsx-tests.mjs --cwd . --tsconfig tsconfig.json src/task-init && node ../../scripts/quality/run-tsx-tests.mjs --cwd . --tsconfig tsconfig.json src/native",
37
+ "test": "node --test test/deterministic-checks.test.cjs && node test/mark-checklist-step.test.cjs && node test/mark-subtask.test.cjs && node test/acceptance-ledger.test.cjs && node test/checklist-target-sync.test.mjs && node test/acceptance-ledger-sync.test.mjs && node test/package-exports.test.cjs && node test/check-task-artifact-contract.test.cjs && node test/recipe-quality-builder.test.cjs && node test/task-init.test.mjs && node --import tsx ../../scripts/e2e-subtask-mark.mts && node --import tsx ../../scripts/e2e-acceptance-ledger.mts && node ../../scripts/quality/run-tsx-tests.mjs --cwd . --tsconfig tsconfig.json src/execution-template && node ../../scripts/quality/run-tsx-tests.mjs --cwd . --tsconfig tsconfig.json src/task-init && node ../../scripts/quality/run-tsx-tests.mjs --cwd . --tsconfig tsconfig.json src/native",
38
38
  "format": "prettier --write --ignore-path ../../.prettierignore .",
39
39
  "format:check": "prettier --check --ignore-path ../../.prettierignore .",
40
40
  "lint": "eslint \"src/**/*.ts\"",
@@ -45,7 +45,7 @@
45
45
  "prepublishOnly": "node ../../scripts/quality/check-farmslot-package-readiness.mjs --publish --packages @farmslot/agent-runtime"
46
46
  },
47
47
  "dependencies": {
48
- "@farmslot/protocol": "0.37.0"
48
+ "@farmslot/protocol": "0.40.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@types/node": "^22.0.0",
@@ -29,6 +29,7 @@ const USAGE = [
29
29
  ` --proof-mode <${ACCEPTANCE_PROOF_MODES.join('|')}> how the criterion is proven`,
30
30
  ' --evidence <task-dir relative path> repeatable; the file must exist',
31
31
  ' --recipe-node <id> repeatable; recipe node proving it',
32
+ ' --actor <identity> required for an automatic-ledger override',
32
33
  ' --note "..." why, especially for untestable',
33
34
  ' ac list every criterion with its current verdict (JSON, verdict null when unrecorded)',
34
35
  ' ac render the coverage table, ending with the Overall recipe coverage line',
@@ -55,6 +56,7 @@ function parseArgs(argv) {
55
56
  evidence: [],
56
57
  recipeNodes: [],
57
58
  note: undefined,
59
+ actor: undefined,
58
60
  };
59
61
  for (let i = 0; i < argv.length; i += 1) {
60
62
  const arg = argv[i];
@@ -62,6 +64,7 @@ function parseArgs(argv) {
62
64
  else if (arg === '--proof-mode') opts.proofMode = takeValue(argv, i++, arg);
63
65
  else if (arg === '--evidence') opts.evidence.push(takeValue(argv, i++, arg));
64
66
  else if (arg === '--recipe-node') opts.recipeNodes.push(takeValue(argv, i++, arg));
67
+ else if (arg === '--actor') opts.actor = takeValue(argv, i++, arg);
65
68
  else if (arg === '--note') opts.note = takeValue(argv, i++, arg);
66
69
  else if (arg === '-h' || arg === '--help') usage(0);
67
70
  else if (arg.startsWith('-')) throw new AcceptanceRefusal(`unknown option ${arg}`, 2);
@@ -98,6 +101,7 @@ function main(argv) {
98
101
  evidence: opts.evidence,
99
102
  recipeNodes: opts.recipeNodes,
100
103
  note: opts.note,
104
+ actor: opts.actor,
101
105
  });
102
106
  const entry = ledger.criteria.find((criterion) => criterion.id === id);
103
107
  console.log(`${id}: ${entry.verdict}${entry.proofMode ? ` (${entry.proofMode})` : ''}`);
@@ -12,16 +12,20 @@ const { atomicWrite, readJson } = require('./mark-io.cjs');
12
12
  // (@farmslot/recipe-cli). The ids come from task init, which records the criteria in
13
13
  // inputs/handoff.json; this module never invents one.
14
14
  //
15
- // The constants and the validate/summarize/render helpers are a behavioral mirror
16
- // of @farmslot/protocol/contracts/acceptance (see test/acceptance-ledger-sync.test.mjs).
17
- // The mirror exists because the mark engine and this CLI are CJS and must run on a
18
- // slot without a built protocol package.
15
+ // Portable contract helpers are shared with protocol clients, including unbuilt slot scripts.
19
16
 
20
17
  const HANDOFF_INPUT = path.join('inputs', 'handoff.json');
21
- const ACCEPTANCE_STATUS_ARTIFACT = 'artifacts/acceptance-status.json';
22
- const ACCEPTANCE_VERDICTS = ['proven', 'weak', 'missing', 'untestable'];
23
- const ACCEPTANCE_PROOF_MODES = ['state', 'visual', 'mixed'];
24
- const ACCEPTANCE_CRITERION_ID_PATTERN = /^AC-[1-9][0-9]*$/;
18
+ const {
19
+ ACCEPTANCE_STATUS_ARTIFACT,
20
+ ACCEPTANCE_VERDICTS,
21
+ ACCEPTANCE_PROOF_MODES,
22
+ ACCEPTANCE_CRITERION_ID_PATTERN,
23
+ acceptanceCriterionId,
24
+ validateAcceptanceStatusLedger,
25
+ acceptanceCriteriaView,
26
+ summarizeAcceptanceStatus,
27
+ renderAcceptanceCoverage,
28
+ } = require('@farmslot/protocol/scripts/acceptance.mjs');
25
29
 
26
30
  /** A refused command: the message is worker-facing, the code is the exit code. */
27
31
  class AcceptanceRefusal extends Error {
@@ -36,142 +40,10 @@ class AcceptanceRefusal extends Error {
36
40
  * `AC-<N>` for a criterion's position in the handoff array.
37
41
  * @param {number} index 0-based position in inputs/handoff.json task.acceptanceCriteria.
38
42
  */
39
- function acceptanceCriterionId(index) {
40
- return `AC-${index + 1}`;
41
- }
42
-
43
43
  function isRecord(value) {
44
44
  return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
45
45
  }
46
46
 
47
- function isNonEmptyString(value) {
48
- return typeof value === 'string' && value.trim().length > 0;
49
- }
50
-
51
- function validateAcceptanceStatusLedger(value) {
52
- const issues = [];
53
- if (!isRecord(value)) return ['acceptance ledger: expected object'];
54
- if (value.schemaVersion !== 1) issues.push('acceptance ledger schemaVersion: expected 1');
55
- if (!Array.isArray(value.criteria)) {
56
- issues.push('acceptance ledger criteria: expected array');
57
- return issues;
58
- }
59
- const seen = new Set();
60
- value.criteria.forEach((entry, index) => {
61
- const prefix = `acceptance ledger criteria[${index}]`;
62
- if (!isRecord(entry)) {
63
- issues.push(`${prefix}: expected object`);
64
- return;
65
- }
66
- if (!isNonEmptyString(entry.id) || !ACCEPTANCE_CRITERION_ID_PATTERN.test(entry.id)) {
67
- issues.push(`${prefix}.id: expected AC-<N>`);
68
- } else if (seen.has(entry.id)) {
69
- issues.push(`${prefix}.id: duplicate ${entry.id}`);
70
- } else {
71
- seen.add(entry.id);
72
- }
73
- if (typeof entry.text !== 'string') issues.push(`${prefix}.text: expected string`);
74
- if (!ACCEPTANCE_VERDICTS.includes(entry.verdict)) {
75
- issues.push(`${prefix}.verdict: expected one of ${ACCEPTANCE_VERDICTS.join(', ')}`);
76
- }
77
- if (entry.proofMode !== undefined && !ACCEPTANCE_PROOF_MODES.includes(entry.proofMode)) {
78
- issues.push(`${prefix}.proofMode: expected one of ${ACCEPTANCE_PROOF_MODES.join(', ')}`);
79
- }
80
- for (const key of ['evidence', 'recipeNodes']) {
81
- const list = entry[key];
82
- if (!Array.isArray(list) || list.some((item) => !isNonEmptyString(item))) {
83
- issues.push(`${prefix}.${key}: expected an array of non-empty strings`);
84
- }
85
- }
86
- if (entry.note !== undefined && typeof entry.note !== 'string') {
87
- issues.push(`${prefix}.note: expected string`);
88
- }
89
- if (!isNonEmptyString(entry.updatedAt)) {
90
- issues.push(`${prefix}.updatedAt: expected non-empty string`);
91
- }
92
- });
93
- return issues;
94
- }
95
-
96
- function acceptanceCriteriaView(criteria, ledger) {
97
- const byId = new Map((ledger?.criteria ?? []).map((entry) => [entry.id, entry]));
98
- const rows = criteria.map((criterion) => ({
99
- ...criterion,
100
- status: byId.get(criterion.id) ?? null,
101
- }));
102
- for (const entry of ledger?.criteria ?? []) {
103
- if (!criteria.some((criterion) => criterion.id === entry.id)) {
104
- rows.push({ id: entry.id, text: entry.text, status: entry });
105
- }
106
- }
107
- return rows;
108
- }
109
-
110
- function summarizeAcceptanceStatus(ledger, criteria) {
111
- const total = criteria
112
- ? Math.max(criteria.length, ledger.criteria.length)
113
- : ledger.criteria.length;
114
- const summary = {
115
- proven: 0,
116
- weak: 0,
117
- missing: 0,
118
- untestable: 0,
119
- unrecorded: 0,
120
- total,
121
- };
122
- for (const criterion of ledger.criteria) summary[criterion.verdict] += 1;
123
- summary.unrecorded =
124
- total - (summary.proven + summary.weak + summary.missing + summary.untestable);
125
- return summary;
126
- }
127
-
128
- function cell(value) {
129
- return (
130
- value
131
- .replace(/\|/g, '\\|')
132
- .replace(/\s*\n\s*/g, ' ')
133
- .trim() || '-'
134
- );
135
- }
136
-
137
- function list(values) {
138
- return values.length > 0 ? cell(values.join(', ')) : '-';
139
- }
140
-
141
- function renderAcceptanceCoverage(ledger, criteria = ledger.criteria) {
142
- const summary = summarizeAcceptanceStatus(ledger, criteria);
143
- const rows = acceptanceCriteriaView(criteria, ledger);
144
- const untestable = ledger.criteria
145
- .filter((criterion) => criterion.verdict === 'untestable')
146
- .map((criterion) => criterion.id);
147
- const lines = [
148
- '## Recipe coverage',
149
- '',
150
- '| AC | Criterion | Verdict | Proof mode | Recipe nodes | Evidence | Note |',
151
- '| --- | --- | --- | --- | --- | --- | --- |',
152
- ];
153
- for (const row of rows) {
154
- const status = row.status;
155
- lines.push(
156
- `| ${row.id} | ${cell(row.text)} | ${status ? status.verdict.toUpperCase() : 'NO VERDICT'} | ` +
157
- `${status?.proofMode ?? '-'} | ${list(status?.recipeNodes ?? [])} | ` +
158
- `${list(status?.evidence ?? [])} | ${cell(status?.note ?? '')} |`,
159
- );
160
- }
161
- lines.push(
162
- '',
163
- `Overall recipe coverage: ${summary.proven}/${summary.total} ACs PROVEN ` +
164
- `(untestable: ${untestable.length > 0 ? untestable.join(', ') : 'none'}, ` +
165
- `weak: ${summary.weak}, missing: ${summary.missing}` +
166
- `${summary.unrecorded > 0 ? `, no verdict: ${summary.unrecorded}` : ''})`,
167
- '',
168
- );
169
- return lines.join('\n');
170
- }
171
-
172
- // ---------------------------------------------------------------------------
173
- // task-dir IO
174
-
175
47
  function ledgerPath(taskDir) {
176
48
  return path.join(taskDir, ACCEPTANCE_STATUS_ARTIFACT);
177
49
  }
@@ -305,6 +177,35 @@ function setAcceptanceVerdict(taskDir, input) {
305
177
  );
306
178
  }
307
179
  }
180
+ if (stored?.schemaVersion === 2) {
181
+ if (input.verdict !== 'untestable' || !input.note?.trim() || !input.actor?.trim())
182
+ throw new AcceptanceRefusal(
183
+ 'Automatic claim verdicts are engine-owned; an untestable override requires actor and reason.',
184
+ );
185
+ const prior = stored.criteria.find((entry) => entry.id === input.id);
186
+ if (!prior) throw new AcceptanceRefusal(`No automatic claim ${input.id} to override.`);
187
+ const override = {
188
+ actor: input.actor,
189
+ reason: input.note,
190
+ priorVerdict: prior.verdict,
191
+ at: input.now ?? new Date().toISOString(),
192
+ };
193
+ const updated = {
194
+ ...stored,
195
+ criteria: stored.criteria.map((entry) =>
196
+ entry.id === input.id
197
+ ? {
198
+ ...entry,
199
+ verdict: 'untestable',
200
+ note: input.note,
201
+ overrides: [...(entry.overrides ?? []), override],
202
+ }
203
+ : entry,
204
+ ),
205
+ };
206
+ writeAcceptanceLedger(taskDir, updated);
207
+ return updated;
208
+ }
308
209
  const byId = new Map((stored?.criteria ?? []).map((entry) => [entry.id, entry]));
309
210
  byId.set(criterion.id, {
310
211
  id: criterion.id,
@@ -325,6 +226,29 @@ function setAcceptanceVerdict(taskDir, input) {
325
226
  return ledger;
326
227
  }
327
228
 
229
+ /** Transfer one engine-owned execution. Never aggregate sibling attempts. */
230
+ function setDerivedClaims(taskDir, claims) {
231
+ if (claims.schemaVersion !== 2) throw new AcceptanceRefusal('Derived claims require schema 2.');
232
+ const registered = handoffAcceptanceCriteria(taskDir);
233
+ for (const criterion of registered) {
234
+ const claim = claims.criteria.find((entry) => entry.id === criterion.id);
235
+ if (!claim || claim.text !== criterion.text)
236
+ throw new AcceptanceRefusal(
237
+ `Engine claim ${criterion.id} does not match the registered task.`,
238
+ );
239
+ }
240
+ for (const claim of claims.criteria) {
241
+ if (
242
+ ACCEPTANCE_CRITERION_ID_PATTERN.test(claim.id) &&
243
+ !registered.some((entry) => entry.id === claim.id)
244
+ )
245
+ throw new AcceptanceRefusal(`Unknown task claim ${claim.id}.`);
246
+ for (const file of claim.evidence) assertEvidencePath(taskDir, file);
247
+ }
248
+ writeAcceptanceLedger(taskDir, claims);
249
+ return claims;
250
+ }
251
+
328
252
  /** Every handoff criterion with its current verdict, or null when unrecorded. */
329
253
  function acceptanceStatusList(taskDir) {
330
254
  const stored = readAcceptanceLedger(taskDir);
@@ -350,7 +274,13 @@ function acceptanceStatusList(taskDir) {
350
274
  * (`acceptance.allowWeak`). Returns an empty array when the run has no criteria.
351
275
  */
352
276
  function acceptanceContractIssues(taskDir, options = {}) {
353
- const criteria = handoffAcceptanceCriteria(taskDir);
277
+ let criteria;
278
+ try {
279
+ criteria = requireHandoffAcceptanceCriteria(taskDir);
280
+ } catch (err) {
281
+ if (!(err instanceof AcceptanceRefusal)) throw err;
282
+ return [err.message];
283
+ }
354
284
  if (criteria.length === 0) return [];
355
285
  let stored;
356
286
  try {
@@ -369,7 +299,10 @@ function acceptanceContractIssues(taskDir, options = {}) {
369
299
  if (issues.length > 0) return issues;
370
300
  const known = new Set(criteria.map((criterion) => criterion.id));
371
301
  for (const entry of stored.criteria) {
372
- if (!known.has(entry.id)) {
302
+ if (
303
+ !known.has(entry.id) &&
304
+ (stored.schemaVersion === 1 || ACCEPTANCE_CRITERION_ID_PATTERN.test(entry.id))
305
+ ) {
373
306
  issues.push(
374
307
  `${ACCEPTANCE_STATUS_ARTIFACT}: ${entry.id} is not an acceptance criterion of this task`,
375
308
  );
@@ -384,7 +317,11 @@ function acceptanceContractIssues(taskDir, options = {}) {
384
317
  );
385
318
  continue;
386
319
  }
387
- if (!options.allowWeak && (entry.verdict === 'missing' || entry.verdict === 'weak')) {
320
+ if (
321
+ entry.verdict === 'failed' ||
322
+ entry.verdict === 'awaiting-review' ||
323
+ (!options.allowWeak && (entry.verdict === 'missing' || entry.verdict === 'weak'))
324
+ ) {
388
325
  issues.push(
389
326
  `${criterion.id} is ${entry.verdict}: prove it, or record \`untestable\` with a note ` +
390
327
  '(a flow may waive this with worker_terminal.acceptance.allowWeak)',
@@ -409,6 +346,7 @@ module.exports = {
409
346
  readAcceptanceLedger,
410
347
  renderAcceptanceCoverage,
411
348
  setAcceptanceVerdict,
349
+ setDerivedClaims,
412
350
  summarizeAcceptanceStatus,
413
351
  validateAcceptanceStatusLedger,
414
352
  writeAcceptanceLedger,
@@ -5,7 +5,10 @@ import path from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
6
 
7
7
  const require = createRequire(import.meta.url);
8
- const { expandedArtifactsForCommand } = require('./worker-terminal-contract.cjs');
8
+ const {
9
+ expandedArtifactsForCommand,
10
+ deterministicChecks,
11
+ } = require('./worker-terminal-contract.cjs');
9
12
  const { SUBTASK_INDEX_REL, openSubtaskUnits } = require('./subtask-unit.cjs');
10
13
  const { acceptanceContractIssues } = require('./acceptance-ledger.cjs');
11
14
  const packageRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
@@ -590,13 +593,13 @@ if (contractPath && terminalCommand && existsSync(contractPath)) {
590
593
  issues.push(`${contractPath}: invalid worker terminal contract JSON (${error.message})`);
591
594
  }
592
595
  }
593
- const isSelfReviewTerminal = terminalContract?.flowType === 'self-review';
596
+ const isReviewTerminal = terminalContract?.flowType === 'review';
594
597
  const hasRecipe = fileExists('artifacts/recipe.json');
595
598
 
596
599
  // A reviewer must be able to report ISSUES when worker-owned proof is invalid.
597
600
  // Its terminal gate validates only the reviewer-owned feedback artifact below;
598
601
  // contribution and fix flows still validate the complete proof package.
599
- if (!isSelfReviewTerminal) {
602
+ if (!isReviewTerminal) {
600
603
  const hasRecipeDecision = fileExists('artifacts/recipe-decision.json');
601
604
  const recipeDecisionText = readText('artifacts/recipe-decision.json');
602
605
  if (hasRecipeDecision) {
@@ -689,7 +692,10 @@ if (fileExists(SUBTASK_INDEX_REL)) {
689
692
  // The acceptance ledger is the run's proof record (ADR-060): every criterion task
690
693
  // init registered in inputs/handoff.json needs a verdict, and `weak` / `missing`
691
694
  // fails unless the flow's terminal contract waives it.
692
- if (flags.has('--require-acceptance-status')) {
695
+ if (
696
+ flags.has('--require-acceptance-status') ||
697
+ (terminalCommand === 'complete' && !isReviewTerminal)
698
+ ) {
693
699
  for (const issue of acceptanceContractIssues(taskDir, {
694
700
  allowWeak: terminalContract?.acceptance?.allowWeak === true,
695
701
  })) {
@@ -707,9 +713,7 @@ if (flags.has('--require-learnings')) {
707
713
  if (contractPath && terminalCommand && !existsSync(contractPath)) {
708
714
  issues.push(`${contractPath}: explicit worker terminal contract missing`);
709
715
  } else if (terminalContract && terminalCommand) {
710
- const contract = isSelfReviewTerminal
711
- ? { ...terminalContract, whenPresent: [] }
712
- : terminalContract;
716
+ const contract = isReviewTerminal ? { ...terminalContract, whenPresent: [] } : terminalContract;
713
717
  const expanded = expandedArtifactsForCommand(contract, terminalCommand, fileExists);
714
718
  for (const artifactPath of expanded.artifacts) {
715
719
  if (flags.has('--skip-learnings') && artifactPath === 'artifacts/learnings.md') continue;
@@ -728,9 +732,29 @@ if (contractPath && terminalCommand && !existsSync(contractPath)) {
728
732
  }
729
733
  }
730
734
 
735
+ const deterministicResults = [];
736
+ if (terminalCommand !== 'blocked') {
737
+ const checklists = new Set(
738
+ (terminalContract?.deterministicChecks ?? []).map((step) => step.checklist),
739
+ );
740
+ if (checklists.size === 0) checklists.add(undefined);
741
+ for (const checklist of checklists) {
742
+ try {
743
+ const result = deterministicChecks.evaluate(taskDir, checklist);
744
+ issues.push(...result.issues);
745
+ deterministicResults.push(...result.checks);
746
+ } catch (error) {
747
+ issues.push(`Deterministic checks cannot be validated: ${error.message}`);
748
+ }
749
+ }
750
+ }
751
+
731
752
  if (issues.length > 0) {
732
753
  console.error('TASK_ARTIFACT_CONTRACT_FAIL');
733
754
  for (const issue of issues) console.error(`- ${issue}`);
734
755
  process.exit(1);
735
756
  }
736
757
  console.log('TASK_ARTIFACT_CONTRACT_PASS');
758
+ if (deterministicResults.length > 0) {
759
+ console.log(`${deterministicChecks.outputPrefix}${JSON.stringify(deterministicResults)}`);
760
+ }
@@ -14,8 +14,8 @@ const SUBTASKS_DIR = 'subtasks';
14
14
  const SUBTASK_INDEX_FILE = 'index.json';
15
15
  const SUBTASK_ID_PATTERN = /^[a-z0-9-]+$/;
16
16
 
17
- const SELF_REVIEW_CHECKLIST = 'SELF-REVIEW.md';
18
- const SELF_REVIEW_FIX_CHECKLIST = 'SELF-REVIEW-FIX.md';
17
+ const REVIEW_CHECKLIST = 'REVIEW.md';
18
+ const REVIEW_FIX_CHECKLIST = 'REVIEW-FIX.md';
19
19
  const CI_FIX_CHECKLIST = 'CI-FIX.md';
20
20
  // Sections whose checkboxes are informational (ACs, descriptions, upstream
21
21
  // PR-template fields) — not task steps. Canonical copy lives in
@@ -181,13 +181,13 @@ function defaultWorkerTarget(taskDir) {
181
181
  return targetForChecklistBasename(checklist);
182
182
  }
183
183
 
184
- const SELF_REVIEW_CHECKLIST_TARGET = targetForChecklistBasename(SELF_REVIEW_CHECKLIST);
185
- const SELF_REVIEW_FIX_CHECKLIST_TARGET = targetForChecklistBasename(SELF_REVIEW_FIX_CHECKLIST);
184
+ const REVIEW_CHECKLIST_TARGET = targetForChecklistBasename(REVIEW_CHECKLIST);
185
+ const REVIEW_FIX_CHECKLIST_TARGET = targetForChecklistBasename(REVIEW_FIX_CHECKLIST);
186
186
  const CI_FIX_CHECKLIST_TARGET = targetForChecklistBasename(CI_FIX_CHECKLIST);
187
187
 
188
188
  const CHECKLIST_TARGET_BY_AGENT_ROLE = {
189
- 'self-review': SELF_REVIEW_CHECKLIST_TARGET,
190
- 'self-review-fix': SELF_REVIEW_FIX_CHECKLIST_TARGET,
189
+ review: REVIEW_CHECKLIST_TARGET,
190
+ 'review-fix': REVIEW_FIX_CHECKLIST_TARGET,
191
191
  'ci-fix': CI_FIX_CHECKLIST_TARGET,
192
192
  };
193
193
 
@@ -338,11 +338,11 @@ module.exports = {
338
338
  INTERACTIVE_CHECKLIST_MARKDOWN,
339
339
  WORKER_SIGNAL_FILE,
340
340
  ROLE_SIGNAL_SUFFIX,
341
- SELF_REVIEW_CHECKLIST,
342
- SELF_REVIEW_FIX_CHECKLIST,
341
+ REVIEW_CHECKLIST,
342
+ REVIEW_FIX_CHECKLIST,
343
343
  CI_FIX_CHECKLIST,
344
- SELF_REVIEW_CHECKLIST_TARGET,
345
- SELF_REVIEW_FIX_CHECKLIST_TARGET,
344
+ REVIEW_CHECKLIST_TARGET,
345
+ REVIEW_FIX_CHECKLIST_TARGET,
346
346
  CI_FIX_CHECKLIST_TARGET,
347
347
  CHECKLIST_TARGET_BY_AGENT_ROLE,
348
348
  DEFAULT_CHECKLIST_TARGET_REGISTRY,
@@ -6,6 +6,7 @@ const { spawnSync } = require('node:child_process');
6
6
  const {
7
7
  expandedArtifactsForCommand,
8
8
  resolveWorkerTerminalContract,
9
+ deterministicChecks,
9
10
  } = require('./worker-terminal-contract.cjs');
10
11
  const {
11
12
  parseTaskDirMarkArgs,
@@ -42,8 +43,8 @@ const FLOW_REPORT_ARTIFACTS = {
42
43
  'pr-complete': ['comments-report.md', 'report.md'],
43
44
  'update-branch': ['branch-update-report.md', 'report.md'],
44
45
  'ci-fix': ['report.md'],
45
- 'self-review': ['review-feedback.md', 'report.md'],
46
- 'self-review-fix': ['report.md'],
46
+ review: ['review-feedback.md', 'report.md'],
47
+ 'review-fix': ['report.md'],
47
48
  };
48
49
  const FALLBACK_REPORT_ARTIFACTS = [
49
50
  'report.md',
@@ -61,16 +62,16 @@ function printHelp() {
61
62
  usageLine,
62
63
  '',
63
64
  'Task-dir mode: farmslot-agent mark <task-dir> <step> — marks CHECKLIST.md (or TASK.md) unless checklist-target.json, written by a role switch, points elsewhere.',
64
- 'Override: farmslot-agent mark <task-dir> --checklist SELF-REVIEW.md <step> — optional --signal; signal defaults from checklist name.',
65
+ 'Override: farmslot-agent mark <task-dir> --checklist REVIEW.md <step> — optional --signal; signal defaults from checklist name.',
65
66
  'Bootstrap: ./mark start — role-owned signal with status running (no checklist box).',
66
67
  'Progress: ./mark 1, ./mark 2, ... — checks the box and appends checklistTiming.',
67
68
  'Child units: ./mark sub start <id> --step N --from <path|inline:text>, then ./mark sub <id> <n> | complete [--report PATH] [--mark-last] | blocked --reason "..." | status.',
68
69
  ' While a child owns step N, ./mark N is refused; the child complete ticks it. Run ./mark sub --help for the child verbs.',
69
70
  'Terminal:',
70
- ' ./mark complete [--mark-last] [--no-self-review] [--skip-learnings] [--skip-checklist]',
71
+ ' ./mark complete [--mark-last] [--no-review] [--skip-learnings] [--skip-checklist]',
71
72
  ' ./mark no-change --reason "..." [--already-fixed] [--mark-last] [--skip-learnings] [--skip-checklist]',
72
73
  ' ./mark blocked --reason "..." [--mark-last]',
73
- 'Terminal success paths require the flow contract artifacts: contribution flows need non-empty artifacts/learnings.md plus a flow outcome artifact (complete) or no-change-report (no-change); reviewer flows (self-review, self-review-fix) need their feedback/report artifact instead of learnings.',
74
+ 'Terminal success paths require the flow contract artifacts: contribution flows need non-empty artifacts/learnings.md plus a flow outcome artifact (complete) or no-change-report (no-change); reviewer flows (review, review-fix) need their feedback/report artifact instead of learnings.',
74
75
  'PR flows (dev, fix-bug): write artifacts/pr-description.md. Other flows: review.md, review-feedback.md, branch-update-report.md, report.md, etc.',
75
76
  'With --mark-last, every checklist box must be [x] unless --skip-checklist. complete also runs check-task-artifact-contract.mjs.',
76
77
  'Do not write SIGNAL.json by hand or with echo.',
@@ -131,7 +132,7 @@ for (let i = 0; i < rest.length; i += 1) {
131
132
  if (
132
133
  key === '--mark-last' ||
133
134
  key === '--already-fixed' ||
134
- key === '--no-self-review' ||
135
+ key === '--no-review' ||
135
136
  key === '--skip-learnings' ||
136
137
  key === '--skip-checklist'
137
138
  ) {
@@ -276,9 +277,8 @@ function inferFlowType(taskPath) {
276
277
  if (label.includes('pr-complete') || label.includes('pr complete')) return 'pr-complete';
277
278
  if (label.includes('update-branch') || label.includes('update branch')) return 'update-branch';
278
279
  if (label.includes('ci-fix') || label.includes('ci fix')) return 'ci-fix';
279
- if (label.includes('self-review fix') || label.includes('self-review-fix'))
280
- return 'self-review-fix';
281
- if (label.includes('self-review') || label.includes('self review')) return 'self-review';
280
+ if (label.includes('review fix') || label.includes('review-fix')) return 'review-fix';
281
+ if (label.includes('review')) return 'review';
282
282
  if (label.includes('interactive dev')) return 'dev';
283
283
  if (/\bdev\b/.test(label) && !label.includes('review')) return 'dev';
284
284
  }
@@ -321,11 +321,9 @@ function assertArtifactContract(taskDir, taskPath, contract, terminalCommand) {
321
321
  }
322
322
  const contractPath = terminalContractPath(taskDir, taskPath);
323
323
  const args = [ARTIFACT_CONTRACT_SCRIPT, taskDir];
324
- // The ledger blocks `complete` only where the project opted in
325
- // (`worker_terminal.acceptance.require`) AND the task registered criteria
326
- // (ADR-060). Without the opt-in a template that does not write a ledger yet
327
- // still completes; the ledger is watched, projected and preferred for coverage
328
- // either way.
324
+ if (terminalCommand) args.push('--terminal', terminalCommand);
325
+ // This explicit flag keeps project opt-ins compatible with older checkers.
326
+ // Current checkers also enforce registered verdicts on terminal complete.
329
327
  if (terminalCommand === 'complete' && contract?.acceptance?.require === true) {
330
328
  let criteria;
331
329
  try {
@@ -342,11 +340,10 @@ function assertArtifactContract(taskDir, taskPath, contract, terminalCommand) {
342
340
  }
343
341
  if (fs.existsSync(contractPath)) {
344
342
  args.push('--contract', contractPath);
345
- if (terminalCommand) args.push('--terminal', terminalCommand);
346
343
  if (opts['skip-learnings']) args.push('--skip-learnings');
347
344
  } else {
348
345
  // No persisted contract file — honor the resolved builtin contract instead of
349
- // assuming learnings: reviewer flows (self-review, self-review-fix) require their
346
+ // assuming learnings: reviewer flows (review, review-fix) require their
350
347
  // feedback/report artifact, not artifacts/learnings.md.
351
348
  const contractRequiresLearnings = contract
352
349
  ? (contract.commands?.[terminalCommand ?? 'complete']?.artifacts ?? []).includes(
@@ -387,7 +384,7 @@ function assertTerminalPackagedEvidence(taskPath, taskDir, terminalCommand) {
387
384
  }
388
385
 
389
386
  if (terminalCommand === 'complete' || terminalCommand === 'no-change') {
390
- assertArtifactContract(taskDir, taskPath);
387
+ assertArtifactContract(taskDir, taskPath, undefined, terminalCommand);
391
388
  }
392
389
  }
393
390
 
@@ -417,9 +414,7 @@ function buildSignalUpdate(signal, terminal, target, timing, events, now, taskPa
417
414
  outcome: preset.outcome,
418
415
  disposition: preset.disposition,
419
416
  ...(opts.reason ? { reason: opts.reason } : {}),
420
- ...(terminal.command === 'complete' && opts['no-self-review']
421
- ? { needsSelfReview: false }
422
- : {}),
417
+ ...(terminal.command === 'complete' && opts['no-review'] ? { needsReview: false } : {}),
423
418
  ...(opts['skip-learnings'] ? { artifactWaivers: { learnings: true } } : {}),
424
419
  };
425
420
 
@@ -455,6 +450,12 @@ function resolveTarget(taskPath, stepNumber, markLast) {
455
450
  // Also covers `--mark-last`: the parent must not tick a box whose child is
456
451
  // still open, whichever way the row was chosen.
457
452
  assertStepNotOwnedBySubtask(item.stepNumber);
453
+ try {
454
+ deterministicChecks.execute(path.dirname(taskPath), path.basename(taskPath), item.stepNumber);
455
+ } catch (error) {
456
+ console.error(error.message);
457
+ process.exit(1);
458
+ }
458
459
  const nextLines = [...parsed.lines];
459
460
  markStepInLines(nextLines, item);
460
461
  updated = nextLines.join('\n');
@@ -1,3 +1,14 @@
1
+ const fs = require('node:fs');
2
+ const path = require('node:path');
3
+ const { createHash, randomUUID } = require('node:crypto');
4
+ const { spawnSync } = require('node:child_process');
5
+ const {
6
+ enumerateChecklistCheckboxes,
7
+ terminalContractInputForChecklist,
8
+ resolveChecklistTarget,
9
+ } = require('./checklist-target.cjs');
10
+ const { atomicWrite } = require('./mark-io.cjs');
11
+
1
12
  /** @typedef {'complete' | 'no-change' | 'blocked'} WorkerTerminalCommand */
2
13
 
3
14
  /**
@@ -122,7 +133,7 @@ const BUILTIN_FLOW_COMMANDS = {
122
133
  // reviewer evaluates someone else's work, so the learnings requirement that
123
134
  // applies to contribution flows does not apply here (matches the templates
124
135
  // and the runtime FLOW_REPORT_ARTIFACTS mapping).
125
- 'self-review': {
136
+ review: {
126
137
  complete: {
127
138
  report: 'artifacts/review-feedback.md',
128
139
  artifacts: ['artifacts/review-feedback.md'],
@@ -133,7 +144,7 @@ const BUILTIN_FLOW_COMMANDS = {
133
144
  },
134
145
  blocked: { artifacts: [] },
135
146
  },
136
- 'self-review-fix': {
147
+ 'review-fix': {
137
148
  complete: { report: 'artifacts/report.md', artifacts: ['artifacts/report.md'] },
138
149
  'no-change': {
139
150
  report: 'artifacts/no-change-report.md',
@@ -319,7 +330,7 @@ function templateBodyScope(content) {
319
330
  * Deterministic structure checks beyond terminal artifact contract.
320
331
  * @param {string} templateContent
321
332
  * @param {{ roleChecklist?: boolean }} [options] roleChecklist: a nested-loop role
322
- * checklist (self-review, self-review-fix, ci-fix) rendered beside an existing
333
+ * checklist (review, review-fix, ci-fix) rendered beside an existing
323
334
  * task dir; it may keep its own `## Task` block.
324
335
  */
325
336
  function lintWorkerTemplateStructure(templateContent, options = {}) {
@@ -415,6 +426,336 @@ function expandedArtifactsForCommand(contract, command, fileExists) {
415
426
  };
416
427
  }
417
428
 
429
+ const DETERMINISTIC_REFERENCE = /\[DETERMINISTIC:\s*([A-Za-z_][A-Za-z0-9_.]*)\s*\]/;
430
+
431
+ function deterministicDeclarations(markdown, checklist) {
432
+ return enumerateChecklistCheckboxes(markdown).flatMap((item) => {
433
+ const match = item.rawLabel.match(DETERMINISTIC_REFERENCE);
434
+ if (!match && item.rawLabel.includes('[DETERMINISTIC')) {
435
+ throw new Error(`Invalid deterministic declaration in ${checklist} step ${item.stepNumber}`);
436
+ }
437
+ return match ? [{ checklist, stepNumber: item.stepNumber, reference: match[1] }] : [];
438
+ });
439
+ }
440
+
441
+ function freezeDeterministicChecks(contract, markdown, checklist, commands = {}) {
442
+ const steps = deterministicDeclarations(markdown, checklist).map((step) => {
443
+ const command = commands[step.reference]?.trim();
444
+ if (!command)
445
+ throw new Error(
446
+ `Deterministic step ${step.stepNumber}: ${step.reference} requires a configured command`,
447
+ );
448
+ return { ...step, command };
449
+ });
450
+ return steps.length ? { ...contract, deterministicChecks: steps } : contract;
451
+ }
452
+
453
+ function readOptionalJson(file) {
454
+ try {
455
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
456
+ } catch (error) {
457
+ if (error.code === 'ENOENT') return null;
458
+ throw error;
459
+ }
460
+ }
461
+
462
+ function deterministicContract(taskDir, checklist) {
463
+ return (
464
+ readOptionalJson(path.join(taskDir, terminalContractInputForChecklist(checklist))) ??
465
+ readOptionalJson(path.join(taskDir, 'inputs', 'worker-terminal-contract.json')) ??
466
+ {}
467
+ );
468
+ }
469
+
470
+ function recordedDeterministicSteps(taskDir, checklist) {
471
+ const contract = deterministicContract(taskDir, checklist);
472
+ const frozen = (contract.deterministicChecks ?? []).filter(
473
+ (step) => step.checklist === checklist,
474
+ );
475
+ const file = path.join(taskDir, checklist);
476
+ const actual = fs.existsSync(file)
477
+ ? deterministicDeclarations(fs.readFileSync(file, 'utf8'), checklist)
478
+ : [];
479
+ const steps = [...frozen];
480
+ for (const step of actual) {
481
+ if (
482
+ !steps.some(
483
+ (candidate) =>
484
+ candidate.stepNumber === step.stepNumber && candidate.reference === step.reference,
485
+ )
486
+ ) {
487
+ steps.push({ ...step, command: null });
488
+ }
489
+ }
490
+ return steps;
491
+ }
492
+
493
+ function deterministicCheckout(taskDir) {
494
+ for (const cwd of [taskDir, process.cwd()]) {
495
+ const result = spawnSync('git', ['rev-parse', '--show-toplevel'], { cwd, encoding: 'utf8' });
496
+ if (result.status === 0 && result.stdout.trim()) return fs.realpathSync(result.stdout.trim());
497
+ }
498
+ throw new Error(
499
+ 'Deterministic checks require a Git checkout. Invoke mark from the target checkout.',
500
+ );
501
+ }
502
+
503
+ function deterministicInputHash(checkout, taskDir) {
504
+ const result = spawnSync(
505
+ 'git',
506
+ ['ls-files', '-z', '--cached', '--others', '--exclude-standard'],
507
+ {
508
+ cwd: checkout,
509
+ encoding: 'utf8',
510
+ maxBuffer: 16 * 1024 * 1024,
511
+ },
512
+ );
513
+ if (result.status !== 0)
514
+ throw new Error('Cannot enumerate publishable inputs for deterministic checks');
515
+ const indexed = spawnSync('git', ['ls-files', '--stage', '-z'], {
516
+ cwd: checkout,
517
+ encoding: 'utf8',
518
+ maxBuffer: 16 * 1024 * 1024,
519
+ });
520
+ if (indexed.status !== 0)
521
+ throw new Error('Cannot enumerate tracked submodules for deterministic checks');
522
+ const gitlinks = new Map();
523
+ for (const entry of indexed.stdout.split('\0').filter(Boolean)) {
524
+ const tab = entry.indexOf('\t');
525
+ const [mode, commit, stage] = entry.slice(0, tab).split(' ');
526
+ if (mode !== '160000') continue;
527
+ const name = entry.slice(tab + 1);
528
+ if (stage !== '0') throw new Error(`Resolve submodule conflict ${name} before CI parity`);
529
+ gitlinks.set(name, commit);
530
+ }
531
+ const hash = createHash('sha256');
532
+ const task = fs.realpathSync(taskDir);
533
+ for (const name of [...new Set(result.stdout.split('\0').filter(Boolean))].sort()) {
534
+ const file = path.join(checkout, name);
535
+ if (file === task || file.startsWith(task + path.sep)) continue;
536
+ let stat;
537
+ try {
538
+ stat = fs.lstatSync(file);
539
+ } catch (error) {
540
+ if (error.code !== 'ENOENT') throw error;
541
+ }
542
+ if (gitlinks.has(name)) {
543
+ let commit = gitlinks.get(name);
544
+ if (stat) {
545
+ if (!stat.isDirectory()) throw new Error(`Tracked submodule ${name} is not a directory`);
546
+ const top = spawnSync('git', ['-C', file, 'rev-parse', '--show-toplevel'], {
547
+ encoding: 'utf8',
548
+ });
549
+ if (top.status !== 0) throw new Error(`Cannot inspect tracked submodule ${name}`);
550
+ // Uninitialized submodule directories resolve to the parent checkout.
551
+ if (fs.realpathSync(top.stdout.trim()) === fs.realpathSync(file)) {
552
+ const head = spawnSync('git', ['-C', file, 'rev-parse', 'HEAD'], { encoding: 'utf8' });
553
+ const dirty = spawnSync(
554
+ 'git',
555
+ [
556
+ '-C',
557
+ file,
558
+ 'status',
559
+ '--porcelain=v1',
560
+ '--untracked-files=all',
561
+ '--ignore-submodules=none',
562
+ ],
563
+ { encoding: 'utf8' },
564
+ );
565
+ if (head.status !== 0 || dirty.status !== 0)
566
+ throw new Error(`Cannot fingerprint tracked submodule ${name}`);
567
+ if (dirty.stdout.trim())
568
+ throw new Error(
569
+ `Submodule ${name} has uncommitted work; commit its changes, then rerun CI parity`,
570
+ );
571
+ commit = head.stdout.trim();
572
+ }
573
+ }
574
+ hash.update(name + '\0gitlink\0' + commit + '\0');
575
+ continue;
576
+ }
577
+ if (!stat) continue;
578
+ hash.update(name + '\0');
579
+ hash.update(String(stat.mode & 0o777) + '\0');
580
+ if (stat.isSymbolicLink()) hash.update(fs.readlinkSync(file));
581
+ else if (stat.isFile()) hash.update(fs.readFileSync(file));
582
+ else throw new Error(`Cannot fingerprint publishable input ${name}`);
583
+ hash.update('\0');
584
+ }
585
+ return hash.digest('hex');
586
+ }
587
+
588
+ function deterministicReceiptPath(taskDir, step) {
589
+ return path.join(
590
+ taskDir,
591
+ 'artifacts',
592
+ 'deterministic-checks',
593
+ step.checklist,
594
+ `${step.stepNumber}.json`,
595
+ );
596
+ }
597
+
598
+ function logHash(file) {
599
+ return createHash('sha256').update(fs.readFileSync(file)).digest('hex');
600
+ }
601
+
602
+ function executeDeterministicStep(taskDir, checklist, stepNumber) {
603
+ const step = recordedDeterministicSteps(taskDir, checklist).find(
604
+ (item) => item.stepNumber === stepNumber,
605
+ );
606
+ if (!step) return;
607
+ if (!step.command)
608
+ throw new Error(
609
+ `Deterministic step ${stepNumber}: ${step.reference} has no frozen command; initialize the task again`,
610
+ );
611
+ const checkout = deterministicCheckout(taskDir);
612
+ const inputHash = deterministicInputHash(checkout, taskDir);
613
+ const logPath = path.posix.join(
614
+ 'artifacts',
615
+ 'deterministic-checks',
616
+ checklist,
617
+ `${stepNumber}-${randomUUID()}.log`,
618
+ );
619
+ const logFile = path.join(taskDir, logPath);
620
+ fs.mkdirSync(path.dirname(logFile), { recursive: true });
621
+ const receiptFile = deterministicReceiptPath(taskDir, step);
622
+ const receipt = {
623
+ schemaVersion: 1,
624
+ ...step,
625
+ inputHash,
626
+ startedAt: new Date().toISOString(),
627
+ finishedAt: null,
628
+ status: 'running',
629
+ exitCode: null,
630
+ logPath,
631
+ };
632
+ atomicWrite(receiptFile, JSON.stringify(receipt, null, 2) + '\n');
633
+ const fd = fs.openSync(logFile, 'wx', 0o644);
634
+ let result;
635
+ try {
636
+ result = spawnSync('bash', ['-c', step.command], { cwd: checkout, stdio: ['ignore', fd, fd] });
637
+ } finally {
638
+ fs.closeSync(fd);
639
+ }
640
+ const afterHash = deterministicInputHash(checkout, taskDir);
641
+ const passed = result.status === 0 && inputHash === afterHash;
642
+ const completed = {
643
+ ...receipt,
644
+ finishedAt: new Date().toISOString(),
645
+ status: result.signal ? 'interrupted' : passed ? 'passed' : 'failed',
646
+ exitCode: result.status,
647
+ signal: result.signal ?? null,
648
+ logHash: logHash(logFile),
649
+ };
650
+ atomicWrite(receiptFile, JSON.stringify(completed, null, 2) + '\n');
651
+ if (!passed)
652
+ throw new Error(
653
+ `Deterministic step ${stepNumber} failed${inputHash !== afterHash ? ': command changed publishable inputs' : ` with exit ${result.status ?? result.signal ?? 'unknown'}`}. See ${logPath}`,
654
+ );
655
+ console.log(`Deterministic step ${stepNumber} passed, exit 0. Log: ${logPath}`);
656
+ }
657
+
658
+ function readDeterministicChecks(taskDir, checklist, options = {}) {
659
+ if (checklist === undefined) {
660
+ const target = resolveChecklistTarget(taskDir).checklist;
661
+ const contract = deterministicContract(taskDir, target);
662
+ const sources = [
663
+ ...new Set([target, ...(contract.deterministicChecks ?? []).map((step) => step.checklist)]),
664
+ ];
665
+ const hasSteps = sources.some(
666
+ (source) => recordedDeterministicSteps(taskDir, source).length > 0,
667
+ );
668
+ if (!hasSteps) return [];
669
+ const inputHash =
670
+ options.inputHash ?? deterministicInputHash(deterministicCheckout(taskDir), taskDir);
671
+ return sources.flatMap((source) => readDeterministicChecks(taskDir, source, { inputHash }));
672
+ }
673
+ const steps = recordedDeterministicSteps(taskDir, checklist);
674
+ if (!steps.length) return [];
675
+ const inputHash =
676
+ options.inputHash ?? deterministicInputHash(deterministicCheckout(taskDir), taskDir);
677
+ return steps.map((step) => {
678
+ let receipt;
679
+ let error;
680
+ try {
681
+ receipt = readOptionalJson(deterministicReceiptPath(taskDir, step));
682
+ } catch (cause) {
683
+ error = `Invalid execution receipt: ${cause.message}`;
684
+ }
685
+ let status = error ? 'failed' : receipt ? receipt.status : 'missing';
686
+ let message = error ?? (receipt ? '' : 'Execution receipt is missing');
687
+ if (receipt) {
688
+ if (
689
+ receipt.schemaVersion !== 1 ||
690
+ receipt.checklist !== checklist ||
691
+ receipt.stepNumber !== step.stepNumber ||
692
+ receipt.command !== step.command ||
693
+ receipt.reference !== step.reference ||
694
+ receipt.inputHash !== inputHash
695
+ ) {
696
+ status = 'stale';
697
+ message = 'Command or publishable inputs changed; rerun this mark step';
698
+ } else if (receipt.status !== 'passed' || receipt.exitCode !== 0 || !receipt.finishedAt) {
699
+ status =
700
+ receipt.status === 'interrupted' || receipt.status === 'running'
701
+ ? 'interrupted'
702
+ : 'failed';
703
+ message = `Command did not pass, exit ${receipt.exitCode ?? 'unavailable'}`;
704
+ } else {
705
+ const logFile =
706
+ typeof receipt.logPath === 'string' ? path.resolve(taskDir, receipt.logPath) : '';
707
+ if (
708
+ !logFile.startsWith(
709
+ path.resolve(taskDir, 'artifacts', 'deterministic-checks') + path.sep,
710
+ ) ||
711
+ !fs.existsSync(logFile) ||
712
+ receipt.logHash !== logHash(logFile)
713
+ ) {
714
+ status = 'failed';
715
+ message = 'Execution log is missing or changed';
716
+ }
717
+ }
718
+ }
719
+ if (!step.command) {
720
+ status = 'missing';
721
+ message = 'Declared command is missing from the frozen task contract';
722
+ }
723
+ return {
724
+ ...step,
725
+ status,
726
+ exitCode: receipt?.exitCode ?? null,
727
+ logPath: receipt?.logPath ?? null,
728
+ inputHash,
729
+ message,
730
+ };
731
+ });
732
+ }
733
+
734
+ function evaluateDeterministicChecks(taskDir, checklist) {
735
+ const checks = readDeterministicChecks(taskDir, checklist);
736
+ const issues = checks
737
+ .filter((step) => step.status !== 'passed')
738
+ .map(
739
+ (step) =>
740
+ `${step.checklist} step ${step.stepNumber} (${step.reference}): ${step.message || step.status}`,
741
+ );
742
+ return { checks, issues };
743
+ }
744
+
745
+ function deterministicContractIssues(taskDir, checklist) {
746
+ return evaluateDeterministicChecks(taskDir, checklist).issues;
747
+ }
748
+
749
+ const deterministicChecks = {
750
+ outputPrefix: 'TASK_DETERMINISTIC_CHECKS ',
751
+ declarations: deterministicDeclarations,
752
+ freeze: freezeDeterministicChecks,
753
+ execute: executeDeterministicStep,
754
+ read: readDeterministicChecks,
755
+ issues: deterministicContractIssues,
756
+ evaluate: evaluateDeterministicChecks,
757
+ };
758
+
418
759
  module.exports = {
419
760
  TERMINAL_COMMANDS,
420
761
  BUILTIN_FLOW_COMMANDS,
@@ -425,4 +766,5 @@ module.exports = {
425
766
  templateTerminalCommands,
426
767
  templateBodyScope,
427
768
  expandedArtifactsForCommand,
769
+ deterministicChecks,
428
770
  };