@lannguyensi/harness 0.28.1 → 0.30.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 +28 -0
- package/dist/cli/apply/generate-codex-config.js +24 -4
- package/dist/cli/apply/generate-codex-config.js.map +1 -1
- package/dist/cli/approve/risk.d.ts +49 -6
- package/dist/cli/approve/risk.js +87 -8
- package/dist/cli/approve/risk.js.map +1 -1
- package/dist/cli/approve/understanding.d.ts +38 -2
- package/dist/cli/approve/understanding.js +145 -28
- package/dist/cli/approve/understanding.js.map +1 -1
- package/dist/cli/index.js +94 -21
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/templates.d.ts +1 -1
- package/dist/cli/init/templates.js +2 -1
- package/dist/cli/init/templates.js.map +1 -1
- package/dist/cli/pack/hook-codex-pre-tool-use.js +38 -0
- package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -1
- package/dist/cli/policy/intercept.d.ts +18 -0
- package/dist/cli/policy/intercept.js +66 -10
- package/dist/cli/policy/intercept.js.map +1 -1
- package/dist/runtime/git-context.js +7 -0
- package/dist/runtime/git-context.js.map +1 -1
- package/package.json +1 -1
|
@@ -136,6 +136,48 @@ function findLatestParseError(dir, sessionId) {
|
|
|
136
136
|
}
|
|
137
137
|
return null;
|
|
138
138
|
}
|
|
139
|
+
function validatePersistedReport(parsed) {
|
|
140
|
+
const mode = typeof parsed["mode"] === "string" ? parsed["mode"] : null;
|
|
141
|
+
if (mode !== "grill_me")
|
|
142
|
+
return { ok: true, mode };
|
|
143
|
+
const priorArt = parsed["priorArt"];
|
|
144
|
+
if (!Array.isArray(priorArt) || priorArt.length === 0) {
|
|
145
|
+
return {
|
|
146
|
+
ok: false,
|
|
147
|
+
field: "priorArt",
|
|
148
|
+
reason: "grill_me report is missing required Section 10 (Prior Art). " +
|
|
149
|
+
"The schema requires a non-empty list naming the channels searched " +
|
|
150
|
+
"and the closest existing solution.",
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Mirror the schema's `items: { type: "string", minLength: 1 }`.
|
|
154
|
+
for (const item of priorArt) {
|
|
155
|
+
if (typeof item !== "string" || item.trim().length === 0) {
|
|
156
|
+
return {
|
|
157
|
+
ok: false,
|
|
158
|
+
field: "priorArt",
|
|
159
|
+
reason: "grill_me report's priorArt contains a non-string or empty item; " +
|
|
160
|
+
"every entry must be a non-empty string.",
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Deterrent for the literal `- None` / `None` placeholder. The parser
|
|
165
|
+
// intentionally accepts these structurally; approve-time is where the
|
|
166
|
+
// prompt's "do not write `- None`" rule turns into a hard refusal.
|
|
167
|
+
// Only blocks when EVERY item is the None literal; a mixed list with
|
|
168
|
+
// real content is accepted.
|
|
169
|
+
const isNone = (x) => typeof x === "string" && ["none", "- none"].includes(x.trim().toLowerCase());
|
|
170
|
+
if (priorArt.every(isNone)) {
|
|
171
|
+
return {
|
|
172
|
+
ok: false,
|
|
173
|
+
field: "priorArt",
|
|
174
|
+
reason: "grill_me report's priorArt is entirely literal `None` / `- None`. " +
|
|
175
|
+
"The section exists to force a written answer to 'should this be " +
|
|
176
|
+
"built at all'; name the channels searched and the closest existing tool.",
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return { ok: true, mode };
|
|
180
|
+
}
|
|
139
181
|
function rewriteReportApproved(filePath, approvedAt, approvedBy, sessionId) {
|
|
140
182
|
const raw = fs.readFileSync(filePath, "utf8");
|
|
141
183
|
const parsed = JSON.parse(raw);
|
|
@@ -192,13 +234,19 @@ export async function approveUnderstanding(opts = {}) {
|
|
|
192
234
|
});
|
|
193
235
|
// Session id resolution, in precedence order:
|
|
194
236
|
// 1. explicit --session flag
|
|
195
|
-
// 2. $
|
|
196
|
-
//
|
|
197
|
-
//
|
|
198
|
-
//
|
|
237
|
+
// 2. $CLAUDE_CODE_SESSION_ID — the canonical Claude Code env, the
|
|
238
|
+
// variable Claude Code itself exports into the agent shell. Read
|
|
239
|
+
// first so the runtime's id wins over a manually exported legacy
|
|
240
|
+
// $CLAUDE_SESSION_ID that may not match.
|
|
241
|
+
// 3. $CLAUDE_SESSION_ID — legacy / docs-name peer, kept for the
|
|
242
|
+
// Codex pre-tool-use hook's own fallback chain and for operators
|
|
243
|
+
// who set it by hand in older `!`-shell recipes.
|
|
244
|
+
// 4. $CODEX_SESSION_ID (set inside a live Codex session — symmetric
|
|
245
|
+
// with the Codex pre-tool-use hook's own env fallback).
|
|
246
|
+
// 5. the `.pending-approval` file the gate hook staged on its last
|
|
199
247
|
// block — this is what makes an arg-less `harness approve` work
|
|
200
248
|
// from the operator's `!`-shell, where neither of the above is set.
|
|
201
|
-
//
|
|
249
|
+
// 6. the freshest persisted Understanding Report under <reportsDir>
|
|
202
250
|
// whose JSON `sessionId` field is non-null. Runtime-neutral
|
|
203
251
|
// fallback when the gate has not blocked yet (e.g. arg-less
|
|
204
252
|
// approval right after the agent produced an Understanding Report,
|
|
@@ -220,6 +268,11 @@ export async function approveUnderstanding(opts = {}) {
|
|
|
220
268
|
sessionId = opts.session;
|
|
221
269
|
sessionSource = "flag";
|
|
222
270
|
}
|
|
271
|
+
else if (typeof process.env.CLAUDE_CODE_SESSION_ID === "string" &&
|
|
272
|
+
process.env.CLAUDE_CODE_SESSION_ID.length > 0) {
|
|
273
|
+
sessionId = process.env.CLAUDE_CODE_SESSION_ID;
|
|
274
|
+
sessionSource = "env-claude-code";
|
|
275
|
+
}
|
|
223
276
|
else if (typeof process.env.CLAUDE_SESSION_ID === "string" &&
|
|
224
277
|
process.env.CLAUDE_SESSION_ID.length > 0) {
|
|
225
278
|
sessionId = process.env.CLAUDE_SESSION_ID;
|
|
@@ -259,16 +312,19 @@ export async function approveUnderstanding(opts = {}) {
|
|
|
259
312
|
}
|
|
260
313
|
}
|
|
261
314
|
if (sessionId === "") {
|
|
262
|
-
// Reaching here means: no --session flag, no $
|
|
263
|
-
// $CODEX_SESSION_ID env, no staged
|
|
264
|
-
// `pending` persisted Understanding
|
|
265
|
-
// carries a sessionId field. Either the
|
|
266
|
-
// session and the agent never produced a
|
|
267
|
-
//
|
|
268
|
-
// fresh `pending` report).
|
|
269
|
-
// operator does not have to
|
|
315
|
+
// Reaching here means: no --session flag, no $CLAUDE_CODE_SESSION_ID
|
|
316
|
+
// / $CLAUDE_SESSION_ID / $CODEX_SESSION_ID env, no staged
|
|
317
|
+
// `.pending-approval`, AND no `pending` persisted Understanding
|
|
318
|
+
// Report under <reportsDir> carries a sessionId field. Either the
|
|
319
|
+
// gate has never blocked this session and the agent never produced a
|
|
320
|
+
// report, or every report is already approved/expired or
|
|
321
|
+
// sessionId-null (tier 6 only adopts a fresh `pending` report).
|
|
322
|
+
// Spell out the retrieval paths so the operator does not have to
|
|
323
|
+
// dig through docs.
|
|
270
324
|
throw new HarnessExitError([
|
|
271
|
-
"no session id available. Pass --session <id>, or set
|
|
325
|
+
"no session id available. Pass --session <id>, or set one of",
|
|
326
|
+
"$CLAUDE_CODE_SESSION_ID (Claude Code) / $CLAUDE_SESSION_ID (legacy) /",
|
|
327
|
+
"$CODEX_SESSION_ID (Codex).",
|
|
272
328
|
"",
|
|
273
329
|
`Both the understanding-gate PreToolUse hook AND \`harness session-start preflight\``,
|
|
274
330
|
"stage the session id in",
|
|
@@ -287,7 +343,7 @@ export async function approveUnderstanding(opts = {}) {
|
|
|
287
343
|
" so this is the canonical session-id source for both Claude Code",
|
|
288
344
|
" and Codex runtimes regardless of cwd.",
|
|
289
345
|
" • From inside the running agent: ask it to print its session id",
|
|
290
|
-
" (Claude Code exposes $
|
|
346
|
+
" (Claude Code exposes $CLAUDE_CODE_SESSION_ID; Codex exposes",
|
|
291
347
|
" $CODEX_SESSION_ID and also prints it in `codex doctor --json`).",
|
|
292
348
|
"",
|
|
293
349
|
"If approve writes the tag but the gate still blocks, the running",
|
|
@@ -305,6 +361,67 @@ export async function approveUnderstanding(opts = {}) {
|
|
|
305
361
|
catch {
|
|
306
362
|
/* swallow; ledger write becomes a degraded-ok */
|
|
307
363
|
}
|
|
364
|
+
// Approve-time validation. Resolve the report we would flip BEFORE
|
|
365
|
+
// writing the marker, so a validation failure can short-circuit every
|
|
366
|
+
// downstream write. The `latest` + `reports` values are reused later;
|
|
367
|
+
// we do not list / find twice.
|
|
368
|
+
const reports = listPersistedReports(reportsDir);
|
|
369
|
+
const latest = findLatestReportForSession(reports, sessionId, {
|
|
370
|
+
tolerantFallback: "uncompleted",
|
|
371
|
+
});
|
|
372
|
+
let validation;
|
|
373
|
+
if (!latest) {
|
|
374
|
+
validation = { skipped: true };
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
let parsed = null;
|
|
378
|
+
try {
|
|
379
|
+
parsed = JSON.parse(fs.readFileSync(latest.filePath, "utf8"));
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
parsed = null;
|
|
383
|
+
}
|
|
384
|
+
if (!parsed) {
|
|
385
|
+
validation = { skipped: true };
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
const v = validatePersistedReport(parsed);
|
|
389
|
+
validation = v.ok ? v : { ...v, enforced: !opts.force };
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// Short-circuit before any side effect if validation rejects and the
|
|
393
|
+
// operator did not pass --force. No marker, no ledger tag, no report
|
|
394
|
+
// flip — the gate stays closed and the audit trail records no
|
|
395
|
+
// approval. The CLI surfaces this as a hard failure so the operator
|
|
396
|
+
// does not believe they approved when they didn't.
|
|
397
|
+
if ("ok" in validation && validation.ok === false && validation.enforced) {
|
|
398
|
+
// Any --task / --tasks ids the operator passed are dropped on the
|
|
399
|
+
// floor: pre-approving a batch alongside a session whose own report
|
|
400
|
+
// failed validation would write task markers for a session that the
|
|
401
|
+
// gate is still going to refuse. The CLI surfaces this empty array
|
|
402
|
+
// alongside the rejection so an operator who batched several tasks
|
|
403
|
+
// can see the batch was NOT pre-approved.
|
|
404
|
+
return {
|
|
405
|
+
sessionId,
|
|
406
|
+
sessionSource,
|
|
407
|
+
...(newestReportPath !== undefined ? { newestReportPath } : {}),
|
|
408
|
+
marker: {
|
|
409
|
+
ok: false,
|
|
410
|
+
reason: `validation failed (${validation.field}): ${validation.reason}`,
|
|
411
|
+
},
|
|
412
|
+
taskMarkers: [],
|
|
413
|
+
ledger: {
|
|
414
|
+
ok: false,
|
|
415
|
+
tag: approvedLedgerTagFor(sessionId),
|
|
416
|
+
reason: `skipped: ${validation.field} validation failed`,
|
|
417
|
+
},
|
|
418
|
+
persistedReport: {
|
|
419
|
+
ok: false,
|
|
420
|
+
reason: `skipped: ${validation.field} validation failed`,
|
|
421
|
+
},
|
|
422
|
+
validation,
|
|
423
|
+
};
|
|
424
|
+
}
|
|
308
425
|
// Write the canonical approval marker first. The gate consults this
|
|
309
426
|
// file (not the ledger) since agent-tasks/88ca4bb3 closed the self-
|
|
310
427
|
// approval backdoor: the agent has direct MCP access to the ledger,
|
|
@@ -375,22 +492,21 @@ export async function approveUnderstanding(opts = {}) {
|
|
|
375
492
|
});
|
|
376
493
|
}
|
|
377
494
|
}
|
|
378
|
-
|
|
495
|
+
// Ledger tag content: a `--force`-bypass of a validation failure
|
|
496
|
+
// stamps the bypass into the tag so audit can distinguish a clean
|
|
497
|
+
// approval from one that overrode a structural rule. The base tag
|
|
498
|
+
// shape (`understanding-approved:<session>`) stays intact so the gate
|
|
499
|
+
// matcher still recognises it; the `:forced:<field>` suffix is
|
|
500
|
+
// additive metadata.
|
|
501
|
+
const tag = "ok" in validation && validation.ok === false
|
|
502
|
+
? `${approvedLedgerTagFor(sessionId)}:forced:${validation.field}`
|
|
503
|
+
: approvedLedgerTagFor(sessionId);
|
|
379
504
|
const ledgerResult = manifest
|
|
380
505
|
? await writeLedgerTag(manifest, sessionId, tag, opts)
|
|
381
506
|
: { ok: false, reason: "manifest unreadable; skipped ledger write" };
|
|
382
|
-
// Persisted report: flip the latest matching one. `
|
|
383
|
-
// resolved up front (alongside
|
|
384
|
-
//
|
|
385
|
-
const reports = listPersistedReports(reportsDir);
|
|
386
|
-
// `tolerantFallback: "uncompleted"` — never adopt a sessionId-null
|
|
387
|
-
// report that is already `approved` / `expired`. Such a report is
|
|
388
|
-
// from a prior, finished cycle (often a different task days ago);
|
|
389
|
-
// flipping it would bind the live session to a stale, unrelated
|
|
390
|
-
// Understanding Report (harness/0dce3880 friction #1).
|
|
391
|
-
const latest = findLatestReportForSession(reports, sessionId, {
|
|
392
|
-
tolerantFallback: "uncompleted",
|
|
393
|
-
});
|
|
507
|
+
// Persisted report: flip the latest matching one. `reports` + `latest`
|
|
508
|
+
// were resolved up front (alongside validation) so both paths agree
|
|
509
|
+
// on the same artefact.
|
|
394
510
|
let persistedReport;
|
|
395
511
|
if (!latest) {
|
|
396
512
|
// When no matching report exists, look at the sibling parse-errors
|
|
@@ -451,6 +567,7 @@ export async function approveUnderstanding(opts = {}) {
|
|
|
451
567
|
? { ok: true, tag }
|
|
452
568
|
: { ok: false, tag, reason: ledgerResult.reason },
|
|
453
569
|
persistedReport,
|
|
570
|
+
validation,
|
|
454
571
|
};
|
|
455
572
|
}
|
|
456
573
|
//# sourceMappingURL=understanding.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"understanding.js","sourceRoot":"","sources":["../../../src/cli/approve/understanding.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,4CAA4C;AAC5C,yCAAyC;AACzC,EAAE;AACF,6EAA6E;AAC7E,wEAAwE;AACxE,mDAAmD;AACnD,uEAAuE;AACvE,oEAAoE;AACpE,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AAEpE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,0BAA0B,EAC1B,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,sEAAsE,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAsB,MAAM,cAAc,CAAC;AA8G9E,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAElD,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,IAAI,CAAC;AAC5E,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACvD,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,QAAkB,EAClB,SAAiB,EACjB,OAAe,EACf,IAAiC;IAEjC,IAAI,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC3D,OAAO,aAAa,CAAC;QACnB,UAAU,EAAE,OAAO;QACnB,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,KAAK;QAC7C,SAAS;QACT,OAAO;QACP,MAAM,EAAE,+BAA+B;KACxC,CAAC,CAAC;AACL,CAAC;AAQD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,oBAAoB,CAAC,GAAW,EAAE,SAAiB;IAC1D,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAA4C,EAAE,CAAC;IAC/D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,IAAc,CAAC;QACnB,IAAI,CAAC;YACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,SAAS;QAC7B,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,oEAAoE;QACpE,mEAAmE;QACnE,gEAAgE;QAChE,wCAAwC;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACpD,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,eAAe,GAAkB,IAAI,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA4B,CAAC;YAC7D,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC5C,eAAe,GAAG,MAAM,CAAC,WAAW,CAAW,CAAC;YAClD,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1E,OAAO,GAAG,MAAM,CAAC,SAAS,CAAW,CAAC;YACxC,CAAC;iBAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC9C,CAAC,CAAC,cAAe,MAAM,CAAC,SAAS,CAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;oBACnG,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAW,GAAG,OAAO,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;QAChE,CAAC;QACD,IAAI,eAAe,KAAK,SAAS;YAAE,SAAS;QAC5C,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAAgB,EAChB,UAAkB,EAClB,UAAkB,EAClB,SAAiB;IAEjB,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IAC1D,MAAM,cAAc,GAClB,OAAO,MAAM,CAAC,gBAAgB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,gBAAgB,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7F,MAAM,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAAC;IACtC,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;IAClC,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;IAClC,kEAAkE;IAClE,oEAAoE;IACpE,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,kEAAkE;IAClE,kEAAkE;IAClE,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;QAChC,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,eAAe,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAClE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,GAAa;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAS;YAC9C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAoC,EAAE;IAEtC,qEAAqE;IACrE,wEAAwE;IACxE,uEAAuE;IACvE,qEAAqE;IACrE,gDAAgD;IAChD,MAAM,YAAY,GAChB,IAAI,CAAC,YAAY;QACjB,mBAAmB,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI;SACtC,CAAC,CAAC;IAEL,8CAA8C;IAC9C,+BAA+B;IAC/B,kEAAkE;IAClE,sEAAsE;IACtE,4DAA4D;IAC5D,qEAAqE;IACrE,qEAAqE;IACrE,yEAAyE;IACzE,sEAAsE;IACtE,iEAAiE;IACjE,iEAAiE;IACjE,wEAAwE;IACxE,wEAAwE;IACxE,EAAE;IACF,uEAAuE;IACvE,6DAA6D;IAC7D,qEAAqE;IACrE,oEAAoE;IACpE,mEAAmE;IACnE,wDAAwD;IACxD,iDAAiD;IACjD,MAAM,UAAU,GACd,IAAI,CAAC,UAAU;QACf,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,aAAa,GAAgD,MAAM,CAAC;IACxE,IAAI,gBAAoC,CAAC;IACzC,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,aAAa,GAAG,MAAM,CAAC;IACzB,CAAC;SAAM,IACL,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,QAAQ;QACjD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EACxC,CAAC;QACD,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC1C,aAAa,GAAG,YAAY,CAAC;IAC/B,CAAC;SAAM,IACL,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,QAAQ;QAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EACvC,CAAC;QACD,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACzC,aAAa,GAAG,WAAW,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,SAAS,GAAG,MAAM,CAAC;YACnB,aAAa,GAAG,kBAAkB,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,gEAAgE;YAChE,6DAA6D;YAC7D,6DAA6D;YAC7D,iEAAiE;YACjE,mDAAmD;YACnD,8DAA8D;YAC9D,gEAAgE;YAChE,4DAA4D;YAC5D,gEAAgE;YAChE,6DAA6D;YAC7D,gEAAgE;YAChE,iEAAiE;YACjE,8DAA8D;YAC9D,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,IAAI,CAClD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,CAC9D,CAAC;YACF,IAAI,MAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBACxC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC7B,aAAa,GAAG,eAAe,CAAC;gBAChC,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;QACrB,kEAAkE;QAClE,+DAA+D;QAC/D,8DAA8D;QAC9D,oEAAoE;QACpE,oEAAoE;QACpE,mEAAmE;QACnE,gEAAgE;QAChE,8CAA8C;QAC9C,MAAM,IAAI,gBAAgB,CACxB;YACE,8FAA8F;YAC9F,EAAE;YACF,qFAAqF;YACrF,yBAAyB;YACzB,KAAK,YAAY,oBAAoB;YACrC,0EAA0E;YAC1E,iFAAiF;YACjF,0FAA0F;YAC1F,EAAE;YACF,yEAAyE;YACzE,yEAAyE;YACzE,EAAE;YACF,uCAAuC;YACvC,oEAAoE;YACpE,SAAS,UAAU,EAAE;YACrB,uEAAuE;YACvE,qEAAqE;YACrE,2CAA2C;YAC3C,mEAAmE;YACnE,4DAA4D;YAC5D,qEAAqE;YACrE,EAAE;YACF,kEAAkE;YAClE,qEAAqE;YACrE,gEAAgE;YAChE,gCAAgC;SACjC,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,OAAO,CACR,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,qEAAqE;IACrE,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;IAED,oEAAoE;IACpE,oEAAoE;IACpE,oEAAoE;IACpE,wDAAwD;IACxD,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC;IAChE,IAAI,YAAkD,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE;YAC5D,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EAAE,gBAAgB;SAC7B,CAAC,CAAC;QACH,YAAY,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,GAAG;YACb,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,oCAAqC,GAAa,CAAC,OAAO,EAAE;SACrE,CAAC;IACJ,CAAC;IAED,6DAA6D;IAC7D,oEAAoE;IACpE,uDAAuD;IACvD,mEAAmE;IACnE,oDAAoD;IACpD,sDAAsD;IACtD,oEAAoE;IACpE,iEAAiE;IACjE,uDAAuD;IACvD,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,UAAU,GAA4B,MAAM,CAAC;IACjD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,eAAe,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,eAAe,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,UAAU,GAAG,cAAc,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,MAAM,WAAW,GAAwB,EAAE,CAAC;IAC5C,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE;gBAC7D,UAAU,EAAE,gBAAgB;gBAC5B,UAAU,EAAE,gBAAgB;aAC7B,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,IAAI;gBACR,MAAM;gBACN,QAAQ;gBACR,UAAU,EAAE,gBAAgB;gBAC5B,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,KAAK;gBACT,MAAM;gBACN,MAAM,EAAE,gCAAiC,GAAa,CAAC,OAAO,EAAE;gBAChE,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,QAAQ;QAC3B,CAAC,CAAC,MAAM,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC;QACtD,CAAC,CAAC,EAAE,EAAE,EAAE,KAAc,EAAE,MAAM,EAAE,2CAA2C,EAAE,CAAC;IAEhF,mEAAmE;IACnE,iEAAiE;IACjE,qCAAqC;IACrC,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACjD,mEAAmE;IACnE,kEAAkE;IAClE,kEAAkE;IAClE,gEAAgE;IAChE,uDAAuD;IACvD,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAAE;QAC5D,gBAAgB,EAAE,aAAa;KAChC,CAAC,CAAC;IAEH,IAAI,eAA8D,CAAC;IACnE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,mEAAmE;QACnE,+DAA+D;QAC/D,iEAAiE;QACjE,iEAAiE;QACjE,gEAAgE;QAChE,kEAAkE;QAClE,0BAA0B;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;QAC3E,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACzE,IAAI,MAAc,CAAC;QACnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,uBAAuB,UAAU,EAAE,CAAC;YAC7C,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,IAAI,2BAA2B,gBAAgB,CAAC,QAAQ,KAAK,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAChG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,gCAAgC,SAAS,KAAK,OAAO,CAAC,MAAM,gCAAgC,CAAC;QACxG,CAAC;QACD,eAAe,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC;QAC1D,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,qBAAqB,CAChE,MAAM,CAAC,QAAQ,EACf,UAAU,EACV,UAAU,EACV,SAAS,CACV,CAAC;YACF,eAAe,GAAG;gBAChB,EAAE,EAAE,IAAI;gBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,cAAc;gBACd,UAAU;gBACV,gBAAgB;aACjB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAe,GAAG;gBAChB,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,qBAAqB,MAAM,CAAC,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE;aAC1E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,sEAAsE;IACtE,uEAAuE;IACvE,sEAAsE;IACtE,IAAI,aAAa,KAAK,kBAAkB,IAAI,YAAY,CAAC,EAAE,EAAE,CAAC;QAC5D,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAED,OAAO;QACL,SAAS;QACT,aAAa;QACb,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,MAAM,EAAE,YAAY;QACpB,WAAW;QACX,MAAM,EAAE,YAAY,CAAC,EAAE;YACrB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;YACnB,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE;QACnD,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"understanding.js","sourceRoot":"","sources":["../../../src/cli/approve/understanding.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -896,10 +896,11 @@ export function buildProgram(opts = {}) {
|
|
|
896
896
|
"Round-trips both sources so harnessed and solo (@lannguyensi/understanding-gate) stacks stay in sync.")
|
|
897
897
|
.option("--config <path>", "manifest path (default: ~/.harness/harness.yaml; legacy fallback ~/.claude/harness.yaml)")
|
|
898
898
|
.option("--project <name>", "apply per-project overrides")
|
|
899
|
-
.option("--session <id>", "explicit session id (default: $CLAUDE_SESSION_ID)")
|
|
899
|
+
.option("--session <id>", "explicit session id (default: $CLAUDE_CODE_SESSION_ID, then $CLAUDE_SESSION_ID, then $CODEX_SESSION_ID, then staged .pending-approval, then newest pending Understanding Report)")
|
|
900
900
|
.option("--task <ids...>", "agent-tasks task id(s) — writes one task-scoped marker per id. Pass several (--task a b c, or --task a,b,c) to pre-approve a whole batch in a single operator action so a multi-task session does not re-prompt per task_finish (harness/1ee26e77, harness/0dce3880)")
|
|
901
901
|
.option("--reports-dir <path>", "override the persisted-report directory (default: ./.understanding-gate/reports)")
|
|
902
902
|
.option("--approved-by <actor>", "actor to record on the persisted report (default: harness-approve-cli)")
|
|
903
|
+
.option("--force", "bypass approve-time report validation (priorArt enforcement on grill_me reports). Writes the marker / ledger / report-flip anyway and stamps the ledger tag with `:forced:<field>` so audit can distinguish forced approvals from clean ones. Emergency-unblock path: default refuses the marker when a grill_me report fails validation.")
|
|
903
904
|
.action(async (options) => {
|
|
904
905
|
const cliOpts = {};
|
|
905
906
|
if (options.config)
|
|
@@ -916,19 +917,23 @@ export function buildProgram(opts = {}) {
|
|
|
916
917
|
cliOpts.reportsDir = options.reportsDir;
|
|
917
918
|
if (options.approvedBy)
|
|
918
919
|
cliOpts.approvedBy = options.approvedBy;
|
|
920
|
+
if (options.force)
|
|
921
|
+
cliOpts.force = true;
|
|
919
922
|
const result = await approveUnderstanding(cliOpts);
|
|
920
923
|
const lines = [];
|
|
921
924
|
// Annotate non-explicit session sources so the operator can spot
|
|
922
925
|
// a wrong id before it lands in the ledger.
|
|
923
926
|
const sourceNote = result.sessionSource === "pending-approval"
|
|
924
927
|
? " (resolved from .pending-approval staged by the gate hook)"
|
|
925
|
-
: result.sessionSource === "env-claude"
|
|
926
|
-
? " (from $
|
|
927
|
-
: result.sessionSource === "env-
|
|
928
|
-
? " (from $
|
|
929
|
-
: result.sessionSource === "
|
|
930
|
-
? " (
|
|
931
|
-
: ""
|
|
928
|
+
: result.sessionSource === "env-claude-code"
|
|
929
|
+
? " (from $CLAUDE_CODE_SESSION_ID)"
|
|
930
|
+
: result.sessionSource === "env-claude"
|
|
931
|
+
? " (from $CLAUDE_SESSION_ID)"
|
|
932
|
+
: result.sessionSource === "env-codex"
|
|
933
|
+
? " (from $CODEX_SESSION_ID)"
|
|
934
|
+
: result.sessionSource === "newest-report"
|
|
935
|
+
? " (GUESSED from the newest pending Understanding Report)"
|
|
936
|
+
: "";
|
|
932
937
|
lines.push(`session: ${result.sessionId}${sourceNote}`);
|
|
933
938
|
if (result.sessionSource === "newest-report") {
|
|
934
939
|
// Tier-5 is a guess: no --session, no env var, no gate-staged
|
|
@@ -939,7 +944,8 @@ export function buildProgram(opts = {}) {
|
|
|
939
944
|
// trusting a marker that may approve the wrong session.
|
|
940
945
|
lines.push("");
|
|
941
946
|
lines.push("⚠ WARNING: the session id was GUESSED, not confirmed. There was no");
|
|
942
|
-
lines.push(" --session flag, no $
|
|
947
|
+
lines.push(" --session flag, no $CLAUDE_CODE_SESSION_ID / $CLAUDE_SESSION_ID /");
|
|
948
|
+
lines.push(" $CODEX_SESSION_ID, and no");
|
|
943
949
|
lines.push(" gate-staged .pending-approval, so it was read from the newest pending");
|
|
944
950
|
lines.push(" Understanding Report:");
|
|
945
951
|
if (result.newestReportPath) {
|
|
@@ -947,7 +953,7 @@ export function buildProgram(opts = {}) {
|
|
|
947
953
|
}
|
|
948
954
|
lines.push(" If that is not your live session, the marker above approves the wrong");
|
|
949
955
|
lines.push(" session and the gate stays blocked. Confirm the id matches the running");
|
|
950
|
-
lines.push(" agent ($CLAUDE_SESSION_ID / $CODEX_SESSION_ID); if it differs, re-run");
|
|
956
|
+
lines.push(" agent ($CLAUDE_CODE_SESSION_ID / $CLAUDE_SESSION_ID / $CODEX_SESSION_ID); if it differs, re-run");
|
|
951
957
|
lines.push(" with --session <live-id>.");
|
|
952
958
|
}
|
|
953
959
|
if (result.marker.ok) {
|
|
@@ -989,16 +995,59 @@ export function buildProgram(opts = {}) {
|
|
|
989
995
|
else {
|
|
990
996
|
lines.push(`report: ⚠ skipped (${result.persistedReport.reason})`);
|
|
991
997
|
}
|
|
998
|
+
// Surface the validation outcome explicitly. Three cases:
|
|
999
|
+
// - ok: report was loaded and structurally compliant for its mode.
|
|
1000
|
+
// - failure-enforced: short-circuited, no writes ran. Hard error.
|
|
1001
|
+
// - failure-forced: writes ran, ledger tag carries `:forced:`.
|
|
1002
|
+
// - skipped: no report loaded; nothing to validate.
|
|
1003
|
+
const v = result.validation;
|
|
1004
|
+
if ("ok" in v && v.ok) {
|
|
1005
|
+
// mode === null is the legacy / pre-v0.4.0 case the validator
|
|
1006
|
+
// waives by design (the schema bump must not retroactively
|
|
1007
|
+
// reject historical reports). Distinguish it from a positive
|
|
1008
|
+
// check so the operator does not read "passed" and assume the
|
|
1009
|
+
// grill_me priorArt rule actually fired.
|
|
1010
|
+
if (v.mode === null) {
|
|
1011
|
+
lines.push("validation: ⓘ legacy report (no mode field) — priorArt rule waived");
|
|
1012
|
+
}
|
|
1013
|
+
else {
|
|
1014
|
+
lines.push(`validation: ✓ ${v.mode} report passed structural checks`);
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
else if ("ok" in v && v.ok === false) {
|
|
1018
|
+
if (v.enforced) {
|
|
1019
|
+
lines.push(`validation: ✗ ${v.field} FAILED: ${v.reason}`);
|
|
1020
|
+
lines.push(" the marker was NOT written; the gate stays closed.");
|
|
1021
|
+
lines.push(" pass --force to bypass this check (the ledger tag will be stamped `:forced:<field>` for audit).");
|
|
1022
|
+
}
|
|
1023
|
+
else {
|
|
1024
|
+
lines.push(`validation: ⚠ ${v.field} failed but --force bypassed (${v.reason})`);
|
|
1025
|
+
lines.push(" the marker IS written; the ledger tag carries a `:forced:` suffix for audit.");
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
992
1028
|
stdout(`${lines.join("\n")}\n`);
|
|
1029
|
+
// Non-zero exit when validation refused the approval. Throwing
|
|
1030
|
+
// HarnessExitError reaches the CLI entrypoint's catch-all and
|
|
1031
|
+
// surfaces both the lines above and the chosen exit code so the
|
|
1032
|
+
// operator sees the rejection and shell pipelines (`&&`,
|
|
1033
|
+
// CI guards) can react.
|
|
1034
|
+
if ("ok" in v && v.ok === false && v.enforced) {
|
|
1035
|
+
throw new HarnessExitError(`approve refused: ${v.field} validation failed. ` +
|
|
1036
|
+
`Run with --force to bypass (the ledger tag will be stamped \`:forced:${v.field}\` for audit).`, EX_FAIL);
|
|
1037
|
+
}
|
|
993
1038
|
});
|
|
994
1039
|
approveCmd
|
|
995
1040
|
.command("risk")
|
|
996
|
-
.description("Grant a Risk Gate require_approval decision
|
|
997
|
-
"
|
|
998
|
-
"
|
|
1041
|
+
.description("Grant a Risk Gate require_approval decision (default), or deliberately override " +
|
|
1042
|
+
"a deny-tier block with --force <reason>. The default path writes the " +
|
|
1043
|
+
"risk-approved:${SESSION_ID} ledger tag the require_approval policy's requires " +
|
|
1044
|
+
"consults; --force writes risk-override:${SESSION_ID}:forced:<reason> for the " +
|
|
1045
|
+
"deny-tier policy. Operator action.")
|
|
999
1046
|
.option("--config <path>", "manifest path (default: ~/.harness/harness.yaml; legacy fallback ~/.claude/harness.yaml)")
|
|
1000
1047
|
.option("--project <name>", "apply per-project overrides")
|
|
1001
|
-
.option("--session <id>", "explicit session id (default: $CLAUDE_SESSION_ID, then $CODEX_SESSION_ID, then staged .pending-approval)")
|
|
1048
|
+
.option("--session <id>", "explicit session id (default: $CLAUDE_CODE_SESSION_ID, then $CLAUDE_SESSION_ID, then $CODEX_SESSION_ID, then staged .pending-approval)")
|
|
1049
|
+
.option("--force <reason>", "operator-deliberate override of a deny-tier Risk Gate block; writes the risk-override tag with the reason stamped into the audit trail")
|
|
1050
|
+
.option("--i-am-the-operator", "acknowledge a scripted / non-TTY --force invocation (otherwise refused)")
|
|
1002
1051
|
.action(async (options) => {
|
|
1003
1052
|
const cliOpts = {};
|
|
1004
1053
|
if (options.config)
|
|
@@ -1007,23 +1056,44 @@ export function buildProgram(opts = {}) {
|
|
|
1007
1056
|
cliOpts.project = options.project;
|
|
1008
1057
|
if (options.session)
|
|
1009
1058
|
cliOpts.session = options.session;
|
|
1059
|
+
if (typeof options.force === "string") {
|
|
1060
|
+
const reason = options.force.trim();
|
|
1061
|
+
if (reason.length === 0) {
|
|
1062
|
+
throw new HarnessExitError("--force requires a non-empty <reason>; the reason is recorded in the audit trail.", EX_USAGE);
|
|
1063
|
+
}
|
|
1064
|
+
cliOpts.force = { reason };
|
|
1065
|
+
}
|
|
1066
|
+
if (options.iAmTheOperator)
|
|
1067
|
+
cliOpts.iAmTheOperator = true;
|
|
1010
1068
|
const result = await approveRisk(cliOpts);
|
|
1011
1069
|
const lines = [];
|
|
1012
1070
|
const sourceNote = result.sessionSource === "pending-approval"
|
|
1013
1071
|
? " (resolved from .pending-approval staged by the gate hook)"
|
|
1014
|
-
: result.sessionSource === "env-claude"
|
|
1015
|
-
? " (from $
|
|
1016
|
-
: result.sessionSource === "env-
|
|
1017
|
-
? " (from $
|
|
1018
|
-
: ""
|
|
1072
|
+
: result.sessionSource === "env-claude-code"
|
|
1073
|
+
? " (from $CLAUDE_CODE_SESSION_ID)"
|
|
1074
|
+
: result.sessionSource === "env-claude"
|
|
1075
|
+
? " (from $CLAUDE_SESSION_ID)"
|
|
1076
|
+
: result.sessionSource === "env-codex"
|
|
1077
|
+
? " (from $CODEX_SESSION_ID)"
|
|
1078
|
+
: "";
|
|
1019
1079
|
lines.push(`session: ${result.sessionId}${sourceNote}`);
|
|
1020
1080
|
if (result.ledger.ok) {
|
|
1021
1081
|
lines.push(`ledger: ✓ wrote ${result.ledger.tag}`);
|
|
1022
|
-
|
|
1082
|
+
if (result.forced) {
|
|
1083
|
+
lines.push(" deny-tier override recorded; the deny-tier Risk Gate policy now passes for this session.");
|
|
1084
|
+
}
|
|
1085
|
+
else {
|
|
1086
|
+
lines.push(" the Risk Gate require_approval policy now passes for this session.");
|
|
1087
|
+
}
|
|
1023
1088
|
}
|
|
1024
1089
|
else {
|
|
1025
1090
|
lines.push(`ledger: ✗ FAILED (${result.ledger.reason ?? "unknown"})`);
|
|
1026
|
-
|
|
1091
|
+
if (result.forced) {
|
|
1092
|
+
lines.push(" the deny-tier override stays unrecorded; the gate keeps blocking.");
|
|
1093
|
+
}
|
|
1094
|
+
else {
|
|
1095
|
+
lines.push(" the require_approval gate stays blocked until the tag is recorded.");
|
|
1096
|
+
}
|
|
1027
1097
|
}
|
|
1028
1098
|
stdout(`${lines.join("\n")}\n`);
|
|
1029
1099
|
});
|
|
@@ -1730,6 +1800,7 @@ export function buildProgram(opts = {}) {
|
|
|
1730
1800
|
.option("--project <name>", "apply per-project overrides")
|
|
1731
1801
|
.option("--ledger-timeout <ms>", "per-call ledger timeout in milliseconds")
|
|
1732
1802
|
.option("--verbose", "emit a stderr diagnostic block for each non-allow decision (also enabled by HARNESS_POLICY_VERBOSE=1)")
|
|
1803
|
+
.option("--hook <name>", "manifest hook name (injected by `harness apply` for the Codex projection so failure logs identify which hook fired)")
|
|
1733
1804
|
.action(async (options) => {
|
|
1734
1805
|
const cliOpts = {};
|
|
1735
1806
|
if (options.config)
|
|
@@ -1743,6 +1814,8 @@ export function buildProgram(opts = {}) {
|
|
|
1743
1814
|
}
|
|
1744
1815
|
if (options.verbose)
|
|
1745
1816
|
cliOpts.verbose = options.verbose;
|
|
1817
|
+
if (options.hook)
|
|
1818
|
+
cliOpts.hookName = options.hook;
|
|
1746
1819
|
await runInterceptCli(cliOpts);
|
|
1747
1820
|
});
|
|
1748
1821
|
return program;
|