@farmslot/recipe-cli 0.22.4 → 0.23.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.
- package/CHANGELOG.md +13 -0
- package/dist/harness/acceptance-ledger.d.ts +1 -0
- package/dist/harness/acceptance-ledger.d.ts.map +1 -1
- package/dist/harness/acceptance-ledger.js +2 -1
- package/dist/harness/acceptance-ledger.js.map +1 -1
- package/dist/harness/artifact-validation.d.ts +23 -0
- package/dist/harness/artifact-validation.d.ts.map +1 -0
- package/dist/harness/artifact-validation.js +134 -0
- package/dist/harness/artifact-validation.js.map +1 -0
- package/dist/harness/commands/artifacts-markdown.d.ts +28 -0
- package/dist/harness/commands/artifacts-markdown.d.ts.map +1 -1
- package/dist/harness/commands/artifacts-markdown.js +125 -1
- package/dist/harness/commands/artifacts-markdown.js.map +1 -1
- package/dist/harness/commands/doctor.js +1 -1
- package/dist/harness/commands/doctor.js.map +1 -1
- package/dist/harness/commands/logs.d.ts +6 -0
- package/dist/harness/commands/logs.d.ts.map +1 -1
- package/dist/harness/commands/logs.js +28 -14
- package/dist/harness/commands/logs.js.map +1 -1
- package/dist/harness/commands/review.d.ts +48 -0
- package/dist/harness/commands/review.d.ts.map +1 -1
- package/dist/harness/commands/review.js +70 -34
- package/dist/harness/commands/review.js.map +1 -1
- package/dist/harness/commands/run.d.ts.map +1 -1
- package/dist/harness/commands/run.js +5 -0
- package/dist/harness/commands/run.js.map +1 -1
- package/dist/harness/commands/status.d.ts.map +1 -1
- package/dist/harness/commands/status.js +16 -15
- package/dist/harness/commands/status.js.map +1 -1
- package/dist/harness/index.d.ts +3 -2
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +2 -1
- package/dist/harness/index.js.map +1 -1
- package/dist/harness/parse-args.d.ts +9 -0
- package/dist/harness/parse-args.d.ts.map +1 -1
- package/dist/harness/parse-args.js +22 -20
- package/dist/harness/parse-args.js.map +1 -1
- package/dist/harness/readiness.d.ts +1 -0
- package/dist/harness/readiness.d.ts.map +1 -1
- package/dist/harness/readiness.js.map +1 -1
- package/dist/harness/repair-scope.d.ts +12 -0
- package/dist/harness/repair-scope.d.ts.map +1 -0
- package/dist/harness/repair-scope.js +41 -0
- package/dist/harness/repair-scope.js.map +1 -0
- package/dist/harness/run-engine.d.ts +2 -0
- package/dist/harness/run-engine.d.ts.map +1 -1
- package/dist/harness/run-engine.js +1 -0
- package/dist/harness/run-engine.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,19 @@ All notable changes to `@farmslot/recipe-cli` are tracked here.
|
|
|
6
6
|
|
|
7
7
|
- Active-development baseline; add user-facing changes here before release or package publication.
|
|
8
8
|
|
|
9
|
+
## 0.23.0 - 2026-10-17
|
|
10
|
+
|
|
11
|
+
- Pass the task's active repair scope to the engine only for its separate repair recipe; the main task recipe ignores it.
|
|
12
|
+
- Export `renderRetainedArtifactsMarkdown` and `validateRecipeArtifactDirectory` from `./harness` so other host CLIs render and validate retained task Markdown with the root CLI's selection and refusals.
|
|
13
|
+
- Add `ReviewCommandOptions` hooks (`libraries`, `resolveLibrary`, `defaultDomain`, `domainCommand`, `usage`, `runtime`, `header`, `verdictRule`) and export `ReviewLibrary`, so host CLIs built with `createHarnessCli` route review and domain to the shared handler. A project binding ignores the hooks.
|
|
14
|
+
- Review resolves the domain before the runtime, prints one "Domain patterns" heading, names the domain source on stderr in human mode, words setup step 2 through the domain command, and refuses an owned-paths file with an empty domain.
|
|
15
|
+
- Add `LogsCommandOptions.announce`, called before a live follow outside `--json`. Logs now report an undetected or unknown adapter and a non-numeric `--events` through the usage envelope, check `--events` before the log file, and word the invalid-source, missing-file, headless and missing-console refusals generically.
|
|
16
|
+
- Doctor prints a failing recorder's detail on stderr; `ReadinessViewOptions.journal: false` leaves the command journal out of status.
|
|
17
|
+
|
|
18
|
+
## 0.22.5 - 2026-10-16
|
|
19
|
+
|
|
20
|
+
- Align the worker dependency set with parent acceptance inheritance and Protocol 0.53.0.
|
|
21
|
+
|
|
9
22
|
## 0.22.4 - 2026-10-16
|
|
10
23
|
|
|
11
24
|
- Align the worker dependency set with Protocol 0.52.0 and default pipeline visual review.
|
|
@@ -12,5 +12,6 @@ export declare function recordRecipeAcceptance(taskDir: string, _target: string,
|
|
|
12
12
|
tracePath: string;
|
|
13
13
|
recipePath: string;
|
|
14
14
|
claimsPath?: string;
|
|
15
|
+
selectedClaims?: RecipeClaimEvidence[];
|
|
15
16
|
}): RecipeAcceptanceRecord;
|
|
16
17
|
//# sourceMappingURL=acceptance-ledger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance-ledger.d.ts","sourceRoot":"","sources":["../../src/harness/acceptance-ledger.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EAEzB,MAAM,oBAAoB,CAAC;AAY5B,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxE;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,MAAM,GAAG,IAAI,CAgB/E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,sBAAsB,EAAE,GAAG,SAAS,CAI9F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"acceptance-ledger.d.ts","sourceRoot":"","sources":["../../src/harness/acceptance-ledger.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EAEzB,MAAM,oBAAoB,CAAC;AAY5B,MAAM,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAC1D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxE;AAED,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,UAAQ,GAAG,MAAM,GAAG,IAAI,CAgB/E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,sBAAsB,EAAE,GAAG,SAAS,CAI9F;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;IACN,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACxC,GACA,sBAAsB,CAgBxB"}
|
|
@@ -40,7 +40,8 @@ export function recordRecipeAcceptance(taskDir, _target, result) {
|
|
|
40
40
|
const claims = JSON.parse(fs.readFileSync(result.claimsPath, 'utf8'));
|
|
41
41
|
const root = path.dirname(result.claimsPath);
|
|
42
42
|
const realTask = fs.realpathSync(taskDir);
|
|
43
|
-
|
|
43
|
+
// A repair transports the engine selection; retained rows keep their original verdicts.
|
|
44
|
+
const criteria = (result.selectedClaims ?? claims.criteria).map((claim) => ({
|
|
44
45
|
...claim,
|
|
45
46
|
evidence: [
|
|
46
47
|
...new Set([result.tracePath, ...claim.evidence.map((file) => path.resolve(root, file))]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance-ledger.js","sourceRoot":"","sources":["../../src/harness/acceptance-ledger.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,GAIvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMpD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,MAAM,GACV,OAAO,CAAC,uDAAuD,CAA2B,CAAC;AAQ7F,MAAM,UAAU,0BAA0B,CAAC,MAAc;IACvD,MAAM,EAAE,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,OAAO,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,aAAa,GAAG,KAAK;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAChF,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,2EAA2E;IAC3E,MAAM,YAAY,GAChB,OAAO,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5C,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,IAAI,MAAM,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC;IACb,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;IACjE,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,aAAa;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,sDAAsD,UAAU,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAmB;IACtD,OAAO,IAAI;QACT,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,OAAe,EACf,OAAe,EACf,
|
|
1
|
+
{"version":3,"file":"acceptance-ledger.js","sourceRoot":"","sources":["../../src/harness/acceptance-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type RecipeConformanceLiveEvidence, type RecipeValidationResult } from '@farmslot/protocol';
|
|
2
|
+
import { type RecordedEvidencePackageReadResult } from '@farmslot/recipe-runner';
|
|
3
|
+
export interface RecipeArtifactsValidateOptions {
|
|
4
|
+
recipe?: string;
|
|
5
|
+
requireRunnerProvenance?: boolean;
|
|
6
|
+
liveProof?: Pick<RecipeConformanceLiveEvidence, 'smokeTarget' | 'teardownTarget' | 'captureRequired' | 'hudRequired'>;
|
|
7
|
+
}
|
|
8
|
+
export interface ArtifactValidationCheck {
|
|
9
|
+
id: string;
|
|
10
|
+
status: 'pass' | 'fail';
|
|
11
|
+
message: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ArtifactValidationResult {
|
|
14
|
+
status: 'pass' | 'fail';
|
|
15
|
+
artifactDir: string;
|
|
16
|
+
checks: ArtifactValidationCheck[];
|
|
17
|
+
recipe: RecipeValidationResult;
|
|
18
|
+
liveEvidence?: RecipeConformanceLiveEvidence;
|
|
19
|
+
warnings?: string[];
|
|
20
|
+
}
|
|
21
|
+
export declare function validateRecipeArtifactDirectory(artifactDirInput: string, opts: RecipeArtifactsValidateOptions): Promise<ArtifactValidationResult>;
|
|
22
|
+
export declare function validateRecipeArtifactRead(artifactDir: string, opts: RecipeArtifactsValidateOptions, loaded: RecordedEvidencePackageReadResult): Promise<ArtifactValidationResult>;
|
|
23
|
+
//# sourceMappingURL=artifact-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-validation.d.ts","sourceRoot":"","sources":["../../src/harness/artifact-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,6BAA6B,EAClC,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,iCAAiC,EAEvC,MAAM,yBAAyB,CAAC;AAMjC,MAAM,WAAW,8BAA8B;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,EAAE,IAAI,CACd,6BAA6B,EAC7B,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,aAAa,CACrE,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,YAAY,CAAC,EAAE,6BAA6B,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AA2DD,wBAAsB,+BAA+B,CACnD,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,8BAA8B,GACnC,OAAO,CAAC,wBAAwB,CAAC,CAOnC;AAED,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,8BAA8B,EACpC,MAAM,EAAE,iCAAiC,GACxC,OAAO,CAAC,wBAAwB,CAAC,CA6InC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { digestRecipeDocument, isRecord, } from '@farmslot/protocol';
|
|
2
|
+
import { readRecordedEvidencePackage, validateRecordedEvidencePackage, } from '@farmslot/recipe-runner';
|
|
3
|
+
import { readRecipeCliJsonFile, resolveRecipeCliPath } from '@farmslot/recipe-runner/cli/support';
|
|
4
|
+
import { runnerRevision } from './artifact-files.js';
|
|
5
|
+
import { validateRuntimeProof } from './runtime-proof.js';
|
|
6
|
+
const TERMINAL_RECIPE_STATUSES = new Set(['pass', 'fail', 'unknown']);
|
|
7
|
+
function addArtifactCheck(checks, id, status, message) {
|
|
8
|
+
checks.push({ id, status, message });
|
|
9
|
+
}
|
|
10
|
+
function hasSummaryRunnerProvenance(summary) {
|
|
11
|
+
return readRunnerProvenance(summary, 'runner') !== null;
|
|
12
|
+
}
|
|
13
|
+
function hasTraceRunnerProvenance(trace) {
|
|
14
|
+
return isRecord(trace) && readRunnerProvenance(trace.metadata, 'runner') !== null;
|
|
15
|
+
}
|
|
16
|
+
function hasManifestRunnerProvenance(manifest) {
|
|
17
|
+
return isRecord(manifest) && readRunnerProvenance(manifest.provenance, 'runner') !== null;
|
|
18
|
+
}
|
|
19
|
+
function readRunnerProvenance(parent, field) {
|
|
20
|
+
if (!isRecord(parent))
|
|
21
|
+
return null;
|
|
22
|
+
const runner = parent[field];
|
|
23
|
+
if (!isRecord(runner))
|
|
24
|
+
return null;
|
|
25
|
+
const source = runner.source;
|
|
26
|
+
const ref = runnerRevision(runner);
|
|
27
|
+
if (typeof source !== 'string' || source.trim() === '')
|
|
28
|
+
return null;
|
|
29
|
+
if (typeof ref !== 'string' || ref.trim() === '')
|
|
30
|
+
return null;
|
|
31
|
+
return runner;
|
|
32
|
+
}
|
|
33
|
+
function canonicalRunnerIdentity(runner) {
|
|
34
|
+
const source = runner.source;
|
|
35
|
+
const ref = runnerRevision(runner);
|
|
36
|
+
if (typeof source !== 'string' || source.trim() === '')
|
|
37
|
+
return null;
|
|
38
|
+
if (typeof ref !== 'string' || ref.trim() === '')
|
|
39
|
+
return null;
|
|
40
|
+
return JSON.stringify({ source: source.trim(), ref: ref.trim() });
|
|
41
|
+
}
|
|
42
|
+
function runnerProvenanceMatches(summary, trace, manifest) {
|
|
43
|
+
const summaryRunner = readRunnerProvenance(summary, 'runner');
|
|
44
|
+
const traceRunner = isRecord(trace) ? readRunnerProvenance(trace.metadata, 'runner') : null;
|
|
45
|
+
const manifestRunner = isRecord(manifest)
|
|
46
|
+
? readRunnerProvenance(manifest.provenance, 'runner')
|
|
47
|
+
: null;
|
|
48
|
+
if (!summaryRunner || !traceRunner || !manifestRunner)
|
|
49
|
+
return false;
|
|
50
|
+
const canonical = canonicalRunnerIdentity(summaryRunner);
|
|
51
|
+
return (canonical !== null &&
|
|
52
|
+
canonicalRunnerIdentity(traceRunner) === canonical &&
|
|
53
|
+
canonicalRunnerIdentity(manifestRunner) === canonical);
|
|
54
|
+
}
|
|
55
|
+
export async function validateRecipeArtifactDirectory(artifactDirInput, opts) {
|
|
56
|
+
const artifactDir = resolveRecipeCliPath(artifactDirInput);
|
|
57
|
+
return validateRecipeArtifactRead(artifactDir, opts, await readRecordedEvidencePackage(artifactDir));
|
|
58
|
+
}
|
|
59
|
+
export async function validateRecipeArtifactRead(artifactDir, opts, loaded) {
|
|
60
|
+
const checks = loaded.checks;
|
|
61
|
+
const retained = loaded.input;
|
|
62
|
+
const { summary, trace, manifest, artifactDigests } = retained;
|
|
63
|
+
const artifactPaths = retained.artifactPaths ?? [];
|
|
64
|
+
// --recipe cross-checks the retained root; it cannot replace a recorded package's root.
|
|
65
|
+
const recipe = opts.recipe ? await readRecipeCliJsonFile(opts.recipe) : retained.recipe;
|
|
66
|
+
const bundle = { ...retained, recipe };
|
|
67
|
+
if (opts.recipe && retained.recipe !== undefined) {
|
|
68
|
+
addArtifactCheck(checks, 'recipe.matches_retained', digestRecipeDocument(recipe) === digestRecipeDocument(retained.recipe) ? 'pass' : 'fail', 'The supplied recipe must match the retained root recipe.');
|
|
69
|
+
}
|
|
70
|
+
const recorded = (isRecord(summary) && typeof summary.recipeRunId === 'string') ||
|
|
71
|
+
artifactPaths.includes('acceptance-status.json');
|
|
72
|
+
const recipeValidation = validateRecordedEvidencePackage({
|
|
73
|
+
...bundle,
|
|
74
|
+
recipe: recorded ? retained.recipe : recipe,
|
|
75
|
+
});
|
|
76
|
+
let captures = [];
|
|
77
|
+
const warnings = [];
|
|
78
|
+
if (opts.liveProof) {
|
|
79
|
+
try {
|
|
80
|
+
captures = validateRuntimeProof(bundle, opts.liveProof.smokeTarget, opts.liveProof.teardownTarget, { ...opts.liveProof, hudRequired: false });
|
|
81
|
+
addArtifactCheck(checks, 'runtime.proof', 'pass', 'Runtime effect and authored teardown assertions passed.');
|
|
82
|
+
if (opts.liveProof.hudRequired) {
|
|
83
|
+
// The same immutable bundle already passed state, capture and cleanup checks.
|
|
84
|
+
// HUD observations are advisory; their absence cannot invalidate that proof.
|
|
85
|
+
try {
|
|
86
|
+
validateRuntimeProof(bundle, opts.liveProof.smokeTarget, opts.liveProof.teardownTarget, opts.liveProof);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
warnings.push(error instanceof Error ? error.message : String(error));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
addArtifactCheck(checks, 'runtime.proof', 'fail', error instanceof Error ? error.message : String(error));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const summaryStatus = isRecord(summary) ? summary.status : undefined;
|
|
98
|
+
addArtifactCheck(checks, 'summary.status', typeof summaryStatus === 'string' && TERMINAL_RECIPE_STATUSES.has(summaryStatus)
|
|
99
|
+
? 'pass'
|
|
100
|
+
: 'fail', 'summary.json must include terminal status pass, fail, or unknown.');
|
|
101
|
+
addArtifactCheck(checks, 'trace.shape', Array.isArray(trace) || (isRecord(trace) && Array.isArray(trace.entries)) ? 'pass' : 'fail', 'trace.json must be an array or an object with entries[].');
|
|
102
|
+
const manifestStatus = isRecord(manifest) ? manifest.runStatus : undefined;
|
|
103
|
+
addArtifactCheck(checks, 'manifest.status_matches_summary', typeof summaryStatus === 'string' && manifestStatus === summaryStatus ? 'pass' : 'fail', 'artifact-manifest.json runStatus must match summary.json status.');
|
|
104
|
+
if (opts.requireRunnerProvenance) {
|
|
105
|
+
addArtifactCheck(checks, 'runner.provenance.summary', hasSummaryRunnerProvenance(summary) ? 'pass' : 'fail', 'summary.json must include runner provenance at summary.runner.');
|
|
106
|
+
addArtifactCheck(checks, 'runner.provenance.trace', hasTraceRunnerProvenance(trace) ? 'pass' : 'fail', 'trace.json must include runner provenance at trace.metadata.runner.');
|
|
107
|
+
addArtifactCheck(checks, 'runner.provenance.manifest', hasManifestRunnerProvenance(manifest) ? 'pass' : 'fail', 'artifact-manifest.json must include runner provenance at provenance.runner.');
|
|
108
|
+
addArtifactCheck(checks, 'runner.provenance.matches', runnerProvenanceMatches(summary, trace, manifest) ? 'pass' : 'fail', 'Runner provenance must identify the same source/ref in summary, trace metadata, and artifact manifest.');
|
|
109
|
+
}
|
|
110
|
+
const status = checks.some((check) => check.status === 'fail') || recipeValidation.status === 'invalid'
|
|
111
|
+
? 'fail'
|
|
112
|
+
: 'pass';
|
|
113
|
+
const liveEvidence = status === 'pass' && opts.liveProof
|
|
114
|
+
? {
|
|
115
|
+
...opts.liveProof,
|
|
116
|
+
hudRequired: false,
|
|
117
|
+
...(opts.liveProof.captureRequired || opts.liveProof.hudRequired ? { captures } : {}),
|
|
118
|
+
artifactDir,
|
|
119
|
+
artifacts: await Promise.all([...artifactPaths].sort().map(async (file) => ({
|
|
120
|
+
path: file,
|
|
121
|
+
digest: artifactDigests[file],
|
|
122
|
+
}))),
|
|
123
|
+
}
|
|
124
|
+
: undefined;
|
|
125
|
+
return {
|
|
126
|
+
status,
|
|
127
|
+
artifactDir,
|
|
128
|
+
checks,
|
|
129
|
+
recipe: recipeValidation,
|
|
130
|
+
...(liveEvidence ? { liveEvidence } : {}),
|
|
131
|
+
...(warnings.length ? { warnings } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=artifact-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-validation.js","sourceRoot":"","sources":["../../src/harness/artifact-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ArtifactValidationResult } from '../artifact-validation.js';
|
|
1
2
|
export interface TaskArtifactsMarkdownInput {
|
|
2
3
|
taskDir: string;
|
|
3
4
|
/** Exact package already selected by the caller; never reselect an attempt here. */
|
|
@@ -18,7 +19,34 @@ export interface TaskArtifactsMarkdownResult {
|
|
|
18
19
|
run: MarkdownArtifact | null;
|
|
19
20
|
workflow: MarkdownArtifact | null;
|
|
20
21
|
}
|
|
22
|
+
export interface RetainedArtifactsMarkdownInput {
|
|
23
|
+
/** Task or artifact package directory; without one, `candidates` are searched. */
|
|
24
|
+
directory?: string;
|
|
25
|
+
/** Evidence paths searched for a package when no directory is given. */
|
|
26
|
+
candidates?: readonly string[];
|
|
27
|
+
command?: string;
|
|
28
|
+
/** Refuses to overwrite authored inputs or retained evidence. */
|
|
29
|
+
out?: string;
|
|
30
|
+
validate?: boolean;
|
|
31
|
+
/** `text` selects and validates the package without rendering authored task Markdown. */
|
|
32
|
+
format?: 'markdown' | 'text';
|
|
33
|
+
}
|
|
34
|
+
export interface RetainedArtifactsMarkdownResult extends Partial<TaskArtifactsMarkdownResult> {
|
|
35
|
+
artifactDir?: string;
|
|
36
|
+
summary?: unknown;
|
|
37
|
+
manifest?: unknown;
|
|
38
|
+
validation?: ArtifactValidationResult;
|
|
39
|
+
out?: string;
|
|
40
|
+
}
|
|
21
41
|
/** Render authored PR prose and existing evidence without executing or publishing it. */
|
|
22
42
|
export declare function renderTaskArtifactsMarkdown(input: TaskArtifactsMarkdownInput): Promise<TaskArtifactsMarkdownResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Select, validate and render a task's or artifact package's Markdown, writing it only to a
|
|
45
|
+
* safe `out`. `result` is the `recipe artifacts --json` document; `body` is the Markdown.
|
|
46
|
+
*/
|
|
47
|
+
export declare function renderRetainedArtifactsMarkdown(input: RetainedArtifactsMarkdownInput): Promise<{
|
|
48
|
+
result: RetainedArtifactsMarkdownResult;
|
|
49
|
+
body: string;
|
|
50
|
+
}>;
|
|
23
51
|
export {};
|
|
24
52
|
//# sourceMappingURL=artifacts-markdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts-markdown.d.ts","sourceRoot":"","sources":["../../../src/harness/commands/artifacts-markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"artifacts-markdown.d.ts","sourceRoot":"","sources":["../../../src/harness/commands/artifacts-markdown.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,2BAA2B,CAAC;AAInC,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,sBAAuB,SAAQ,gBAAgB;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,8BAA8B;IAC7C,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yFAAyF;IACzF,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,+BAAgC,SAAQ,OAAO,CAAC,2BAA2B,CAAC;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA6CD,yFAAyF;AACzF,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,2BAA2B,CAAC,CA8ItC;AAkED;;;GAGG;AACH,wBAAsB,+BAA+B,CACnD,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC;IAAE,MAAM,EAAE,+BAA+B,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAiFpE"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import { existsSync, statSync } from 'node:fs';
|
|
1
2
|
import path from 'node:path';
|
|
3
|
+
import { readRecipeAttemptSelection } from '@farmslot/agent-runtime/scripts/retained-recipe-attempt.cjs';
|
|
2
4
|
import { isRecord } from '@farmslot/protocol';
|
|
3
|
-
import {
|
|
5
|
+
import { readRecordedEvidencePackage } from '@farmslot/recipe-runner';
|
|
6
|
+
import { readRecipeCliJsonFileWithinRoot } from '@farmslot/recipe-runner/cli/support';
|
|
7
|
+
import { readContainedJsonArtifact, readContainedTextArtifact, runnerRevision, writeContainedArtifact, } from '../artifact-files.js';
|
|
8
|
+
import { validateRecipeArtifactRead, } from '../artifact-validation.js';
|
|
9
|
+
import { isPathWithin } from '../paths.js';
|
|
4
10
|
import { countRecipeNodes } from '../run-engine.js';
|
|
5
11
|
const RECIPE_HEADING = '## **Validation Recipe**';
|
|
6
12
|
const LOGS_HEADING = '## **Validation Logs**';
|
|
@@ -171,4 +177,122 @@ export async function renderTaskArtifactsMarkdown(input) {
|
|
|
171
177
|
workflow: workflow === undefined ? null : { path: 'artifacts/workflow.mmd' },
|
|
172
178
|
};
|
|
173
179
|
}
|
|
180
|
+
function artifactManifestPaths(manifest) {
|
|
181
|
+
const entries = isRecord(manifest) && Array.isArray(manifest.artifacts) ? manifest.artifacts : [];
|
|
182
|
+
return entries.flatMap((entry) => isRecord(entry) && typeof entry.path === 'string' ? [entry.path] : []);
|
|
183
|
+
}
|
|
184
|
+
function evidenceMarkdown(artifactDir, summary, artifactPaths) {
|
|
185
|
+
const literal = (value) => `<code>${escapeHtml(value)}</code>`;
|
|
186
|
+
return [
|
|
187
|
+
`Recipe evidence: ${literal(artifactDir)}`,
|
|
188
|
+
'',
|
|
189
|
+
`Result: ${literal(isRecord(summary) ? String(summary.status) : 'unknown')}`,
|
|
190
|
+
'',
|
|
191
|
+
...artifactPaths.map((file) => `- ${literal(file)}`),
|
|
192
|
+
'',
|
|
193
|
+
].join('\n');
|
|
194
|
+
}
|
|
195
|
+
async function writeArtifactsMarkdown(out, body, taskDir, artifactDir, artifactPaths) {
|
|
196
|
+
let parent = path.dirname(out);
|
|
197
|
+
while (!existsSync(parent))
|
|
198
|
+
parent = path.dirname(parent);
|
|
199
|
+
const destination = existsSync(out) ? statSync(out, { bigint: true }) : undefined;
|
|
200
|
+
const protectedPaths = [
|
|
201
|
+
...(artifactDir
|
|
202
|
+
? [...artifactPaths, 'report.md'].map((file) => path.resolve(artifactDir, file))
|
|
203
|
+
: []),
|
|
204
|
+
...(taskDir
|
|
205
|
+
? [
|
|
206
|
+
'recipe-runs',
|
|
207
|
+
'recipe-run',
|
|
208
|
+
'recipe',
|
|
209
|
+
'recipe.json',
|
|
210
|
+
'workflow.mmd',
|
|
211
|
+
'pr-description.md',
|
|
212
|
+
'latest-valid-recipe-run.json',
|
|
213
|
+
].map((file) => path.join(taskDir, 'artifacts', file))
|
|
214
|
+
: []),
|
|
215
|
+
];
|
|
216
|
+
if (protectedPaths.some((file) => {
|
|
217
|
+
const input = destination && existsSync(file) ? statSync(file, { bigint: true }) : undefined;
|
|
218
|
+
return (out === path.resolve(file) ||
|
|
219
|
+
(input && destination && input.dev === destination.dev && input.ino === destination.ino) ||
|
|
220
|
+
isPathWithin(file, parent) ||
|
|
221
|
+
isPathWithin(file, out));
|
|
222
|
+
}))
|
|
223
|
+
throw new Error('--out must not overwrite authored inputs or retained recipe evidence.');
|
|
224
|
+
await writeContainedArtifact(path.dirname(out), path.basename(out), body, 'Markdown output');
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Select, validate and render a task's or artifact package's Markdown, writing it only to a
|
|
228
|
+
* safe `out`. `result` is the `recipe artifacts --json` document; `body` is the Markdown.
|
|
229
|
+
*/
|
|
230
|
+
export async function renderRetainedArtifactsMarkdown(input) {
|
|
231
|
+
const taskDir = input.directory ? path.resolve(input.directory) : undefined;
|
|
232
|
+
const selection = taskDir && !existsSync(path.join(taskDir, 'artifact-manifest.json'))
|
|
233
|
+
? readRecipeAttemptSelection(taskDir)
|
|
234
|
+
: null;
|
|
235
|
+
const selectedDir = taskDir && selection
|
|
236
|
+
? path.join(taskDir, 'artifacts', selection.relativeArtifactRoot)
|
|
237
|
+
: undefined;
|
|
238
|
+
if (taskDir && selectedDir && !isPathWithin(path.join(taskDir, 'artifacts'), selectedDir))
|
|
239
|
+
throw new Error('Selected recipe attempt is missing or resolves outside its root.');
|
|
240
|
+
const candidates = taskDir ? [taskDir] : (input.candidates ?? []);
|
|
241
|
+
const packages = selectedDir
|
|
242
|
+
? [selectedDir]
|
|
243
|
+
: candidates
|
|
244
|
+
.flatMap((candidate) => [
|
|
245
|
+
candidate,
|
|
246
|
+
path.join(candidate, 'artifacts'),
|
|
247
|
+
path.join(candidate, 'artifacts/recipe'),
|
|
248
|
+
])
|
|
249
|
+
.filter((candidate) => existsSync(path.join(candidate, 'artifact-manifest.json')));
|
|
250
|
+
const distinct = [...new Set(packages)];
|
|
251
|
+
const authoredTask = taskDir &&
|
|
252
|
+
input.format !== 'text' &&
|
|
253
|
+
!existsSync(path.join(taskDir, 'artifact-manifest.json')) &&
|
|
254
|
+
existsSync(path.join(taskDir, 'artifacts'));
|
|
255
|
+
if (distinct.length > 1 || (distinct.length === 0 && (!authoredTask || input.validate)))
|
|
256
|
+
throw new Error(distinct.length
|
|
257
|
+
? `More than one artifact package matches; select a directory: ${distinct.join(', ')}`
|
|
258
|
+
: 'No retained artifact package found; pass its directory explicitly.');
|
|
259
|
+
const artifactDir = distinct[0];
|
|
260
|
+
const summary = artifactDir
|
|
261
|
+
? await readRecipeCliJsonFileWithinRoot(artifactDir, 'summary.json')
|
|
262
|
+
: undefined;
|
|
263
|
+
const manifest = artifactDir
|
|
264
|
+
? await readRecipeCliJsonFileWithinRoot(artifactDir, 'artifact-manifest.json')
|
|
265
|
+
: undefined;
|
|
266
|
+
const artifactPaths = artifactManifestPaths(manifest);
|
|
267
|
+
const retained = artifactDir && (input.validate || authoredTask || input.out)
|
|
268
|
+
? await readRecordedEvidencePackage(artifactDir)
|
|
269
|
+
: undefined;
|
|
270
|
+
const checked = artifactDir && retained && (input.validate || authoredTask)
|
|
271
|
+
? await validateRecipeArtifactRead(artifactDir, { requireRunnerProvenance: true }, retained)
|
|
272
|
+
: undefined;
|
|
273
|
+
if (authoredTask && checked?.status === 'fail')
|
|
274
|
+
throw new Error('Artifact validation failed; Markdown was not rendered or written.');
|
|
275
|
+
const validation = input.validate ? checked : undefined;
|
|
276
|
+
const markdown = authoredTask
|
|
277
|
+
? await renderTaskArtifactsMarkdown({ taskDir, artifactDir, command: input.command })
|
|
278
|
+
: undefined;
|
|
279
|
+
const body = markdown?.body ?? (artifactDir ? evidenceMarkdown(artifactDir, summary, artifactPaths) : '');
|
|
280
|
+
const out = input.out ? path.resolve(input.out) : undefined;
|
|
281
|
+
if (out) {
|
|
282
|
+
if (validation?.status === 'fail' || retained?.checks.some((check) => check.status === 'fail'))
|
|
283
|
+
throw new Error('Artifact validation failed; Markdown was not written.');
|
|
284
|
+
await writeArtifactsMarkdown(out, body, authoredTask ? taskDir : undefined, artifactDir, retained?.input.artifactPaths ?? []);
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
result: {
|
|
288
|
+
artifactDir,
|
|
289
|
+
summary,
|
|
290
|
+
manifest,
|
|
291
|
+
...(validation ? { validation } : {}),
|
|
292
|
+
...(markdown ? { ...markdown, ...(out ? { body: undefined } : {}) } : {}),
|
|
293
|
+
...(out ? { out } : {}),
|
|
294
|
+
},
|
|
295
|
+
body,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
174
298
|
//# sourceMappingURL=artifacts-markdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts-markdown.js","sourceRoot":"","sources":["../../../src/harness/commands/artifacts-markdown.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"artifacts-markdown.js","sourceRoot":"","sources":["../../../src/harness/commands/artifacts-markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -484,7 +484,7 @@ function emitExpectLiveVerdict(adapter, target, runtime, verdict, recorder) {
|
|
|
484
484
|
for (const reason of runtime?.reasons ?? [])
|
|
485
485
|
console.error(` ${out('dim', reason)}`);
|
|
486
486
|
if (recorder?.status === 'fail') {
|
|
487
|
-
console.error(` ${out('err', 'recorder:')} ${recorder.message}`);
|
|
487
|
+
console.error(` ${out('err', 'recorder:')} ${recorder.message}${recorder.detail ? ` ${out('dim', recorder.detail)}` : ''}`);
|
|
488
488
|
if (recorder.userAction)
|
|
489
489
|
console.error(` Next: ${recorder.userAction}`);
|
|
490
490
|
return;
|