@lannguyensi/harness 0.40.0 → 0.42.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.
Files changed (189) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +9 -0
  3. package/dist/cli/adopt/derive.d.ts +15 -0
  4. package/dist/cli/adopt/derive.js +34 -7
  5. package/dist/cli/adopt/derive.js.map +1 -1
  6. package/dist/cli/adopt/index.d.ts +30 -0
  7. package/dist/cli/adopt/index.js +23 -3
  8. package/dist/cli/adopt/index.js.map +1 -1
  9. package/dist/cli/apply/generate-settings.d.ts +14 -1
  10. package/dist/cli/apply/generate-settings.js +7 -3
  11. package/dist/cli/apply/generate-settings.js.map +1 -1
  12. package/dist/cli/approve/stdin-report.js +2 -0
  13. package/dist/cli/approve/stdin-report.js.map +1 -1
  14. package/dist/cli/approve/understanding.js +28 -0
  15. package/dist/cli/approve/understanding.js.map +1 -1
  16. package/dist/cli/doctor/claude-mcp.d.ts +50 -0
  17. package/dist/cli/doctor/claude-mcp.js +170 -0
  18. package/dist/cli/doctor/claude-mcp.js.map +1 -0
  19. package/dist/cli/doctor/codex.d.ts +8 -0
  20. package/dist/cli/doctor/codex.js +8 -1
  21. package/dist/cli/doctor/codex.js.map +1 -1
  22. package/dist/cli/doctor/format.js +60 -11
  23. package/dist/cli/doctor/format.js.map +1 -1
  24. package/dist/cli/doctor/index.d.ts +46 -0
  25. package/dist/cli/doctor/index.js +155 -29
  26. package/dist/cli/doctor/index.js.map +1 -1
  27. package/dist/cli/doctor/npm-bin-path.js +42 -0
  28. package/dist/cli/doctor/npm-bin-path.js.map +1 -1
  29. package/dist/cli/doctor/types.d.ts +37 -0
  30. package/dist/cli/doctor/types.js.map +1 -1
  31. package/dist/cli/dry-run.js +5 -0
  32. package/dist/cli/dry-run.js.map +1 -1
  33. package/dist/cli/explain.js +16 -3
  34. package/dist/cli/explain.js.map +1 -1
  35. package/dist/cli/index.js +328 -11
  36. package/dist/cli/index.js.map +1 -1
  37. package/dist/cli/init/agent-tasks-auth.js +32 -0
  38. package/dist/cli/init/agent-tasks-auth.js.map +1 -1
  39. package/dist/cli/init/composer.js +13 -40
  40. package/dist/cli/init/composer.js.map +1 -1
  41. package/dist/cli/init/dependencies.js +21 -0
  42. package/dist/cli/init/dependencies.js.map +1 -1
  43. package/dist/cli/init/detect.d.ts +20 -3
  44. package/dist/cli/init/detect.js +34 -36
  45. package/dist/cli/init/detect.js.map +1 -1
  46. package/dist/cli/init/index.d.ts +18 -0
  47. package/dist/cli/init/index.js +28 -2
  48. package/dist/cli/init/index.js.map +1 -1
  49. package/dist/cli/init/interactive.d.ts +41 -0
  50. package/dist/cli/init/interactive.js +421 -6
  51. package/dist/cli/init/interactive.js.map +1 -1
  52. package/dist/cli/init/profiles.d.ts +2 -2
  53. package/dist/cli/init/profiles.js +10 -1
  54. package/dist/cli/init/profiles.js.map +1 -1
  55. package/dist/cli/init/templates.d.ts +1 -1
  56. package/dist/cli/init/templates.js +217 -8
  57. package/dist/cli/init/templates.js.map +1 -1
  58. package/dist/cli/list.js +3 -1
  59. package/dist/cli/list.js.map +1 -1
  60. package/dist/cli/main.js +10 -0
  61. package/dist/cli/main.js.map +1 -1
  62. package/dist/cli/pack/hook-bootstrap.d.ts +24 -0
  63. package/dist/cli/pack/hook-bootstrap.js +47 -1
  64. package/dist/cli/pack/hook-bootstrap.js.map +1 -1
  65. package/dist/cli/pack/hook-branch-protection.js +9 -1
  66. package/dist/cli/pack/hook-branch-protection.js.map +1 -1
  67. package/dist/cli/pack/hook-codex-post-tool-use.d.ts +25 -0
  68. package/dist/cli/pack/hook-codex-post-tool-use.js +160 -0
  69. package/dist/cli/pack/hook-codex-post-tool-use.js.map +1 -0
  70. package/dist/cli/pack/hook-codex-pre-tool-use.d.ts +1 -0
  71. package/dist/cli/pack/hook-codex-pre-tool-use.js +43 -10
  72. package/dist/cli/pack/hook-codex-pre-tool-use.js.map +1 -1
  73. package/dist/cli/pack/hook-codex-stop.js +1 -8
  74. package/dist/cli/pack/hook-codex-stop.js.map +1 -1
  75. package/dist/cli/pack/hook-post-merge-gate-record.d.ts +30 -0
  76. package/dist/cli/pack/hook-post-merge-gate-record.js +153 -0
  77. package/dist/cli/pack/hook-post-merge-gate-record.js.map +1 -0
  78. package/dist/cli/pack/hook-post-merge-gate.d.ts +28 -0
  79. package/dist/cli/pack/hook-post-merge-gate.js +244 -0
  80. package/dist/cli/pack/hook-post-merge-gate.js.map +1 -0
  81. package/dist/cli/pack/hook-post-tool-use.js +16 -131
  82. package/dist/cli/pack/hook-post-tool-use.js.map +1 -1
  83. package/dist/cli/pack/hook-pre-tool-use.js +54 -2
  84. package/dist/cli/pack/hook-pre-tool-use.js.map +1 -1
  85. package/dist/cli/pack/hook-solution-acceptance-writeguard.js +148 -2
  86. package/dist/cli/pack/hook-solution-acceptance-writeguard.js.map +1 -1
  87. package/dist/cli/pack/hook-stay-in-scope.js +63 -20
  88. package/dist/cli/pack/hook-stay-in-scope.js.map +1 -1
  89. package/dist/cli/pack/hook-track-active-claim.js +33 -9
  90. package/dist/cli/pack/hook-track-active-claim.js.map +1 -1
  91. package/dist/cli/pack/index.d.ts +2 -1
  92. package/dist/cli/pack/index.js +2 -1
  93. package/dist/cli/pack/index.js.map +1 -1
  94. package/dist/cli/pack/mutate.d.ts +19 -0
  95. package/dist/cli/pack/mutate.js +38 -0
  96. package/dist/cli/pack/mutate.js.map +1 -1
  97. package/dist/cli/pack/reseed.d.ts +19 -0
  98. package/dist/cli/pack/reseed.js +118 -0
  99. package/dist/cli/pack/reseed.js.map +1 -0
  100. package/dist/cli/pack/understanding-report-schema-hint.js +1 -1
  101. package/dist/cli/pack/understanding-report-schema-hint.js.map +1 -1
  102. package/dist/cli/pause/index.js +12 -3
  103. package/dist/cli/pause/index.js.map +1 -1
  104. package/dist/cli/record/index.d.ts +64 -0
  105. package/dist/cli/record/index.js +211 -0
  106. package/dist/cli/record/index.js.map +1 -0
  107. package/dist/cli/session-start/index.d.ts +21 -0
  108. package/dist/cli/session-start/index.js +160 -25
  109. package/dist/cli/session-start/index.js.map +1 -1
  110. package/dist/cli/session-start/toolchain-parity.d.ts +149 -0
  111. package/dist/cli/session-start/toolchain-parity.js +618 -0
  112. package/dist/cli/session-start/toolchain-parity.js.map +1 -0
  113. package/dist/cli/uninstall/index.d.ts +73 -1
  114. package/dist/cli/uninstall/index.js +134 -2
  115. package/dist/cli/uninstall/index.js.map +1 -1
  116. package/dist/cli/validate/checks.js +8 -0
  117. package/dist/cli/validate/checks.js.map +1 -1
  118. package/dist/io/claude-mcp.d.ts +258 -0
  119. package/dist/io/claude-mcp.js +544 -0
  120. package/dist/io/claude-mcp.js.map +1 -0
  121. package/dist/policies/ledger-client.d.ts +34 -1
  122. package/dist/policies/ledger-client.js +21 -16
  123. package/dist/policies/ledger-client.js.map +1 -1
  124. package/dist/policy-packs/builtin/branch-protection-runtime.d.ts +4 -2
  125. package/dist/policy-packs/builtin/branch-protection-runtime.js +4 -2
  126. package/dist/policy-packs/builtin/branch-protection-runtime.js.map +1 -1
  127. package/dist/policy-packs/builtin/branch-protection.d.ts +10 -1
  128. package/dist/policy-packs/builtin/branch-protection.js +17 -0
  129. package/dist/policy-packs/builtin/branch-protection.js.map +1 -1
  130. package/dist/policy-packs/builtin/post-merge-gate-runtime.d.ts +195 -0
  131. package/dist/policy-packs/builtin/post-merge-gate-runtime.js +290 -0
  132. package/dist/policy-packs/builtin/post-merge-gate-runtime.js.map +1 -0
  133. package/dist/policy-packs/builtin/post-merge-gate.d.ts +56 -0
  134. package/dist/policy-packs/builtin/post-merge-gate.js +291 -0
  135. package/dist/policy-packs/builtin/post-merge-gate.js.map +1 -0
  136. package/dist/policy-packs/builtin/solution-acceptance-runtime.js +28 -13
  137. package/dist/policy-packs/builtin/solution-acceptance-runtime.js.map +1 -1
  138. package/dist/policy-packs/builtin/understanding-before-execution-runtime.d.ts +197 -24
  139. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js +342 -40
  140. package/dist/policy-packs/builtin/understanding-before-execution-runtime.js.map +1 -1
  141. package/dist/policy-packs/builtin/understanding-before-execution.d.ts +26 -1
  142. package/dist/policy-packs/builtin/understanding-before-execution.js +302 -17
  143. package/dist/policy-packs/builtin/understanding-before-execution.js.map +1 -1
  144. package/dist/policy-packs/registry.d.ts +23 -2
  145. package/dist/policy-packs/registry.js +31 -2
  146. package/dist/policy-packs/registry.js.map +1 -1
  147. package/dist/policy-packs/ux-compare.d.ts +14 -0
  148. package/dist/policy-packs/ux-compare.js +58 -0
  149. package/dist/policy-packs/ux-compare.js.map +1 -0
  150. package/dist/policy-packs/ux-drift-check.d.ts +27 -0
  151. package/dist/policy-packs/ux-drift-check.js +78 -0
  152. package/dist/policy-packs/ux-drift-check.js.map +1 -0
  153. package/dist/probes/mcp.d.ts +13 -0
  154. package/dist/probes/mcp.js +57 -0
  155. package/dist/probes/mcp.js.map +1 -1
  156. package/dist/runtime/approval-signing.d.ts +82 -0
  157. package/dist/runtime/approval-signing.js +275 -0
  158. package/dist/runtime/approval-signing.js.map +1 -0
  159. package/dist/runtime/git-context.d.ts +50 -0
  160. package/dist/runtime/git-context.js +108 -1
  161. package/dist/runtime/git-context.js.map +1 -1
  162. package/dist/runtime/hermetic-spawn-guard.d.ts +25 -0
  163. package/dist/runtime/hermetic-spawn-guard.js +136 -0
  164. package/dist/runtime/hermetic-spawn-guard.js.map +1 -0
  165. package/dist/runtime/intercept.js +62 -5
  166. package/dist/runtime/intercept.js.map +1 -1
  167. package/dist/runtime/ledger-writer.d.ts +27 -0
  168. package/dist/runtime/ledger-writer.js +46 -0
  169. package/dist/runtime/ledger-writer.js.map +1 -0
  170. package/dist/runtime/pause-sentinel.js +14 -3
  171. package/dist/runtime/pause-sentinel.js.map +1 -1
  172. package/dist/runtime/read-only-bash.js +118 -0
  173. package/dist/runtime/read-only-bash.js.map +1 -1
  174. package/dist/runtime/recovery-git-commit.d.ts +22 -0
  175. package/dist/runtime/recovery-git-commit.js +284 -0
  176. package/dist/runtime/recovery-git-commit.js.map +1 -0
  177. package/dist/runtime/tool-name-aliases.d.ts +1 -0
  178. package/dist/runtime/tool-name-aliases.js +7 -1
  179. package/dist/runtime/tool-name-aliases.js.map +1 -1
  180. package/dist/schema/index.d.ts +94 -42
  181. package/dist/schema/index.js +5 -0
  182. package/dist/schema/index.js.map +1 -1
  183. package/dist/schema/policies.d.ts +56 -44
  184. package/dist/schema/policies.js +79 -9
  185. package/dist/schema/policies.js.map +1 -1
  186. package/dist/schema/toolchain-parity.d.ts +18 -0
  187. package/dist/schema/toolchain-parity.js +35 -0
  188. package/dist/schema/toolchain-parity.js.map +1 -0
  189. package/package.json +4 -2
@@ -0,0 +1,118 @@
1
+ // `harness pack reseed <name>` — pull the shipped builtin template's
2
+ // `config.ux` (and `config.producers`) into an already-installed manifest
3
+ // (task 68b9ad9c).
4
+ //
5
+ // Motivation: `harness apply` only projects the manifest OUT to
6
+ // settings.json / MEMORY.md; nothing propagates a deny-message wording
7
+ // fix in the shipped init templates back INTO an operator's existing
8
+ // `policy_packs[].config.ux` — the fix reaches only NEW `harness init`
9
+ // manifests. This is the opt-in write side of that gap; the read-side
10
+ // warning lives in `src/policy-packs/ux-drift-check.ts` (consumed by
11
+ // `harness doctor`). Both read the same canonical default via
12
+ // `resolveBuiltinDefaultConfig` (src/policy-packs/registry.ts).
13
+ //
14
+ // Deliberately explicit-only, mirroring `add`/`remove`: this verb is
15
+ // NEVER invoked by `apply`, so an operator's deliberate ux customisation
16
+ // is never silently clobbered by an upgrade — the operator has to
17
+ // actually run this command for their manifest to change. `--dry-run`
18
+ // prints the diff without writing so the change can be reviewed first.
19
+ // A pack whose current `config.ux` / `config.producers` already matches
20
+ // the shipped template is a no-op (nothing to write).
21
+ import * as fs from "node:fs";
22
+ import * as path from "node:path";
23
+ import { parse as parseYaml } from "yaml";
24
+ import { atomicWriteFile } from "../../io/atomic-write.js";
25
+ import { resolveHomeDir } from "../../runtime/home-dir.js";
26
+ import { withFileLock } from "../../io/lock.js";
27
+ import { unifiedDiff } from "../../io/patch.js";
28
+ import { formatValidationErrors, validateBeforeWrite, } from "../../io/validate-before-write.js";
29
+ import { ManifestParseError, parseManifest } from "../../schema/index.js";
30
+ import { resolveBuiltinDefaultConfig } from "../../policy-packs/registry.js";
31
+ import { producersEqual, safeParseProducers, safeParseUx, uxEqual } from "../../policy-packs/ux-compare.js";
32
+ import { EX_FAIL, EX_NOINPUT, HarnessExitError } from "../exit-codes.js";
33
+ import { applyPackReseedUx } from "./mutate.js";
34
+ const DEFAULT_BASENAME = "harness.yaml";
35
+ const LOCK_BASENAME = ".harness.lock";
36
+ function resolveTargetPath(opts) {
37
+ if (opts.configPath)
38
+ return path.resolve(opts.configPath);
39
+ return path.join(resolveHomeDir({ ...(opts.homeDir !== undefined ? { homeDir: opts.homeDir } : {}) }).path, DEFAULT_BASENAME);
40
+ }
41
+ function formatNameList(names) {
42
+ if (names.length === 0)
43
+ return "(none declared)";
44
+ return names.map((n) => ` - ${n}`).join("\n");
45
+ }
46
+ export async function packReseed(name, opts = {}) {
47
+ const target = resolveTargetPath(opts);
48
+ if (!fs.existsSync(target)) {
49
+ throw new HarnessExitError(`harness manifest not found at ${target}; run \`harness init\` first`, EX_NOINPUT);
50
+ }
51
+ const original = fs.readFileSync(target, "utf8");
52
+ let manifest;
53
+ try {
54
+ manifest = parseManifest(parseYaml(original));
55
+ }
56
+ catch (err) {
57
+ const detail = err instanceof ManifestParseError ? err.message : String(err);
58
+ throw new HarnessExitError(`manifest at ${target} fails schema validation; fix it with \`harness validate\` before reseeding:\n${detail}`, EX_FAIL);
59
+ }
60
+ const pack = manifest.policy_packs.find((p) => p.name === name);
61
+ if (!pack) {
62
+ throw new HarnessExitError(`policy_packs entry ${JSON.stringify(name)} not found. Available entries:\n${formatNameList(manifest.policy_packs.map((p) => p.name))}`, EX_FAIL);
63
+ }
64
+ const canonical = resolveBuiltinDefaultConfig(pack);
65
+ if (!canonical || (canonical.ux === undefined && canonical.producers === undefined)) {
66
+ throw new HarnessExitError(`no shipped default config.ux / config.producers is registered for pack ${JSON.stringify(name)}; nothing to reseed. See docs/policy-packs/ for which packs support reseed.`, EX_FAIL);
67
+ }
68
+ const fieldsChanged = [];
69
+ const fields = {};
70
+ if (canonical.ux !== undefined) {
71
+ const currentUx = pack.config["ux"];
72
+ const parsed = currentUx === undefined ? null : safeParseUx(currentUx);
73
+ const alreadyCanonical = parsed !== null && uxEqual(parsed, canonical.ux);
74
+ if (!alreadyCanonical) {
75
+ fields.ux = canonical.ux;
76
+ fieldsChanged.push("ux");
77
+ }
78
+ }
79
+ if (canonical.producers !== undefined) {
80
+ const currentProducers = pack.config["producers"];
81
+ const parsed = currentProducers === undefined ? null : safeParseProducers(currentProducers);
82
+ const alreadyCanonical = parsed !== null && producersEqual(parsed, canonical.producers);
83
+ if (!alreadyCanonical) {
84
+ fields.producers = canonical.producers;
85
+ fieldsChanged.push("producers");
86
+ }
87
+ }
88
+ if (fieldsChanged.length === 0) {
89
+ return { path: target, name, diff: "", applied: false, fieldsChanged: [] };
90
+ }
91
+ const proposed = applyPackReseedUx(original, name, fields);
92
+ const diff = unifiedDiff({
93
+ fileName: path.basename(target),
94
+ oldText: original,
95
+ newText: proposed,
96
+ oldHeader: "current",
97
+ newHeader: "proposed",
98
+ });
99
+ const schemaResult = validateBeforeWrite(parseYaml(proposed));
100
+ if (!schemaResult.ok) {
101
+ throw new HarnessExitError(`proposed manifest fails schema validation:\n${formatValidationErrors(schemaResult.errors)}`, EX_FAIL);
102
+ }
103
+ if (opts.dryRun) {
104
+ return { path: target, name, diff, applied: false, fieldsChanged };
105
+ }
106
+ const lockPath = path.join(path.dirname(target), LOCK_BASENAME);
107
+ await withFileLock(lockPath, () => {
108
+ const current = fs.readFileSync(target, "utf8");
109
+ const next = applyPackReseedUx(current, name, fields);
110
+ const recheck = validateBeforeWrite(parseYaml(next));
111
+ if (!recheck.ok) {
112
+ throw new HarnessExitError(`proposed manifest fails schema validation after lock acquisition:\n${formatValidationErrors(recheck.errors)}`, EX_FAIL);
113
+ }
114
+ atomicWriteFile(target, next);
115
+ });
116
+ return { path: target, name, diff, applied: true, fieldsChanged };
117
+ }
118
+ //# sourceMappingURL=reseed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reseed.js","sourceRoot":"","sources":["../../../src/cli/pack/reseed.ts"],"names":[],"mappings":"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"}
@@ -53,7 +53,7 @@ export function renderReportSchemaHint() {
53
53
  // one pair implied exhaustiveness. The bullets below show the canonical
54
54
  // names; the parser's alias-tolerance is a quiet bonus, not something
55
55
  // the agent needs to choose between.
56
- const intro = "Report format (parsed by `@lannguyensi/understanding-gate`): markdown with these ten sections, any heading level (#, ##, ###), names case-insensitive. Missing any section produces a parse-error under `.understanding-gate/parse-errors/` and the audit trail is empty even though the gate-approval marker still gets written.";
56
+ const intro = "Report format (parsed by `@lannguyensi/understanding-gate`): markdown with these ten sections, any heading level (#, ##, ###), names case-insensitive. Sections marked (list) need markdown list items ('- ' or '1.') in the body — a prose paragraph under a (list) heading is rejected the same as a missing section. Missing any section produces a parse-error under `.understanding-gate/parse-errors/` and the audit trail is empty even though the gate-approval marker still gets written.";
57
57
  const bullets = UNDERSTANDING_REPORT_REQUIRED_SECTIONS.map((s) => ` - ${s}`).join("\n");
58
58
  // Submission recipe (task 61fd36db): the Stop-hook producer fires only
59
59
  // at END of turn — after `harness approve understanding` already ran —
@@ -1 +1 @@
1
- {"version":3,"file":"understanding-report-schema-hint.js","sourceRoot":"","sources":["../../../src/cli/pack/understanding-report-schema-hint.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,EAAE;AACF,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,wEAAwE;AACxE,uEAAuE;AACvE,+CAA+C;AAC/C,EAAE;AACF,kEAAkE;AAClE,wDAAwD;AACxD,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;AAEnE,MAAM,CAAC,MAAM,sCAAsC,GAAG;IACpD,mCAAmC;IACnC,8BAA8B;IAC9B,sBAAsB;IACtB,4BAA4B;IAC5B,oBAAoB;IACpB,uBAAuB;IACvB,qBAAqB;IACrB,cAAc;IACd,0BAA0B;IAC1B,qEAAqE;IACrE,yDAAyD;IACzD,kEAAkE;IAClE,kEAAkE;IAClE,qCAAqC;IACrC,kBAAkB;CACV,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB;IACpC,uEAAuE;IACvE,wEAAwE;IACxE,+DAA+D;IAC/D,yEAAyE;IACzE,oEAAoE;IACpE,wEAAwE;IACxE,sEAAsE;IACtE,qCAAqC;IACrC,MAAM,KAAK,GACT,mUAAmU,CAAC;IACtU,MAAM,OAAO,GAAG,sCAAsC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,uEAAuE;IACvE,uEAAuE;IACvE,mEAAmE;IACnE,oEAAoE;IACpE,sDAAsD;IACtD,MAAM,MAAM,GACV,yFAAyF;QACzF,sFAAsF;QACtF,4DAA4D;QAC5D,6BAA6B;QAC7B,uBAAuB;QACvB,wBAAwB,CAAC;IAC3B,OAAO,GAAG,KAAK,KAAK,OAAO,KAAK,MAAM,EAAE,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"understanding-report-schema-hint.js","sourceRoot":"","sources":["../../../src/cli/pack/understanding-report-schema-hint.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,wEAAwE;AACxE,EAAE;AACF,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,wEAAwE;AACxE,uEAAuE;AACvE,+CAA+C;AAC/C,EAAE;AACF,kEAAkE;AAClE,wDAAwD;AACxD,qEAAqE;AACrE,qEAAqE;AACrE,qEAAqE;AACrE,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;AAEnE,MAAM,CAAC,MAAM,sCAAsC,GAAG;IACpD,mCAAmC;IACnC,8BAA8B;IAC9B,sBAAsB;IACtB,4BAA4B;IAC5B,oBAAoB;IACpB,uBAAuB;IACvB,qBAAqB;IACrB,cAAc;IACd,0BAA0B;IAC1B,qEAAqE;IACrE,yDAAyD;IACzD,kEAAkE;IAClE,kEAAkE;IAClE,qCAAqC;IACrC,kBAAkB;CACV,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB;IACpC,uEAAuE;IACvE,wEAAwE;IACxE,+DAA+D;IAC/D,yEAAyE;IACzE,oEAAoE;IACpE,wEAAwE;IACxE,sEAAsE;IACtE,qCAAqC;IACrC,MAAM,KAAK,GACT,oeAAoe,CAAC;IACve,MAAM,OAAO,GAAG,sCAAsC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzF,uEAAuE;IACvE,uEAAuE;IACvE,mEAAmE;IACnE,oEAAoE;IACpE,sDAAsD;IACtD,MAAM,MAAM,GACV,yFAAyF;QACzF,sFAAsF;QACtF,4DAA4D;QAC5D,6BAA6B;QAC7B,uBAAuB;QACvB,wBAAwB,CAAC;IAC3B,OAAO,GAAG,KAAK,KAAK,OAAO,KAAK,MAAM,EAAE,CAAC;AAC3C,CAAC"}
@@ -95,9 +95,14 @@ function refuseIfAgentShell(opts) {
95
95
  throw new HarnessExitError([
96
96
  `harness pause/resume refuses to run inside an agent shell (${hit.name} is set).`,
97
97
  "",
98
- "This is the load-bearing guardrail against `harness pause` becoming an",
99
- "agent-driven bypass of the gates harness exists to enforce. Run the verb",
100
- "from your own operator shell (in Claude Code: prefix the command with `! `).",
98
+ "This is a speed bump, not a boundary: a Claude Code `! `-prefixed command",
99
+ "runs in a shell that INHERITS this same session's environment and stdin, so",
100
+ "it is indistinguishable from an agent-issued command and trips this exact",
101
+ "check. Do not prefix with `! `: that does not work. Run the verb from a",
102
+ "terminal OUTSIDE this agent session (a separate terminal window or tab, not",
103
+ "spawned by or nested inside this one). The real enforcement boundary is the",
104
+ "PreToolUse deny-policy layer (see docs/okf/pause-vs-gate-kill-switch.md),",
105
+ "not this CLI check.",
101
106
  ].join("\n"), EX_USAGE);
102
107
  }
103
108
  }
@@ -112,6 +117,10 @@ function refuseIfNonTTY(opts) {
112
117
  "",
113
118
  "If you really mean this (e.g. invoking from a one-off recovery script that",
114
119
  "you reviewed yourself), pass --i-am-the-operator to acknowledge.",
120
+ "",
121
+ "WARNING: --i-am-the-operator only lifts the non-TTY check; it never lifts",
122
+ "the agent-shell check above. If an agent ever asks YOU to pass this flag on",
123
+ "its behalf, that request IS the attack this guard exists to stop: refuse it.",
115
124
  ].join("\n"), EX_USAGE);
116
125
  }
117
126
  function loadManifestBestEffort(opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/pause/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/pause/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { type LedgerWriteFn } from "../../runtime/ledger-writer.js";
2
+ import { type ResolveReadSessionOptions } from "../../runtime/session-id.js";
3
+ import { type LoaderOptions } from "../loader.js";
4
+ /** Options shared by every `record` verb. */
5
+ export interface RecordCommonOptions extends LoaderOptions {
6
+ /** Working directory used for git-context resolution. Defaults to `process.cwd()`. */
7
+ cwd?: string;
8
+ /** Defaults to `process.stderr`. Warnings and error reasons land here. */
9
+ stderr?: NodeJS.WritableStream;
10
+ /** Explicit session id (overrides env + transcript discovery). */
11
+ session?: string;
12
+ /** Per-call ledger timeout in ms. */
13
+ ledgerTimeoutMs?: number;
14
+ /**
15
+ * Inject the read-path session resolver (test seam). Production uses
16
+ * `resolveReadSessionId` from `runtime/session-id`, the same
17
+ * precedence chain `harness audit` / `harness explain --trace` use.
18
+ */
19
+ resolveSession?: (explicit: string | undefined, opts: ResolveReadSessionOptions) => string;
20
+ /** Inject the ledger writer (test seam). */
21
+ writeLedger?: LedgerWriteFn;
22
+ }
23
+ /** Structured outcome of a `record` verb — testable without spawning a process. */
24
+ export interface RecordResult {
25
+ /** 0 on success; EX_USAGE (64) for a bad argument, EX_FAIL (1) for a runtime failure. */
26
+ exitCode: number;
27
+ /** Whether the ledger fact was actually written. */
28
+ wrote: boolean;
29
+ /** The exact content string written (or that would have been written); "" on early validation failure. */
30
+ content: string;
31
+ /** Resolved session id ("" only when validation failed before session resolution). */
32
+ sessionId: string;
33
+ /** Resolved branch tag ("" when the verb does not use one, or resolution failed). */
34
+ branch: string;
35
+ /** Human-readable explanation of a non-write outcome. */
36
+ reason?: string;
37
+ }
38
+ export interface RecordReviewOptions extends RecordCommonOptions {
39
+ /** PR number (or identifier) — required, non-empty. */
40
+ pr: string;
41
+ /** Explicit base-branch override; see resolveBase() for the fallback chain. */
42
+ base?: string;
43
+ /** Explicit branch override (otherwise resolved via resolveGitContext(cwd)). */
44
+ branch?: string;
45
+ /** Free-form review summary — required, non-empty. */
46
+ summary: string;
47
+ }
48
+ export declare function runRecordReview(opts: RecordReviewOptions): Promise<RecordResult>;
49
+ export interface RecordReviewSubagentOptions extends RecordCommonOptions {
50
+ /** agent-tasks task id — required, non-empty. */
51
+ task: string;
52
+ /** Reviewer verdict — required, non-empty. */
53
+ verdict: string;
54
+ /** Explicit branch override (otherwise resolved via resolveGitContext(cwd)). */
55
+ branch?: string;
56
+ /** Optional free-form summary appended after the verdict. */
57
+ summary?: string;
58
+ }
59
+ export declare function runRecordReviewSubagent(opts: RecordReviewSubagentOptions): Promise<RecordResult>;
60
+ export interface RecordDogfoodOptions extends RecordCommonOptions {
61
+ /** End-to-end smoke summary — required, non-empty. */
62
+ summary: string;
63
+ }
64
+ export declare function runRecordDogfood(opts: RecordDogfoodOptions): Promise<RecordResult>;
@@ -0,0 +1,211 @@
1
+ // `harness record {review,review-subagent,dogfood}` — operator/agent-
2
+ // driven evidence-ledger producers for the review-before-merge,
3
+ // review-subagent-before-pr-create, and dogfood-before-release gate
4
+ // families (see src/cli/init/templates.ts for the exact policy
5
+ // definitions and tag shapes these verbs feed).
6
+ //
7
+ // Unlike `harness session-start preflight` (a SessionStart hook that
8
+ // MUST exit 0 on every path so it never breaks the session loop), the
9
+ // `record` verbs are INTERACTIVE: an agent or operator invokes them
10
+ // deliberately to attach a review verdict / dogfood summary to the
11
+ // ledger. A failure here (unreachable ledger, no git context, an empty
12
+ // summary) is a real error the caller needs to see and react to, so
13
+ // every verb exits non-zero with a clear stderr message on failure
14
+ // instead of degrading silently. Each verb still returns a structured
15
+ // `RecordResult` (not just a thrown error) so both paths are testable
16
+ // without spawning a process — same "degrade-with-reason" convention
17
+ // `runSessionStartPreflight` uses.
18
+ //
19
+ // Composition mirrors session-start/index.ts: build the ledger write
20
+ // via the manifest's declared `grounding-mcp` server (through the
21
+ // shared `resolveManifestLedgerWriter` — see runtime/ledger-writer.ts),
22
+ // resolve branch via `resolveGitContext` (the SAME function the
23
+ // preflight-before-* gates use) and session via `resolveReadSessionId`,
24
+ // with `--branch` / `--session` as explicit overrides. No new JSON-RPC
25
+ // or subprocess code: every ledger write goes through the existing
26
+ // `addLedgerFact` primitive.
27
+ import { findGitEntry, resolveCommonDir, resolveGitContext, resolveOriginHeadBase, } from "../../runtime/git-context.js";
28
+ import { resolveManifestLedgerWriter } from "../../runtime/ledger-writer.js";
29
+ import { resolveReadSessionId, } from "../../runtime/session-id.js";
30
+ import { EX_FAIL, EX_USAGE } from "../exit-codes.js";
31
+ import { loadManifest } from "../loader.js";
32
+ const LEDGER_SOURCE_REVIEW = "harness-record-review";
33
+ const LEDGER_SOURCE_REVIEW_SUBAGENT = "harness-record-review-subagent";
34
+ const LEDGER_SOURCE_DOGFOOD = "harness-record-dogfood";
35
+ function resolveSession(opts) {
36
+ const resolve = opts.resolveSession ?? resolveReadSessionId;
37
+ return resolve(opts.session, {});
38
+ }
39
+ /**
40
+ * Write one ledger fact via the manifest's declared `grounding-mcp`
41
+ * server (or the injected `opts.writeLedger` test seam). Mirrors the
42
+ * manifest-wiring block `runSessionStartPreflight` uses, factored
43
+ * through the shared `resolveManifestLedgerWriter` helper.
44
+ */
45
+ async function writeLedgerFact(opts, sessionId, source, content) {
46
+ let writeLedger = opts.writeLedger;
47
+ if (!writeLedger) {
48
+ let manifest;
49
+ try {
50
+ manifest = loadManifest(opts).manifest;
51
+ }
52
+ catch (err) {
53
+ return { ok: false, reason: `manifest load failed: ${err.message}` };
54
+ }
55
+ const resolved = resolveManifestLedgerWriter(manifest, {
56
+ ...(opts.ledgerTimeoutMs !== undefined ? { ledgerTimeoutMs: opts.ledgerTimeoutMs } : {}),
57
+ });
58
+ if (!resolved.ok) {
59
+ return { ok: false, reason: `${resolved.reason}; cannot record ${source} tag` };
60
+ }
61
+ writeLedger = resolved.write;
62
+ }
63
+ const result = await writeLedger({ sessionId, content, source });
64
+ if (!result.ok) {
65
+ return { ok: false, reason: `ledger write failed: ${result.reason ?? "unknown error"}` };
66
+ }
67
+ return { ok: true };
68
+ }
69
+ /**
70
+ * Shared setup every verb runs first: a `note()` sink prefixed with the
71
+ * verb's own name (so stderr lines are attributable when several verbs
72
+ * run in a script), the resolved cwd, and the resolved session id.
73
+ * Session id is resolved this early because `record dogfood`'s content
74
+ * embeds it directly (`dogfood:${sessionId}`).
75
+ */
76
+ function initRecordVerb(opts, verbName) {
77
+ const stderr = opts.stderr ?? process.stderr;
78
+ const note = (msg) => {
79
+ stderr.write(`harness record ${verbName}: ${msg}\n`);
80
+ };
81
+ return { note, cwd: opts.cwd ?? process.cwd(), sessionId: resolveSession(opts) };
82
+ }
83
+ /**
84
+ * Trim `value` and refuse it if empty (a required flag / positional
85
+ * argument left blank). Returns the ready-to-`return`ed EX_USAGE
86
+ * `RecordResult` on failure so callers do not repeat that construction
87
+ * — shared by every "--pr / --task / --verdict / summary must not be
88
+ * empty" check across the three verbs.
89
+ */
90
+ function requireNonEmpty(value, flagLabel, sessionId, note) {
91
+ const trimmed = (value ?? "").trim();
92
+ if (trimmed.length === 0) {
93
+ const reason = `${flagLabel} must not be empty`;
94
+ note(reason);
95
+ return {
96
+ ok: false,
97
+ result: { exitCode: EX_USAGE, wrote: false, content: "", sessionId, branch: "", reason },
98
+ };
99
+ }
100
+ return { ok: true, value: trimmed };
101
+ }
102
+ /**
103
+ * Resolve the branch tag `review` and `review-subagent` both require:
104
+ * explicit `--branch` wins, otherwise `resolveGitContext(cwd)` (the SAME
105
+ * function the preflight-before-* gates use). Returns the ready-to-
106
+ * `return`ed failure `RecordResult` on the shared "cannot resolve any
107
+ * branch" degrade path so callers do not repeat that construction.
108
+ */
109
+ function resolveRequiredBranch(cwd, explicitBranch, sessionId, note) {
110
+ const gitContext = resolveGitContext(cwd);
111
+ const branch = (explicitBranch ?? "").trim() || gitContext.branch;
112
+ if (branch.length === 0) {
113
+ const reason = "no branch resolvable (cwd is not inside a git work tree, or HEAD is detached); pass --branch <name>";
114
+ note(reason);
115
+ return {
116
+ ok: false,
117
+ result: { exitCode: EX_FAIL, wrote: false, content: "", sessionId, branch: "", reason },
118
+ };
119
+ }
120
+ return { ok: true, branch };
121
+ }
122
+ /**
123
+ * Shared tail every verb runs last: write the fact, translate a failure
124
+ * into the degrade-with-reason `RecordResult` shape, or report success.
125
+ */
126
+ async function finishRecordWrite(opts, sessionId, branch, source, content, note) {
127
+ const written = await writeLedgerFact(opts, sessionId, source, content);
128
+ if (!written.ok) {
129
+ note(written.reason);
130
+ return { exitCode: EX_FAIL, wrote: false, content, sessionId, branch, reason: written.reason };
131
+ }
132
+ return { exitCode: 0, wrote: true, content, sessionId, branch };
133
+ }
134
+ // ---------------------------------------------------------------------------
135
+ // Base-branch resolution for `record review` (--base flag > origin/HEAD
136
+ // filesystem fallback > omit with a loud stderr warning). No `gh`
137
+ // shell-out: everything is read straight off the `.git` directory,
138
+ // reusing runtime/git-context.ts's exported `findGitEntry` walk instead
139
+ // of re-implementing it. `resolveOriginHeadBase` / `resolveCommonDir`
140
+ // themselves now live in runtime/git-context.ts too (task post-merge-gate,
141
+ // T-001) so `policy-packs/builtin/post-merge-gate-runtime.ts` can share
142
+ // them without a policy-pack module reaching into `cli/`; imported here
143
+ // unchanged.
144
+ // ---------------------------------------------------------------------------
145
+ /**
146
+ * Resolve the base branch for `record review`: explicit `--base` wins,
147
+ * then the origin/HEAD filesystem fallback, then omission with a loud
148
+ * stderr warning (never a silent gap — the operator needs to know the
149
+ * `review:<base>` tag did not land).
150
+ */
151
+ function resolveBase(cwd, explicitBase, note) {
152
+ const flag = (explicitBase ?? "").trim();
153
+ if (flag.length > 0)
154
+ return flag;
155
+ const gitDir = findGitEntry(cwd)?.gitDir;
156
+ if (gitDir) {
157
+ const base = resolveOriginHeadBase(resolveCommonDir(gitDir));
158
+ if (base)
159
+ return base;
160
+ }
161
+ note("no --base given and origin/HEAD could not be resolved (checked " +
162
+ "refs/remotes/origin/HEAD and packed-refs); omitting the review:<base> tag. " +
163
+ "Pass --base <branch> to record it explicitly.");
164
+ return undefined;
165
+ }
166
+ export async function runRecordReview(opts) {
167
+ const { note, cwd, sessionId } = initRecordVerb(opts, "review");
168
+ const summaryResult = requireNonEmpty(opts.summary, "summary", sessionId, note);
169
+ if (!summaryResult.ok)
170
+ return summaryResult.result;
171
+ const summary = summaryResult.value;
172
+ const prResult = requireNonEmpty(opts.pr, "--pr", sessionId, note);
173
+ if (!prResult.ok)
174
+ return prResult.result;
175
+ const pr = prResult.value;
176
+ const branchResult = resolveRequiredBranch(cwd, opts.branch, sessionId, note);
177
+ if (!branchResult.ok)
178
+ return branchResult.result;
179
+ const branch = branchResult.branch;
180
+ const base = resolveBase(cwd, opts.base, note);
181
+ const content = `review:${pr} review:${branch}${base ? ` review:${base}` : ""} — ${summary}`;
182
+ return finishRecordWrite(opts, sessionId, branch, LEDGER_SOURCE_REVIEW, content, note);
183
+ }
184
+ export async function runRecordReviewSubagent(opts) {
185
+ const { note, cwd, sessionId } = initRecordVerb(opts, "review-subagent");
186
+ const taskResult = requireNonEmpty(opts.task, "--task", sessionId, note);
187
+ if (!taskResult.ok)
188
+ return taskResult.result;
189
+ const task = taskResult.value;
190
+ const verdictResult = requireNonEmpty(opts.verdict, "--verdict", sessionId, note);
191
+ if (!verdictResult.ok)
192
+ return verdictResult.result;
193
+ const verdict = verdictResult.value;
194
+ const branchResult = resolveRequiredBranch(cwd, opts.branch, sessionId, note);
195
+ if (!branchResult.ok)
196
+ return branchResult.result;
197
+ const branch = branchResult.branch;
198
+ const summary = typeof opts.summary === "string" ? opts.summary.trim() : "";
199
+ const content = `review-subagent:${task} review-subagent:${branch} verdict:${verdict}${summary.length > 0 ? ` — ${summary}` : ""}`;
200
+ return finishRecordWrite(opts, sessionId, branch, LEDGER_SOURCE_REVIEW_SUBAGENT, content, note);
201
+ }
202
+ export async function runRecordDogfood(opts) {
203
+ const { note, sessionId } = initRecordVerb(opts, "dogfood");
204
+ const summaryResult = requireNonEmpty(opts.summary, "summary", sessionId, note);
205
+ if (!summaryResult.ok)
206
+ return summaryResult.result;
207
+ const summary = summaryResult.value;
208
+ const content = `dogfood:${sessionId} — ${summary}`;
209
+ return finishRecordWrite(opts, sessionId, "", LEDGER_SOURCE_DOGFOOD, content, note);
210
+ }
211
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/record/index.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ export interface PreflightJson {
8
8
  name?: string;
9
9
  status?: string;
10
10
  message?: string;
11
+ details?: string[];
11
12
  }>;
12
13
  }
13
14
  export type RunPreflightResult = {
@@ -34,6 +35,13 @@ export interface SessionStartPreflightOptions extends LoaderOptions {
34
35
  ledgerTimeoutMs?: number;
35
36
  /** Inject the preflight runner (tests). */
36
37
  runPreflight?: (cwd: string, timeoutMs: number) => Promise<RunPreflightResult>;
38
+ /**
39
+ * Directory the not-ready diagnostic JSON is persisted to (task
40
+ * T-001). Test seam — production defaults to `~/.harness/logs`
41
+ * (`os.homedir()`-based). Always pass a tmp dir in tests so nothing
42
+ * ever touches the operator's real `~/.harness/logs/`.
43
+ */
44
+ logDir?: string;
37
45
  /** Inject the ledger writer (tests). */
38
46
  writeLedger?: (args: {
39
47
  sessionId: string;
@@ -86,4 +94,17 @@ export interface SessionStartPreflightResult {
86
94
  /** Human-readable explanation of a non-write outcome, for diagnostics. */
87
95
  reason?: string;
88
96
  }
97
+ /**
98
+ * Environment for the spawned `preflight` child: the parent env minus
99
+ * HARNESS_ALLOW_REAL_GENERATED_DIR. The launcher sets that flag so the
100
+ * real harness binary may fall back to the operator's home dir, but the
101
+ * preflight child runs the repo's own test suite (its `npm-test` check),
102
+ * and an inherited flag re-enables the implicit real-homedir fallback
103
+ * INSIDE those test processes. With non-empty operator state (e.g. a
104
+ * `harness pause` sentinel) that broke 110 tests and surfaced as a false
105
+ * `failing: npm-test`, keeping the preflight gate shut. Third incident
106
+ * of the operator-state-isolation class PR #199 pinned; the flag must
107
+ * stay scoped to the process the operator actually invoked.
108
+ */
109
+ export declare function preflightChildEnv(parentEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
89
110
  export declare function runSessionStartPreflight(opts?: SessionStartPreflightOptions): Promise<SessionStartPreflightResult>;