@wildorder/nightshift 0.12.0 → 0.14.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/README.md +46 -19
- package/dist/agent-probe.d.ts +21 -2
- package/dist/agent-probe.d.ts.map +1 -1
- package/dist/agent-probe.js +76 -22
- package/dist/agent-probe.js.map +1 -1
- package/dist/agent-runner.d.ts +90 -2
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +382 -24
- package/dist/agent-runner.js.map +1 -1
- package/dist/agent-summary.d.ts +15 -0
- package/dist/agent-summary.d.ts.map +1 -1
- package/dist/agent-summary.js +32 -2
- package/dist/agent-summary.js.map +1 -1
- package/dist/as-built.d.ts +6 -0
- package/dist/as-built.d.ts.map +1 -1
- package/dist/as-built.js +7 -0
- package/dist/as-built.js.map +1 -1
- package/dist/author.d.ts +9 -0
- package/dist/author.d.ts.map +1 -1
- package/dist/author.js +161 -24
- package/dist/author.js.map +1 -1
- package/dist/ci-init.d.ts.map +1 -1
- package/dist/ci-init.js +17 -12
- package/dist/ci-init.js.map +1 -1
- package/dist/cli.js +144 -11
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/crash-report.d.ts +58 -0
- package/dist/crash-report.d.ts.map +1 -0
- package/dist/crash-report.js +115 -0
- package/dist/crash-report.js.map +1 -0
- package/dist/decide.js +1 -1
- package/dist/decide.js.map +1 -1
- package/dist/decider-review.d.ts +33 -5
- package/dist/decider-review.d.ts.map +1 -1
- package/dist/decider-review.js +55 -9
- package/dist/decider-review.js.map +1 -1
- package/dist/decision-ledger.d.ts +54 -1
- package/dist/decision-ledger.d.ts.map +1 -1
- package/dist/decision-ledger.js +53 -1
- package/dist/decision-ledger.js.map +1 -1
- package/dist/decision-view.d.ts +10 -1
- package/dist/decision-view.d.ts.map +1 -1
- package/dist/decision-view.js +41 -0
- package/dist/decision-view.js.map +1 -1
- package/dist/exit-codes.d.ts +16 -2
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +17 -2
- package/dist/exit-codes.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +68 -14
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +301 -22
- package/dist/manifest.js.map +1 -1
- package/dist/permits.d.ts +135 -0
- package/dist/permits.d.ts.map +1 -0
- package/dist/permits.js +397 -0
- package/dist/permits.js.map +1 -0
- package/dist/preflight.d.ts +73 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +225 -0
- package/dist/preflight.js.map +1 -0
- package/dist/publish.d.ts +71 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +319 -1
- package/dist/publish.js.map +1 -1
- package/dist/run-program.d.ts +70 -2
- package/dist/run-program.d.ts.map +1 -1
- package/dist/run-program.js +677 -60
- package/dist/run-program.js.map +1 -1
- package/dist/skill-roots.d.ts +11 -3
- package/dist/skill-roots.d.ts.map +1 -1
- package/dist/skill-roots.js +59 -12
- package/dist/skill-roots.js.map +1 -1
- package/dist/whole-program-review.d.ts +4 -0
- package/dist/whole-program-review.d.ts.map +1 -1
- package/dist/whole-program-review.js +9 -1
- package/dist/whole-program-review.js.map +1 -1
- package/package.json +2 -2
- package/skills/plan-program/SKILL.md +125 -5
- package/dist/verify-allowlist.d.ts +0 -23
- package/dist/verify-allowlist.d.ts.map +0 -1
- package/dist/verify-allowlist.js +0 -46
- package/dist/verify-allowlist.js.map +0 -1
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, writeFileSync, writeSync, } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { runReportPath } from "./report-path.js";
|
|
4
|
+
const nodeFs = { existsSync, appendFileSync, writeFileSync, mkdirSync };
|
|
5
|
+
function renderDiagnosis(name, message, stack) {
|
|
6
|
+
const head = `${name}: ${message}`;
|
|
7
|
+
// error.stack usually begins with "Name: message"; prefer it when present,
|
|
8
|
+
// else fall back to head so the body is never blank even for a stackless
|
|
9
|
+
// Error.
|
|
10
|
+
const body = stack && stack.trim() !== "" ? stack : head;
|
|
11
|
+
return `nightshift: unexpected error\n${head}\n${body}`;
|
|
12
|
+
}
|
|
13
|
+
/** A crash diagnosis with name, message, AND stack for ANY throw shape (SC-10). */
|
|
14
|
+
export function formatCrashDiagnosis(error) {
|
|
15
|
+
if (error instanceof Error) {
|
|
16
|
+
return renderDiagnosis(error.name || "Error", error.message || "(no message)", error.stack);
|
|
17
|
+
}
|
|
18
|
+
// Non-Error throw: (error as Error).message would be undefined — the exact
|
|
19
|
+
// silent case. Render the value, then wrap it in a synthetic Error so the
|
|
20
|
+
// diagnosis carries a name, a message, AND a stack. SC-10 requires a stack
|
|
21
|
+
// for every listed throw shape; a bare value has none, so we synthesize one
|
|
22
|
+
// at the crash surface. The synthetic stack points at the handler, not the
|
|
23
|
+
// throw origin (a bare value has no origin frame to recover); the
|
|
24
|
+
// `NonError:` head makes that provenance explicit.
|
|
25
|
+
let rendered;
|
|
26
|
+
try {
|
|
27
|
+
rendered = typeof error === "string" ? error : JSON.stringify(error);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
rendered = Object.prototype.toString.call(error);
|
|
31
|
+
}
|
|
32
|
+
const synthetic = new Error(`Non-Error value thrown: ${rendered || "(empty)"}`);
|
|
33
|
+
synthetic.name = "NonError";
|
|
34
|
+
return renderDiagnosis(synthetic.name, synthetic.message, synthetic.stack);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Appends the diagnosis as a labelled crash section to the run report,
|
|
38
|
+
* creating a minimal report if absent. SYNCHRONOUS on purpose: this runs from
|
|
39
|
+
* an uncaughtException handler about to call process.exit(1), where an
|
|
40
|
+
* awaited async write may never flush before the process dies. Never throws
|
|
41
|
+
* — a write failure is returned for the caller to print (SC-11).
|
|
42
|
+
*/
|
|
43
|
+
export function writeCrashNote(args) {
|
|
44
|
+
const fs = args.fs ?? nodeFs;
|
|
45
|
+
const path = runReportPath(args.root, args.programId);
|
|
46
|
+
const section = `\n\n## Run crashed\n\n` +
|
|
47
|
+
`The run terminated with an unexpected error (exit 1) at ${args.now.toISOString()}.\n\n` +
|
|
48
|
+
"```\n" +
|
|
49
|
+
args.diagnosis +
|
|
50
|
+
"\n```\n";
|
|
51
|
+
try {
|
|
52
|
+
if (fs.existsSync(path)) {
|
|
53
|
+
fs.appendFileSync(path, section, "utf8");
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
fs.mkdirSync(dirname(path), { recursive: true });
|
|
57
|
+
fs.writeFileSync(path, `# Run report — ${args.programId}\n\n` +
|
|
58
|
+
"This report was created by the crash handler because the run " +
|
|
59
|
+
"terminated before its normal report was written." +
|
|
60
|
+
section, "utf8");
|
|
61
|
+
}
|
|
62
|
+
return { path, written: true };
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return { path, written: false, error: error.message };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The default stderr sink is a SYNCHRONOUS write to fd 2, not
|
|
70
|
+
* process.stderr.write(). This is load-bearing: reportCrash runs from the
|
|
71
|
+
* last-resort handler immediately before process.exit(1), and process.stderr
|
|
72
|
+
* is a non-blocking async stream when stderr is a pipe or a redirected file
|
|
73
|
+
* (which is exactly the captured incident — a merged stdout+stderr capture
|
|
74
|
+
* under npx on Windows). An async write queued behind process.exit() may
|
|
75
|
+
* never flush, which would reproduce the very silent-exit signature WS-04
|
|
76
|
+
* exists to eliminate. fs.writeSync blocks until the bytes are handed to the
|
|
77
|
+
* OS, so the diagnosis is on stderr *before* the process is allowed to die.
|
|
78
|
+
*/
|
|
79
|
+
function writeStderrSync(line) {
|
|
80
|
+
writeSync(2, `${line}\n`);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Composes the two: prints the diagnosis to a stderr sink, and — only when a
|
|
84
|
+
* run context is known — writes the crash note and names (or fails to name)
|
|
85
|
+
* the path. Injectable `out` and `fs` make every branch unit-testable without
|
|
86
|
+
* a process. Never throws.
|
|
87
|
+
*/
|
|
88
|
+
export function reportCrash(args) {
|
|
89
|
+
const out = args.out ?? writeStderrSync;
|
|
90
|
+
const diagnosis = formatCrashDiagnosis(args.error);
|
|
91
|
+
try {
|
|
92
|
+
out(diagnosis);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// stderr itself failed; nothing more we can do.
|
|
96
|
+
}
|
|
97
|
+
if (!args.runContext)
|
|
98
|
+
return;
|
|
99
|
+
const note = writeCrashNote({
|
|
100
|
+
root: args.runContext.root,
|
|
101
|
+
programId: args.runContext.programId,
|
|
102
|
+
diagnosis,
|
|
103
|
+
now: args.now,
|
|
104
|
+
...(args.fs ? { fs: args.fs } : {}),
|
|
105
|
+
});
|
|
106
|
+
try {
|
|
107
|
+
out(note.written
|
|
108
|
+
? `crash note written to ${note.path}`
|
|
109
|
+
: `could not write crash note to ${note.path}: ${note.error}`);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// best effort
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=crash-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crash-report.js","sourceRoot":"","sources":["../src/crash-report.ts"],"names":[],"mappings":"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"}
|
package/dist/decide.js
CHANGED
|
@@ -176,7 +176,7 @@ export async function decide(options) {
|
|
|
176
176
|
workstream.status = "not_started";
|
|
177
177
|
delete workstream.commit;
|
|
178
178
|
}
|
|
179
|
-
await saveManifest(root, options.programId, manifest);
|
|
179
|
+
await saveManifest(root, options.programId, manifest, { log });
|
|
180
180
|
const replayCommit = await git.commitPaths(root, `nightshift(${options.programId}): replay decision ${record.id}`, ["docs/programs"]);
|
|
181
181
|
const nextCommand = `npx --yes @wildorder/nightshift run ${options.programId}`;
|
|
182
182
|
return {
|
package/dist/decide.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
|
package/dist/decider-review.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { type AgentRunner } from "./agent-runner.js";
|
|
1
|
+
import { type AgentRunner, type AgentTranscript, type TranscriptSink } from "./agent-runner.js";
|
|
2
2
|
import type { AgentConfig } from "./config.js";
|
|
3
|
+
import { type PermitsContext } from "./permits.js";
|
|
3
4
|
import { type DecisionBlock, type DecisionOption } from "./decision.js";
|
|
4
5
|
import { type LedgerEvent } from "./decision-ledger.js";
|
|
5
6
|
import type { ProgramManifest } from "./manifest.js";
|
|
@@ -13,6 +14,9 @@ export interface ReviewDecisionsOptions {
|
|
|
13
14
|
baseCommit: string | undefined;
|
|
14
15
|
decider: AgentConfig | undefined;
|
|
15
16
|
agentRunner: AgentRunner;
|
|
17
|
+
/** Defaults to a no-op context; the caller (`runProgram`/`authorProgram`)
|
|
18
|
+
* threads the run's real `PermitsContext` through. */
|
|
19
|
+
permits?: PermitsContext;
|
|
16
20
|
git: GitOps;
|
|
17
21
|
isRepository: boolean;
|
|
18
22
|
/**
|
|
@@ -36,8 +40,23 @@ export interface ReviewDecisionsOptions {
|
|
|
36
40
|
triaged: Set<string>;
|
|
37
41
|
now: () => Date;
|
|
38
42
|
log: (line: string) => void;
|
|
43
|
+
/** Captures the decider's transcript to build-logs (WS-02); the decider's
|
|
44
|
+
* read-only spawns run only the verify commands, so this is for the log
|
|
45
|
+
* only and is never rolled into a `WorkstreamResult`'s report subsection. */
|
|
46
|
+
observe?: TranscriptSink;
|
|
47
|
+
/** Called with each successful invocation's transcript, when one was
|
|
48
|
+
* observed (WS-03) — the caller journals `permission-denied` events from
|
|
49
|
+
* it; this module has no ledger workstream/attempt context of its own.
|
|
50
|
+
* Awaited before the next decision's spawn starts. */
|
|
51
|
+
onTranscript?: (transcript: AgentTranscript) => void | Promise<void>;
|
|
39
52
|
}
|
|
40
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Reviews every decision, fail-open throughout. Returns the spawn-error text
|
|
55
|
+
* for any decision the decider could not even be spawned for — distinct from
|
|
56
|
+
* an ordinary no-verdict fail-open, which is only logged — so the caller can
|
|
57
|
+
* record it durably in the owning `WorkstreamResult.stageErrors` (SC-12).
|
|
58
|
+
*/
|
|
59
|
+
export declare function reviewDecisions(options: ReviewDecisionsOptions): Promise<string[]>;
|
|
41
60
|
export type FindingRecordedEvent = Extract<LedgerEvent, {
|
|
42
61
|
kind: "finding-recorded";
|
|
43
62
|
}>;
|
|
@@ -69,6 +88,8 @@ export interface TriageFindingsOptions {
|
|
|
69
88
|
baseCommit: string | undefined;
|
|
70
89
|
decider: AgentConfig | undefined;
|
|
71
90
|
agentRunner: AgentRunner;
|
|
91
|
+
/** Shared with `reviewDecisions` — see that option's doc comment. */
|
|
92
|
+
permits?: PermitsContext;
|
|
72
93
|
git: GitOps;
|
|
73
94
|
isRepository: boolean;
|
|
74
95
|
/** Shared with `reviewDecisions` — see that option's doc comment. */
|
|
@@ -77,12 +98,19 @@ export interface TriageFindingsOptions {
|
|
|
77
98
|
triaged: Set<string>;
|
|
78
99
|
now: () => Date;
|
|
79
100
|
log: (line: string) => void;
|
|
101
|
+
/** Shared with `reviewDecisions` — see that option's doc comment. */
|
|
102
|
+
observe?: TranscriptSink;
|
|
103
|
+
/** Shared with `reviewDecisions` — see that option's doc comment. */
|
|
104
|
+
onTranscript?: (transcript: AgentTranscript) => void;
|
|
80
105
|
}
|
|
81
106
|
/**
|
|
82
107
|
* Triages each routed finding with the charter's three dispositions. This
|
|
83
108
|
* only records a `fix-now` triage — WS-06 acts on it. Fails open throughout:
|
|
84
|
-
* no decider, a non-zero exit, an unparseable verdict,
|
|
85
|
-
*
|
|
109
|
+
* no decider, a non-zero exit, an unparseable verdict, a hollow escalation,
|
|
110
|
+
* or a spawn error leaves the finding `open` and never blocks the run.
|
|
111
|
+
* Returns the spawn-error text for any finding the decider could not even be
|
|
112
|
+
* spawned for, so the caller can record it durably in the owning
|
|
113
|
+
* `WorkstreamResult.stageErrors` (SC-12).
|
|
86
114
|
*/
|
|
87
|
-
export declare function triageFindings(options: TriageFindingsOptions): Promise<
|
|
115
|
+
export declare function triageFindings(options: TriageFindingsOptions): Promise<string[]>;
|
|
88
116
|
//# sourceMappingURL=decider-review.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decider-review.d.ts","sourceRoot":"","sources":["../src/decider-review.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"decider-review.d.ts","sourceRoot":"","sources":["../src/decider-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EAEpB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AA4F/C,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB;2DACuD;IACvD,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB;;;;;;;;OAQG;IACH,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B;;kFAE8E;IAC9E,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;;;2DAGuD;IACvD,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC,CA0EnB;AAMD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAkHtF,MAAM,MAAM,aAAa,GACrB;IAAE,WAAW,EAAE,SAAS,GAAG,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxD;IACE,WAAW,EAAE,UAAU,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,cAAc,EAAE,CAAC;CAChC,CAAC;AAEN;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAyC9E;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,iGAAiG;IACjG,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,oEAAoE;IACpE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,qEAAqE;IACrE,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,qEAAqE;IACrE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,qEAAqE;IACrE,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;CACtD;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA6EtF"}
|
package/dist/decider-review.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { invokeAgent } from "./agent-runner.js";
|
|
1
|
+
import { invokeAgent, } from "./agent-runner.js";
|
|
2
|
+
import { NOOP_PERMITS_CONTEXT } from "./permits.js";
|
|
2
3
|
import { decisionFingerprint } from "./decision.js";
|
|
3
4
|
import { appendLedgerEvents } from "./decision-ledger.js";
|
|
4
5
|
/**
|
|
@@ -75,20 +76,47 @@ function extractVerdict(output) {
|
|
|
75
76
|
}
|
|
76
77
|
return undefined;
|
|
77
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Reviews every decision, fail-open throughout. Returns the spawn-error text
|
|
81
|
+
* for any decision the decider could not even be spawned for — distinct from
|
|
82
|
+
* an ordinary no-verdict fail-open, which is only logged — so the caller can
|
|
83
|
+
* record it durably in the owning `WorkstreamResult.stageErrors` (SC-12).
|
|
84
|
+
*/
|
|
78
85
|
export async function reviewDecisions(options) {
|
|
79
|
-
const { root, programId, manifest, workstreamId, decisions, baseCommit, decider, agentRunner, git, isRepository, reviewed, triaged, now, log, } = options;
|
|
86
|
+
const { root, programId, manifest, workstreamId, decisions, baseCommit, decider, agentRunner, permits = NOOP_PERMITS_CONTEXT, git, isRepository, reviewed, triaged, now, log, observe, onTranscript, } = options;
|
|
80
87
|
if (!decider || decisions.length === 0)
|
|
81
|
-
return;
|
|
88
|
+
return [];
|
|
82
89
|
const diff = isRepository && baseCommit !== undefined
|
|
83
90
|
? await git.diffSince(root, baseCommit)
|
|
84
91
|
: "";
|
|
92
|
+
const spawnErrors = [];
|
|
85
93
|
for (const decision of decisions) {
|
|
86
94
|
const id = decisionFingerprint(workstreamId, decision);
|
|
87
95
|
if (reviewed.has(id))
|
|
88
96
|
continue;
|
|
89
97
|
reviewed.add(id);
|
|
90
98
|
const brief = deciderBrief(manifest, { workstream: workstreamId, decision }, diff);
|
|
91
|
-
|
|
99
|
+
let invocation;
|
|
100
|
+
try {
|
|
101
|
+
invocation = await invokeAgent(agentRunner, decider, brief, root, permits, "deciderAgent", observe);
|
|
102
|
+
if (invocation.transcript)
|
|
103
|
+
await onTranscript?.(invocation.transcript);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
const message = `the decider could not be spawned while reviewing decision ${id} ` +
|
|
107
|
+
`(${workstreamId}): ${error.message}; left unratified`;
|
|
108
|
+
spawnErrors.push(message);
|
|
109
|
+
log(`${workstreamId} decision ${id}: ${message}`);
|
|
110
|
+
const skipEvent = {
|
|
111
|
+
kind: "decision-review-skipped",
|
|
112
|
+
at: now().toISOString(),
|
|
113
|
+
id,
|
|
114
|
+
reason: "ratification did not run: the decider could not be spawned " +
|
|
115
|
+
`(${error.message})`,
|
|
116
|
+
};
|
|
117
|
+
await appendLedgerEvents(root, programId, [skipEvent]);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
92
120
|
const verdict = extractVerdict(invocation.output);
|
|
93
121
|
if (invocation.exitCode !== 0 || verdict === undefined) {
|
|
94
122
|
// Fail open: an unreviewable decision stays unratified and the report
|
|
@@ -108,6 +136,7 @@ export async function reviewDecisions(options) {
|
|
|
108
136
|
triaged.add(id);
|
|
109
137
|
log(`${workstreamId} decision ${id}: ${verdict.verdict}`);
|
|
110
138
|
}
|
|
139
|
+
return spawnErrors;
|
|
111
140
|
}
|
|
112
141
|
function findingEvidenceLines(evidence) {
|
|
113
142
|
return evidence.map((item) => {
|
|
@@ -256,22 +285,38 @@ export function extractTriageVerdict(output) {
|
|
|
256
285
|
/**
|
|
257
286
|
* Triages each routed finding with the charter's three dispositions. This
|
|
258
287
|
* only records a `fix-now` triage — WS-06 acts on it. Fails open throughout:
|
|
259
|
-
* no decider, a non-zero exit, an unparseable verdict,
|
|
260
|
-
*
|
|
288
|
+
* no decider, a non-zero exit, an unparseable verdict, a hollow escalation,
|
|
289
|
+
* or a spawn error leaves the finding `open` and never blocks the run.
|
|
290
|
+
* Returns the spawn-error text for any finding the decider could not even be
|
|
291
|
+
* spawned for, so the caller can record it durably in the owning
|
|
292
|
+
* `WorkstreamResult.stageErrors` (SC-12).
|
|
261
293
|
*/
|
|
262
294
|
export async function triageFindings(options) {
|
|
263
|
-
const { root, programId, manifest, workstreamId, findings, baseCommit, decider, agentRunner, git, isRepository, reviewed, triaged, now, log, } = options;
|
|
295
|
+
const { root, programId, manifest, workstreamId, findings, baseCommit, decider, agentRunner, permits = NOOP_PERMITS_CONTEXT, git, isRepository, reviewed, triaged, now, log, observe, onTranscript, } = options;
|
|
264
296
|
if (!decider || findings.length === 0)
|
|
265
|
-
return;
|
|
297
|
+
return [];
|
|
266
298
|
const diff = isRepository && baseCommit !== undefined
|
|
267
299
|
? await git.diffSince(root, baseCommit)
|
|
268
300
|
: "";
|
|
301
|
+
const spawnErrors = [];
|
|
269
302
|
for (const event of findings) {
|
|
270
303
|
if (reviewed.has(event.id))
|
|
271
304
|
continue;
|
|
272
305
|
reviewed.add(event.id);
|
|
273
306
|
const brief = findingTriageBrief(manifest, workstreamId, event, diff);
|
|
274
|
-
|
|
307
|
+
let invocation;
|
|
308
|
+
try {
|
|
309
|
+
invocation = await invokeAgent(agentRunner, decider, brief, root, permits, "deciderAgent", observe);
|
|
310
|
+
if (invocation.transcript)
|
|
311
|
+
await onTranscript?.(invocation.transcript);
|
|
312
|
+
}
|
|
313
|
+
catch (error) {
|
|
314
|
+
const message = `the decider could not be spawned while triaging finding ${event.id} ` +
|
|
315
|
+
`(${workstreamId}): ${error.message}; left untriaged`;
|
|
316
|
+
spawnErrors.push(message);
|
|
317
|
+
log(`${workstreamId} finding ${event.id}: ${message}`);
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
275
320
|
const verdict = extractTriageVerdict(invocation.output);
|
|
276
321
|
if (invocation.exitCode !== 0 || verdict === undefined) {
|
|
277
322
|
// Fail open: an untriaged finding stays open and the report says so;
|
|
@@ -302,5 +347,6 @@ export async function triageFindings(options) {
|
|
|
302
347
|
triaged.add(event.id);
|
|
303
348
|
log(`${workstreamId} finding ${event.id}: ${verdict.disposition}`);
|
|
304
349
|
}
|
|
350
|
+
return spawnErrors;
|
|
305
351
|
}
|
|
306
352
|
//# sourceMappingURL=decider-review.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decider-review.js","sourceRoot":"","sources":["../src/decider-review.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"decider-review.js","sourceRoot":"","sources":["../src/decider-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,8 @@ import type { Evidence, FindingCategory, Severity } from "./findings.js";
|
|
|
15
15
|
export declare const LEDGER_SCHEMA_VERSION = 1;
|
|
16
16
|
interface EventBase {
|
|
17
17
|
at: string;
|
|
18
|
-
/** Stable
|
|
18
|
+
/** Stable identity from {@link decisionFingerprint} or, for a
|
|
19
|
+
* `permission-denied` event, {@link denialFingerprint}. */
|
|
19
20
|
id: string;
|
|
20
21
|
}
|
|
21
22
|
export type LedgerEvent = (EventBase & {
|
|
@@ -30,6 +31,11 @@ export type LedgerEvent = (EventBase & {
|
|
|
30
31
|
verdict: "ratify" | "escalate";
|
|
31
32
|
rationale: string;
|
|
32
33
|
reviewedBy: "decider";
|
|
34
|
+
}) | (EventBase & {
|
|
35
|
+
/** A decider spawn error left this decision unratified (SC-12 of
|
|
36
|
+
* WS-04) — never a verdict, just a durable note explaining the gap. */
|
|
37
|
+
kind: "decision-review-skipped";
|
|
38
|
+
reason: string;
|
|
33
39
|
}) | (EventBase & {
|
|
34
40
|
kind: "decision-human";
|
|
35
41
|
/** The option label the human settled on. */
|
|
@@ -75,6 +81,31 @@ export type LedgerEvent = (EventBase & {
|
|
|
75
81
|
/** The fix commit, present only on a kept fix that landed one. */
|
|
76
82
|
commit?: string;
|
|
77
83
|
attemptedBy: "implementer";
|
|
84
|
+
}) | (EventBase & {
|
|
85
|
+
kind: "prerequisite-verified";
|
|
86
|
+
/** The verify command that passed — the fact that was checked. */
|
|
87
|
+
verifyCommand: string;
|
|
88
|
+
/** Which run verified it — the run-start identity (WS-02's preflight),
|
|
89
|
+
* present even in a non-repo tree and distinct for two invocations at
|
|
90
|
+
* the same commit. */
|
|
91
|
+
runId: string;
|
|
92
|
+
/** The run's anchor commit, when in a repository; absent outside one. */
|
|
93
|
+
commit?: string;
|
|
94
|
+
}) | (EventBase & {
|
|
95
|
+
kind: "permission-denied";
|
|
96
|
+
workstream: string;
|
|
97
|
+
/** The attempt/spawn label the denial happened under: "implementer",
|
|
98
|
+
* "recovery", "informed retry", a critique-fix label, "reviewer", or
|
|
99
|
+
* "decider". */
|
|
100
|
+
attempt: string;
|
|
101
|
+
/** The exact command the CLI or the agent named. */
|
|
102
|
+
command: string;
|
|
103
|
+
/** Who refused it. */
|
|
104
|
+
source: "classifier" | "deny-rule" | "agent-report";
|
|
105
|
+
/** The CLI's own reason, when observed from the transcript. */
|
|
106
|
+
reason?: string;
|
|
107
|
+
/** The agent's `because:` reason, when it reported one. */
|
|
108
|
+
agentReason?: string;
|
|
78
109
|
});
|
|
79
110
|
export type DecisionStatus = "unratified" | "ratified" | "escalated" | "human-decided";
|
|
80
111
|
export interface DecisionRecord {
|
|
@@ -90,6 +121,9 @@ export interface DecisionRecord {
|
|
|
90
121
|
humanReason?: string;
|
|
91
122
|
/** True when the agent claimed the choice is costly to undo. */
|
|
92
123
|
oneWay: boolean;
|
|
124
|
+
/** Present when a decider spawn error left this decision unratified — the
|
|
125
|
+
* reason ratification did not run, for the report to explain the gap. */
|
|
126
|
+
reviewSkippedReason?: string;
|
|
93
127
|
}
|
|
94
128
|
export type FindingStatus = "open" | "fix-now" | "accepted" | "escalated" | "human-decided";
|
|
95
129
|
export interface FindingRecord {
|
|
@@ -127,12 +161,31 @@ export interface FindingRecord {
|
|
|
127
161
|
commit?: string;
|
|
128
162
|
};
|
|
129
163
|
}
|
|
164
|
+
export interface DenialRecord {
|
|
165
|
+
id: string;
|
|
166
|
+
workstream: string;
|
|
167
|
+
attempt: string;
|
|
168
|
+
command: string;
|
|
169
|
+
source: "classifier" | "deny-rule" | "agent-report";
|
|
170
|
+
reason?: string;
|
|
171
|
+
agentReason?: string;
|
|
172
|
+
}
|
|
130
173
|
export interface DecisionLedgerView {
|
|
131
174
|
decisions: DecisionRecord[];
|
|
132
175
|
findings: FindingRecord[];
|
|
176
|
+
denials: DenialRecord[];
|
|
133
177
|
/** Journal lines that could not be read; reported, never fatal. */
|
|
134
178
|
corrupt: number;
|
|
135
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Stable identity for a denial: workstream + attempt + command, deliberately
|
|
182
|
+
* excluding `source`. This is what makes an observed denial and a
|
|
183
|
+
* same-attempt agent self-report of the same command collapse into one
|
|
184
|
+
* record instead of two half-populated ones — the caller correlates the two
|
|
185
|
+
* sources before writing (see run-program.ts), and the shared id is what
|
|
186
|
+
* lets a later write refine (not duplicate) the earlier one.
|
|
187
|
+
*/
|
|
188
|
+
export declare function denialFingerprint(workstream: string, attempt: string, command: string): string;
|
|
136
189
|
export declare function ledgerPath(root: string, programId: string): string;
|
|
137
190
|
export declare function appendLedgerEvents(root: string, programId: string, events: LedgerEvent[]): Promise<void>;
|
|
138
191
|
export declare function reduceLedgerEvents(events: LedgerEvent[]): DecisionLedgerView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-ledger.d.ts","sourceRoot":"","sources":["../src/decision-ledger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decision-ledger.d.ts","sourceRoot":"","sources":["../src/decision-ledger.ts"],"names":[],"mappings":"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"}
|
package/dist/decision-ledger.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import { appendFile, mkdir, readFile } from "node:fs/promises";
|
|
2
3
|
import { dirname, join, resolve } from "node:path";
|
|
3
4
|
/**
|
|
@@ -13,6 +14,20 @@ import { dirname, join, resolve } from "node:path";
|
|
|
13
14
|
* blocked run — because the ledger explains work, it does not gate it.
|
|
14
15
|
*/
|
|
15
16
|
export const LEDGER_SCHEMA_VERSION = 1;
|
|
17
|
+
/**
|
|
18
|
+
* Stable identity for a denial: workstream + attempt + command, deliberately
|
|
19
|
+
* excluding `source`. This is what makes an observed denial and a
|
|
20
|
+
* same-attempt agent self-report of the same command collapse into one
|
|
21
|
+
* record instead of two half-populated ones — the caller correlates the two
|
|
22
|
+
* sources before writing (see run-program.ts), and the shared id is what
|
|
23
|
+
* lets a later write refine (not duplicate) the earlier one.
|
|
24
|
+
*/
|
|
25
|
+
export function denialFingerprint(workstream, attempt, command) {
|
|
26
|
+
return createHash("sha256")
|
|
27
|
+
.update(`${workstream} ${attempt} ${command}`)
|
|
28
|
+
.digest("hex")
|
|
29
|
+
.slice(0, 12);
|
|
30
|
+
}
|
|
16
31
|
const FINDING_STATUS_BY_DISPOSITION = {
|
|
17
32
|
"fix-now": "fix-now",
|
|
18
33
|
accept: "accepted",
|
|
@@ -34,6 +49,7 @@ export async function appendLedgerEvents(root, programId, events) {
|
|
|
34
49
|
export function reduceLedgerEvents(events) {
|
|
35
50
|
const decisionsById = new Map();
|
|
36
51
|
const findingsById = new Map();
|
|
52
|
+
const denialsById = new Map();
|
|
37
53
|
for (const event of events) {
|
|
38
54
|
if (event.kind === "decision-recorded") {
|
|
39
55
|
const existing = decisionsById.get(event.id);
|
|
@@ -56,6 +72,9 @@ export function reduceLedgerEvents(events) {
|
|
|
56
72
|
...(existing?.humanReason === undefined
|
|
57
73
|
? {}
|
|
58
74
|
: { humanReason: existing.humanReason }),
|
|
75
|
+
...(existing?.reviewSkippedReason === undefined
|
|
76
|
+
? {}
|
|
77
|
+
: { reviewSkippedReason: existing.reviewSkippedReason }),
|
|
59
78
|
oneWay: event.decision.reversible === false,
|
|
60
79
|
});
|
|
61
80
|
continue;
|
|
@@ -151,6 +170,15 @@ export function reduceLedgerEvents(events) {
|
|
|
151
170
|
record.reviewRationale = event.rationale;
|
|
152
171
|
continue;
|
|
153
172
|
}
|
|
173
|
+
if (event.kind === "decision-review-skipped") {
|
|
174
|
+
const record = decisionsById.get(event.id);
|
|
175
|
+
if (!record)
|
|
176
|
+
continue;
|
|
177
|
+
// A note explaining a gap, never an outcome: never overrides a status
|
|
178
|
+
// any other event already settled.
|
|
179
|
+
record.reviewSkippedReason = event.reason;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
154
182
|
if (event.kind === "decision-human") {
|
|
155
183
|
// A human ruling settles whichever record matches the id — a decision
|
|
156
184
|
// or a finding — never both, since ids never collide across the two.
|
|
@@ -169,6 +197,29 @@ export function reduceLedgerEvents(events) {
|
|
|
169
197
|
}
|
|
170
198
|
continue;
|
|
171
199
|
}
|
|
200
|
+
if (event.kind === "prerequisite-verified") {
|
|
201
|
+
// History, not a decision/finding projection: no DecisionLedgerView
|
|
202
|
+
// field consumes it (the report derives *unmet* prerequisites from the
|
|
203
|
+
// manifest, not the ledger). Explicit so the fail-open fallthrough
|
|
204
|
+
// below documents intent rather than merely happening to cover it.
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
if (event.kind === "permission-denied") {
|
|
208
|
+
// A fact, not a decision or finding — no status, no authority chain.
|
|
209
|
+
// Last-wins by id, same as every other projection here: a resumed
|
|
210
|
+
// run's re-denial of the same command at the same attempt refines the
|
|
211
|
+
// existing record rather than duplicating it.
|
|
212
|
+
denialsById.set(event.id, {
|
|
213
|
+
id: event.id,
|
|
214
|
+
workstream: event.workstream,
|
|
215
|
+
attempt: event.attempt,
|
|
216
|
+
command: event.command,
|
|
217
|
+
source: event.source,
|
|
218
|
+
...(event.reason === undefined ? {} : { reason: event.reason }),
|
|
219
|
+
...(event.agentReason === undefined ? {} : { agentReason: event.agentReason }),
|
|
220
|
+
});
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
172
223
|
// A genuinely unknown or future event kind is ignored, never
|
|
173
224
|
// mis-handled — reads stay fail-open regardless of what a hand-edited
|
|
174
225
|
// or newer ledger presents.
|
|
@@ -176,6 +227,7 @@ export function reduceLedgerEvents(events) {
|
|
|
176
227
|
return {
|
|
177
228
|
decisions: [...decisionsById.values()],
|
|
178
229
|
findings: [...findingsById.values()],
|
|
230
|
+
denials: [...denialsById.values()],
|
|
179
231
|
corrupt: 0,
|
|
180
232
|
};
|
|
181
233
|
}
|
|
@@ -190,7 +242,7 @@ export async function readDecisionLedger(root, programId) {
|
|
|
190
242
|
raw = await readFile(ledgerPath(root, programId), "utf8");
|
|
191
243
|
}
|
|
192
244
|
catch {
|
|
193
|
-
return { decisions: [], findings: [], corrupt: 0 };
|
|
245
|
+
return { decisions: [], findings: [], denials: [], corrupt: 0 };
|
|
194
246
|
}
|
|
195
247
|
const events = [];
|
|
196
248
|
let corrupt = 0;
|