@wildorder/nightshift 0.13.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 +118 -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 +71 -8
- 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 +44 -1
- package/dist/decision-ledger.d.ts.map +1 -1
- package/dist/decision-ledger.js +46 -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/manifest.d.ts +21 -1
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +221 -11
- 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/publish.d.ts +35 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +149 -16
- package/dist/publish.js.map +1 -1
- package/dist/run-program.d.ts +53 -2
- package/dist/run-program.d.ts.map +1 -1
- package/dist/run-program.js +529 -54
- package/dist/run-program.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/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
|
@@ -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":"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"}
|
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. */
|
|
@@ -85,6 +91,21 @@ export type LedgerEvent = (EventBase & {
|
|
|
85
91
|
runId: string;
|
|
86
92
|
/** The run's anchor commit, when in a repository; absent outside one. */
|
|
87
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;
|
|
88
109
|
});
|
|
89
110
|
export type DecisionStatus = "unratified" | "ratified" | "escalated" | "human-decided";
|
|
90
111
|
export interface DecisionRecord {
|
|
@@ -100,6 +121,9 @@ export interface DecisionRecord {
|
|
|
100
121
|
humanReason?: string;
|
|
101
122
|
/** True when the agent claimed the choice is costly to undo. */
|
|
102
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;
|
|
103
127
|
}
|
|
104
128
|
export type FindingStatus = "open" | "fix-now" | "accepted" | "escalated" | "human-decided";
|
|
105
129
|
export interface FindingRecord {
|
|
@@ -137,12 +161,31 @@ export interface FindingRecord {
|
|
|
137
161
|
commit?: string;
|
|
138
162
|
};
|
|
139
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
|
+
}
|
|
140
173
|
export interface DecisionLedgerView {
|
|
141
174
|
decisions: DecisionRecord[];
|
|
142
175
|
findings: FindingRecord[];
|
|
176
|
+
denials: DenialRecord[];
|
|
143
177
|
/** Journal lines that could not be read; reported, never fatal. */
|
|
144
178
|
corrupt: number;
|
|
145
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;
|
|
146
189
|
export declare function ledgerPath(root: string, programId: string): string;
|
|
147
190
|
export declare function appendLedgerEvents(root: string, programId: string, events: LedgerEvent[]): Promise<void>;
|
|
148
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.
|
|
@@ -176,6 +204,22 @@ export function reduceLedgerEvents(events) {
|
|
|
176
204
|
// below documents intent rather than merely happening to cover it.
|
|
177
205
|
continue;
|
|
178
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
|
+
}
|
|
179
223
|
// A genuinely unknown or future event kind is ignored, never
|
|
180
224
|
// mis-handled — reads stay fail-open regardless of what a hand-edited
|
|
181
225
|
// or newer ledger presents.
|
|
@@ -183,6 +227,7 @@ export function reduceLedgerEvents(events) {
|
|
|
183
227
|
return {
|
|
184
228
|
decisions: [...decisionsById.values()],
|
|
185
229
|
findings: [...findingsById.values()],
|
|
230
|
+
denials: [...denialsById.values()],
|
|
186
231
|
corrupt: 0,
|
|
187
232
|
};
|
|
188
233
|
}
|
|
@@ -197,7 +242,7 @@ export async function readDecisionLedger(root, programId) {
|
|
|
197
242
|
raw = await readFile(ledgerPath(root, programId), "utf8");
|
|
198
243
|
}
|
|
199
244
|
catch {
|
|
200
|
-
return { decisions: [], findings: [], corrupt: 0 };
|
|
245
|
+
return { decisions: [], findings: [], denials: [], corrupt: 0 };
|
|
201
246
|
}
|
|
202
247
|
const events = [];
|
|
203
248
|
let corrupt = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-ledger.js","sourceRoot":"","sources":["../src/decision-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAInD;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-ledger.js","sourceRoot":"","sources":["../src/decision-ledger.ts"],"names":[],"mappings":"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"}
|
package/dist/decision-view.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DecisionLedgerView, DecisionRecord, FindingRecord } from "./decision-ledger.js";
|
|
1
|
+
import type { DecisionLedgerView, DecisionRecord, DenialRecord, FindingRecord } from "./decision-ledger.js";
|
|
2
2
|
/**
|
|
3
3
|
* The canonical human view of a decision or a finding — the single module
|
|
4
4
|
* every surface renders through (SC-04). Two densities, both kinds of
|
|
@@ -31,6 +31,15 @@ export declare function escalatedRecords(ledger: DecisionLedgerView): Renderable
|
|
|
31
31
|
export declare function isLegacyFinding(record: DecisionRecord): boolean;
|
|
32
32
|
/** The single implementation of the `nightshift decide` flip command. */
|
|
33
33
|
export declare function flipCommand(programId: string, decisionId: string, chooseLabel: string, reason: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Renders one denial: the command, who refused it, the reason(s) available,
|
|
36
|
+
* and a remediation specific to the source (SC-12). A single density — a
|
|
37
|
+
* denial is small, and there is no compact/full split to make here. An allow
|
|
38
|
+
* rule is never printed for `deny-rule`: a deny rule binds in every mode and
|
|
39
|
+
* an allow rule cannot override it, so the only honest remediation is to
|
|
40
|
+
* remove or narrow the deny rule itself.
|
|
41
|
+
*/
|
|
42
|
+
export declare function renderDenial(record: DenialRecord): string[];
|
|
34
43
|
/**
|
|
35
44
|
* Dispatches: a `FindingRecord` renders as a finding; a legacy synthetic
|
|
36
45
|
* finding (a `DecisionRecord` whose title is `"Reviewer finding: …"`) renders
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-view.d.ts","sourceRoot":"","sources":["../src/decision-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,aAAa,EACd,MAAM,sBAAsB,CAAC;AAG9B;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,aAAa,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,CAK/E;AAID,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAE/D;AAWD,yEAAyE;AACzE,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CAKR;
|
|
1
|
+
{"version":3,"file":"decision-view.d.ts","sourceRoot":"","sources":["../src/decision-view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,aAAa,EACd,MAAM,sBAAsB,CAAC;AAG9B;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,aAAa,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,EAAE,CAK/E;AAID,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAE/D;AAWD,yEAAyE;AACzE,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM,CAKR;AAkRD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAwB3D;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,aAAa,GAClB,MAAM,EAAE,CAgBV"}
|
package/dist/decision-view.js
CHANGED
|
@@ -96,6 +96,9 @@ function renderDecisionCompact(record) {
|
|
|
96
96
|
if (record.baseCommit !== undefined) {
|
|
97
97
|
lines.push(` - Anchor: \`${record.baseCommit}\``);
|
|
98
98
|
}
|
|
99
|
+
if (record.reviewSkippedReason !== undefined) {
|
|
100
|
+
lines.push(` - Note: ${record.reviewSkippedReason}`);
|
|
101
|
+
}
|
|
99
102
|
return lines;
|
|
100
103
|
}
|
|
101
104
|
function renderDecisionFull(record, opts) {
|
|
@@ -124,6 +127,9 @@ function renderDecisionFull(record, opts) {
|
|
|
124
127
|
if (record.baseCommit !== undefined) {
|
|
125
128
|
lines.push(`- **Anchor commit:** \`${record.baseCommit}\``);
|
|
126
129
|
}
|
|
130
|
+
if (record.reviewSkippedReason !== undefined) {
|
|
131
|
+
lines.push(`- **Note:** ${record.reviewSkippedReason}`);
|
|
132
|
+
}
|
|
127
133
|
lines.push("");
|
|
128
134
|
if (alternatives.length > 0) {
|
|
129
135
|
lines.push("To flip this decision:", "");
|
|
@@ -238,6 +244,41 @@ function renderLegacyFindingFull(record) {
|
|
|
238
244
|
return lines;
|
|
239
245
|
}
|
|
240
246
|
// ---------------------------------------------------------------------------
|
|
247
|
+
// Denials
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
const DENIAL_SOURCE_LABEL = {
|
|
250
|
+
classifier: "refused by the `auto` classifier",
|
|
251
|
+
"deny-rule": "blocked by a deny rule you wrote",
|
|
252
|
+
"agent-report": "reported by the agent",
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Renders one denial: the command, who refused it, the reason(s) available,
|
|
256
|
+
* and a remediation specific to the source (SC-12). A single density — a
|
|
257
|
+
* denial is small, and there is no compact/full split to make here. An allow
|
|
258
|
+
* rule is never printed for `deny-rule`: a deny rule binds in every mode and
|
|
259
|
+
* an allow rule cannot override it, so the only honest remediation is to
|
|
260
|
+
* remove or narrow the deny rule itself.
|
|
261
|
+
*/
|
|
262
|
+
export function renderDenial(record) {
|
|
263
|
+
const lines = [`- **\`${record.command}\`** — ${DENIAL_SOURCE_LABEL[record.source]}`];
|
|
264
|
+
if (record.reason !== undefined) {
|
|
265
|
+
lines.push(` - CLI reason: ${record.reason}`);
|
|
266
|
+
}
|
|
267
|
+
if (record.agentReason !== undefined) {
|
|
268
|
+
lines.push(` - Agent reason: ${record.agentReason}`);
|
|
269
|
+
}
|
|
270
|
+
if (record.source === "deny-rule") {
|
|
271
|
+
lines.push(" - Remediation: no `permits.allow` rule can lift this — a deny rule " +
|
|
272
|
+
"binds in every mode. Remove or narrow the matching rule in " +
|
|
273
|
+
"`config.permits.deny`.");
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
lines.push(" - Remediation: add this rule to `permits.allow` to lift it (narrow " +
|
|
277
|
+
"or widen as needed):", " ```", ` Bash(${record.command}:*)`, " ```");
|
|
278
|
+
}
|
|
279
|
+
return lines;
|
|
280
|
+
}
|
|
281
|
+
// ---------------------------------------------------------------------------
|
|
241
282
|
// Dispatch
|
|
242
283
|
// ---------------------------------------------------------------------------
|
|
243
284
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-view.js","sourceRoot":"","sources":["../src/decision-view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decision-view.js","sourceRoot":"","sources":["../src/decision-view.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest.d.ts
CHANGED
|
@@ -120,6 +120,26 @@ export type ProgramManifest = z.infer<typeof manifestSchema>;
|
|
|
120
120
|
export declare function specInputsHash(manifest: Pick<ProgramManifest, "successCriteria" | "prerequisites">, workstream: Pick<Workstream, "name" | "scope" | "dependencies" | "prerequisites">): string;
|
|
121
121
|
export declare function manifestPath(root: string, programId: string): string;
|
|
122
122
|
export declare function loadManifest(root: string, programId: string): Promise<ProgramManifest>;
|
|
123
|
-
export
|
|
123
|
+
export interface SaveManifestResult {
|
|
124
|
+
/** True iff an on-disk drift was detected and merged on this save. */
|
|
125
|
+
merged: boolean;
|
|
126
|
+
}
|
|
127
|
+
export interface SaveManifestOptions {
|
|
128
|
+
log?: (line: string) => void;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Every field of a manifest has exactly one authoritative writer. The
|
|
132
|
+
* runner owns `program.status`; each workstream's `status`, `specHash`,
|
|
133
|
+
* `commit`, `dependencies`, and (see {@link mergeManifests}'s doc comment)
|
|
134
|
+
* `prerequisites`; and each prerequisite record's `status`. The human owns
|
|
135
|
+
* everything else, including which workstreams and prerequisite records
|
|
136
|
+
* exist at all. A save that finds the on-disk copy has drifted since this
|
|
137
|
+
* process last read or wrote it reloads that copy, overlays only the
|
|
138
|
+
* runner-owned fields from memory onto it, and writes the merge — never a
|
|
139
|
+
* blind whole-object overwrite. See `docs/programs/clear-backlog-manifest.json`
|
|
140
|
+
* (WS-02) for the full contract this implements.
|
|
141
|
+
*/
|
|
142
|
+
export declare function saveManifest(root: string, programId: string, manifest: ProgramManifest, options?: SaveManifestOptions): Promise<SaveManifestResult>;
|
|
143
|
+
export declare function manifestMergeCount(root: string, programId: string): number;
|
|
124
144
|
export {};
|
|
125
145
|
//# sourceMappingURL=manifest.d.ts.map
|
package/dist/manifest.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AAEH,eAAO,MAAM,mBAAmB,2FAOtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,qBAAqB,mCAAoC,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB;;;;;;;;;iBAsB7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAQ9D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;iBA4B3B,CAAC;AAEH,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBV,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,eAAe,CAAC,EACpE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,eAAe,CAAC,GAChF,MAAM,CA6BR;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOpE;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AAEH,eAAO,MAAM,mBAAmB,2FAOtB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,eAAO,MAAM,qBAAqB,mCAAoC,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB;;;;;;;;;iBAsB7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAQ9D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;iBA4B3B,CAAC;AAEH,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBV,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE7D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,iBAAiB,GAAG,eAAe,CAAC,EACpE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,eAAe,CAAC,GAChF,MAAM,CA6BR;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOpE;AAwED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAc1B;AAED,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAyE7B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE1E"}
|