@lannguyensi/harness 0.47.0 → 0.49.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 CHANGED
@@ -7,6 +7,221 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.49.0] - 2026-08-26
11
+
12
+ ### Fixed
13
+
14
+ - **Risk Gate: an explicit `kubectl --context`/`--namespace`/`-n` target
15
+ is now a resolver signal, upgrade-only, and the shipped kubectl
16
+ classifier pattern no longer loses a match to a flag between
17
+ `kubectl` and `delete`, without exponential backtracking on a long
18
+ flag run** (task `a7eb1a71`). Before this fix the Kube half of the
19
+ environment resolver (`kube_context_patterns`/`kube_namespace_patterns`)
20
+ only ever read the AMBIENT `~/.kube/config` current-context, so the
21
+ whole Kube signal only fired when the ambient kubeconfig happened to
22
+ already point at production; a second, independent defect compounded
23
+ it, since the shipped kubectl classifier pattern required `kubectl`
24
+ and `delete` adjacent, so a flag in between fell back to unclassified
25
+ entirely. `src/runtime/kubectl-target-parse.ts` (new) parses
26
+ `--context`/`--namespace`/`-n` (space, `=`, and, for `-n`, the
27
+ concatenated `-nVALUE` short-flag form) out of a `kubectl ...`
28
+ command, anchored at the command's own head token (including the
29
+ remainder after a leading `cd`/`VAR=value`/`git switch` prefix is
30
+ stripped) and stopping at a bare `--` end-of-flags marker, so a
31
+ same-named flag belonging to an unrelated program, a chained command,
32
+ or an exec'd program is never read as a kube signal.
33
+ `src/cli/policy/intercept.ts`'s `applyKubeTargetUpgrade` merges the
34
+ result into the resolver's `SignalInputs` UPGRADE-ONLY, mirroring the
35
+ existing branch-switch merge: command text can raise the resolved
36
+ environment toward production, never lower an already-resolved
37
+ ambient production. Review fix round 2 replaced an initial per-field
38
+ always-wins merge that measurably let an empty `--context=`, a value
39
+ smuggled past a `kubectl exec ... -- ...` separator, or a genuinely
40
+ different non-production `--context` downgrade an ambient-production
41
+ resolution to allow. The shipped kubectl classifier pattern
42
+ (`docs/examples/full-manifest.yaml` / `src/cli/init/templates.ts`) is
43
+ token-based and flag-tolerant between the two verbs without matching
44
+ `kubectl get`/`describe`; review fix round 2 also replaced an initial
45
+ flag-tolerant pattern shape that backtracked exponentially (measured
46
+ at multiple seconds on a 24 to 26 flag command) with a linear-time
47
+ form (measured well under 1ms at 40 flags), since this pattern ships
48
+ in every `harness init` manifest on a hot PreToolUse path. The
49
+ analogous `terraform destroy` pattern got the same flag-tolerance and
50
+ linear-time treatment for terraform's own `-chdir=DIR` global flag,
51
+ which sits in the identical position. See docs/risk-gate.md for the
52
+ conflict-priority rule, the full parsing scope, and a measured,
53
+ out-of-scope interaction this surfaced with the pre-existing "unknown
54
+ is not safe" rule (waived for this task; a read-only kubectl
55
+ classification floor is a separate follow-up decision).
56
+ ### Added
57
+
58
+ - **`harness doctor` detects trigger-boundary drift on shipped `bash_match`
59
+ triggers, hook- AND policy-level** (task `037cfb7c`, follow-up to
60
+ `adf037c1`). `checkTemplatePolicyDrift` already caught a shipped
61
+ `operator_only` policy that is entirely missing or downgraded, but said
62
+ nothing about a `bash_match` trigger that IS present under a shipped
63
+ name whose leading boundary-alternation group has fallen behind
64
+ `FULL_TEMPLATE`'s (e.g. still the pre-v0.43.0 `&&`-only shape while the
65
+ template has shipped `&` since `d834a065`, two minor releases ago);
66
+ `harness apply` never rewrites an already-materialized manifest's
67
+ trigger regexes, so this gap persists silently. New
68
+ `checkTriggerBoundaryDrift` (`src/cli/validate/checks.ts`) compares, by
69
+ exact name, every `hooks[].bash_match` and
70
+ `policies[].trigger.bash_match` entry `shippedBashMatchBoundaries()`
71
+ (`src/cli/init/templates.ts`, parsed from `FULL_TEMPLATE`, same
72
+ single-source-of-truth pattern as `shippedOperatorOnlyPolicyNames()`,
73
+ 16 entries today: 8 hooks + 8 policies) knows by name, comparing ONLY
74
+ the leading boundary group, never the rest of the regex (an operator's
75
+ own edits to the command-shape match are legitimate and not flagged).
76
+ The comparison is set-based, not string-equal: the boundary's
77
+ `|`-separated alternatives are split escape-aware and only an
78
+ alternative the template has that the installed regex is MISSING is
79
+ reported by name; a reordered or superset boundary is not a finding
80
+ (review round 2, fixing a false-positive an exact-string comparison
81
+ would have produced on any cosmetic reordering or widening). An
82
+ installed `bash_match` under a shipped name with no recognizable
83
+ boundary group at all is its own finding (review round 2; the initial
84
+ cut silently produced zero findings for that case). Each finding is an
85
+ ERROR (doctor's `errorCount`, same as the missing-policy case: a
86
+ missing boundary alternative is a real, measured gate bypass, not
87
+ cosmetic drift; reproduced against a real operator manifest 2026-08-25
88
+ via `harness policy intercept`, where `sleep 0 & gh pr merge 1` passed
89
+ with no deny on the unmigrated manifest, 10 of the 16 shipped triggers
90
+ affected, and was blocked once the boundary was widened to include
91
+ `&`), naming the entry, its actual boundary, the template's boundary,
92
+ the specific missing alternative(s), and the rehydration path:
93
+ `harness init --template full --config /tmp/harness-full.yaml` (a
94
+ throwaway `--config` path, not `--template full --force` against the
95
+ live manifest: `init` resolves its target from `--config` or the home
96
+ directory, never `cwd`, so there is no "scratch dir" fallback, and
97
+ `--force` against the live manifest would overwrite it wholesale;
98
+ review round 2 caught the original wording's wrong remediation
99
+ command). Same deliberate opt-out channel as `adf037c1`:
100
+ `doctor.ignore_template_drift: [<hook-or-policy-name>, ...]` silences
101
+ only the report line, never enforcement; `checkTemplatePolicyDrift`'s
102
+ stale-opt-out warning now also recognises a valid trigger-boundary name
103
+ so a shared opt-out entry is not double-flagged as stale by the other
104
+ check. `buildTriggerBoundaryDrift` (`src/cli/doctor/index.ts`)
105
+ partitions diagnostics by severity like `buildTemplateDrift` does
106
+ (review round 2: a plain message-map left `severity: "error"` inert,
107
+ undetected by the initial test suite). New section
108
+ `triggerBoundaryDrift` in `DoctorReport` / `format.ts` ("Trigger
109
+ boundary drift (shipped bash_match triggers)"). Docs:
110
+ `docs/okf/pause-vs-gate-kill-switch.md`'s "Fixed in v0.43.0" and new
111
+ "Trigger-boundary drift detection" sections point at this check and
112
+ the corrected `--config` rehydration command. Tests:
113
+ `tests/cli/doctor-trigger-boundary-drift.test.ts` (naming + the
114
+ corrected rehydration path, both negative controls including a
115
+ fixed-point pin on `shippedBashMatchBoundaries()`'s 16 entries and
116
+ their literal boundary, the ignore opt-out verified against the
117
+ trigger matcher directly rather than by re-reading the YAML, the
118
+ fix/revert mutation probe, a direct severity assertion on every
119
+ diagnostic, reordered/superset boundaries producing zero findings, a
120
+ missing-alternative finding naming the missing alternative, and the
121
+ no-boundary-group finding).
122
+
123
+ ### Fixed
124
+
125
+ - **Trigger-boundary drift (task 037cfb7c), review round 3: a zero-overlap
126
+ leading group is no longer misreported as "missing" every template
127
+ alternative.** A shipped-named `bash_match` whose leading group is
128
+ syntactically a valid parenthesized alternation but shares NO
129
+ alternative with the shipped boundary (e.g. `(gh|git)\s+pr merge\b`,
130
+ where the group serves an unrelated command-shape purpose) now routes
131
+ to the same "no recognizable boundary" wording the syntactically-absent
132
+ case already used, instead of listing every one of the template's
133
+ alternatives as individually missing. New shared
134
+ `noRecognizableBoundaryMessage` helper in `src/cli/validate/checks.ts`
135
+ covers both cases. `TriggerBoundaryDriftSection` gained a `warnings`
136
+ field mirroring `TemplateDriftSection`, threaded through `format.ts`
137
+ and `countDiagnostics`'s `warningCount`, so a future non-error
138
+ diagnostic from `checkTriggerBoundaryDrift` would surface instead of
139
+ being silently dropped; `buildTemplateDrift` and
140
+ `buildTriggerBoundaryDrift` (`src/cli/doctor/index.ts`) now share a
141
+ `partitionDiagnosticsBySeverity` helper instead of duplicating the same
142
+ filter/map body, which also resolved a new duplication-pin hit
143
+ (`check:duplication` briefly went 109 to 110 on the byte-identical
144
+ bodies before the extraction). Two mutation-probe-driven test gaps
145
+ closed in `tests/cli/doctor-trigger-boundary-drift.test.ts`: a
146
+ `.slice(0, -1)`-shaped bug that would drop the shipped boundary's
147
+ trailing `\(` alternative from comparison, and a naive (escape-unaware)
148
+ `|`-split that would decompose the shipped boundary's `\|` alternative
149
+ into two spurious tokens; both are now named test cases, verified red
150
+ against the mutated implementation and green against the fix.
151
+
152
+ ## [0.48.0] - 2026-08-25
153
+
154
+ ### Fixed
155
+
156
+ - **Codex adapter pause parity: `harness pack hook codex-user-prompt-submit`
157
+ and `harness pack hook codex-stop` now honour an active pause sentinel,
158
+ and the UserPromptSubmit notification-turn heuristic is fail-open**
159
+ (tasks `63fefe3a` and `1432e053`). Unlike every other pack hook, these
160
+ two never called `checkHookPause`: an active, unexpired `harness pause`
161
+ silenced every PreToolUse/PostToolUse gate but kept the full
162
+ Understanding Gate instruction block injecting and kept persisting
163
+ Understanding Report captures under `.understanding-gate/reports/`
164
+ during a paused window. Both hooks now check the sentinel first, before
165
+ manifest load, the same ordering as the other Codex hooks; all four
166
+ `hook-codex-*.ts` files import `checkHookPause`, the module header of
167
+ `src/cli/pack/hook-bootstrap.ts` lists no "no pause check" exception any
168
+ more, and a source-grep test pins that the exception list cannot grow
169
+ back. Second change in the UserPromptSubmit hook: a first cut suppressed
170
+ injection whenever the stdin envelope carried no `prompt` field, on the
171
+ assumption that a missing `prompt` means a notification turn. An advisor
172
+ review found this unverified against a real Codex payload (the generated
173
+ `config.toml` header documents the wire shape as
174
+ `{ session_id?, tool_name?, raw_input?, event? }`, with no `prompt`
175
+ field, and every suppression test supplied `prompt` itself), so a real
176
+ envelope without that field would have gone permanently, silently dark.
177
+ `hasRealUserPrompt` therefore fails OPEN to inject: it only suppresses
178
+ when a recognised prompt-carrying field (`prompt`, `text`, `input`,
179
+ `message`, `user_prompt`, `user_input`) is positively present and empty;
180
+ a missing field, unparsable stdin, or an unrecognised envelope shape all
181
+ inject, as before. Scope note: the incident task `63fefe3a` started from
182
+ (observed repeatedly in internal dogfooding) was reported against the
183
+ Claude Code adapter, whose hooks live in the separate
184
+ `@lannguyensi/understanding-gate` npm package and were fixed there in
185
+ its 0.5.0. This entry is Codex-adapter parity only and does not claim to
186
+ fix the Claude-side behaviour. **Open risk, unchanged:** the alias field
187
+ names beyond `prompt` are a reasoned guess, not verified against real
188
+ Codex traffic; that suppression path may in practice never fire.
189
+ - **Fix round on the above (task `1432e053`): `hasRealUserPrompt` now
190
+ decides across the entire alias set, not just the first alias in list
191
+ order.** The previous cut returned as soon as it hit the first
192
+ alias present with a string value, so an envelope carrying an empty
193
+ `prompt` alongside a non-empty `text` (`{"prompt":"","text":"real
194
+ operator text"}`) suppressed injection even though real operator text
195
+ was present under a later alias. It now inspects every recognised
196
+ alias, injects if any is non-empty after trimming, and only suppresses
197
+ when at least one alias is present and every present string-valued
198
+ alias is empty.
199
+ - **`harness doctor` now probes the `min_version` floor on
200
+ policy-pack-EXPANDED hooks, not just `manifest.hooks[]`** (task
201
+ `ab634898`). This gap predates 0.47.0: `checkHooks` walked
202
+ `manifest.hooks[]` only, so any hook a builtin pack contributes at
203
+ apply time never got its declared `min_version` + `version_command`
204
+ probed, and a below-floor install produced a clean doctor report.
205
+ 0.47.0's claim that raising `understanding-before-execution`'s
206
+ `min_version` to 0.5.0 "turns [a stale gate] into a `harness doctor`
207
+ finding" repeated an older, never-true claim already made about the
208
+ same pack's 0.4.0 floor (docs/policy-packs/understanding-before-execution.md);
209
+ both only hold from this version onward. A new "Policy-pack hooks"
210
+ section runs the same version probe already used for manifest-declared
211
+ hooks against `expandPolicyPacks`'s output (always against the
212
+ `claude-code` default runtime, independent of `--target`, which
213
+ additionally evaluates a harness-side adapter and is not a statement
214
+ about which runtime is installed), deduped per distinct
215
+ `version_command` so a probe used by more than one hook spawns once.
216
+ Each gap reports `kind` (`below_floor` / `probe_failed` /
217
+ `parse_failed`), `actualVersion`, and `versionCommand`, mirroring the
218
+ sibling pack-level `PolicyPackVersionGap` shape; the renderer prints
219
+ the "runs in degraded mode below its declared min_version" line only
220
+ for `kind: "below_floor"`, and its own prose per kind otherwise, since
221
+ `probe_failed` / `parse_failed` have no known installed version.
222
+ Warn-not-error, matching the manifest-hook and pack-level floors; exit
223
+ code is unaffected.
224
+
10
225
  ## [0.47.0] - 2026-08-25
11
226
 
12
227
  ### Added
@@ -158,6 +158,34 @@ function formatHooksSection(report) {
158
158
  out.push(` (no hooks declared)`);
159
159
  return out;
160
160
  }
161
+ // Policy-pack hooks section (task ab634898): the hook-level `min_version`
162
+ // floor on hooks a builtin policy pack contributes (understanding-gate's
163
+ // UserPromptSubmit/Stop hooks, floored at 0.5.0, are the motivating
164
+ // case). Distinct from the "Hooks" section above (which only walks
165
+ // `manifest.hooks[]`, never the pack-expanded ones) and from "Policy
166
+ // Packs" below (the pack-LEVEL `policy_packs[].min_version` floor).
167
+ // Stays silent when there is nothing to report, same convention as
168
+ // "Policy Packs".
169
+ function formatPolicyPackHookVersionsSection(report) {
170
+ if (report.policyPackHookVersions.length === 0)
171
+ return [];
172
+ const out = ["", "Policy-pack hooks"];
173
+ for (const gap of report.policyPackHookVersions) {
174
+ out.push(` ⚠ ${gap.name}.min_version ${gap.message}`);
175
+ if (gap.kind === "below_floor") {
176
+ out.push(` this pack-contributed hook runs in degraded mode below its declared min_version ${gap.declaredMinVersion}. Upgrade the package-side bin.`);
177
+ }
178
+ else if (gap.kind === "probe_failed") {
179
+ const bin = gap.versionCommand[0] ?? "the probe binary";
180
+ out.push(` ${bin} is not on PATH, failed, or does not support --version (declared floor ${gap.declaredMinVersion}).`);
181
+ }
182
+ else {
183
+ const bin = gap.versionCommand[0] ?? "the probe binary";
184
+ out.push(` the probe ran but its output did not contain a version for ${bin} (declared floor ${gap.declaredMinVersion}).`);
185
+ }
186
+ }
187
+ return out;
188
+ }
161
189
  function formatPoliciesSection(report) {
162
190
  const out = ["", "Policies"];
163
191
  for (const p of report.policies) {
@@ -274,6 +302,22 @@ function formatTemplateDriftSection(report) {
274
302
  out.push(` ⚠ ${w}`);
275
303
  return out;
276
304
  }
305
+ // Trigger-boundary drift section (task 037cfb7c): shipped-by-name
306
+ // bash_match triggers whose boundary alternation has fallen behind
307
+ // FULL_TEMPLATE's. Render only when something is stale, a caught-up
308
+ // manifest stays silent, like the template-drift section immediately
309
+ // above.
310
+ function formatTriggerBoundaryDriftSection(report) {
311
+ const { errors, warnings } = report.triggerBoundaryDrift;
312
+ if (errors.length === 0 && warnings.length === 0)
313
+ return [];
314
+ const out = ["", "Trigger boundary drift (shipped bash_match triggers)"];
315
+ for (const m of errors)
316
+ out.push(` ✗ ${m}`);
317
+ for (const w of warnings)
318
+ out.push(` ⚠ ${w}`);
319
+ return out;
320
+ }
277
321
  // Hook-budget-vs-ledger-timeout margin section (task d20a7e0c): blocking,
278
322
  // ledger-consulting hooks whose budget_ms cannot clear the derived
279
323
  // worst-case ledger round-trip. Render only when something is under-
@@ -441,11 +485,13 @@ export function format(report) {
441
485
  lines.push(...formatToolsSection(report));
442
486
  lines.push(...formatMemorySection(report));
443
487
  lines.push(...formatHooksSection(report));
488
+ lines.push(...formatPolicyPackHookVersionsSection(report));
444
489
  lines.push(...formatPoliciesSection(report));
445
490
  lines.push(...formatPolicyPacksSection(report));
446
491
  lines.push(...formatWorkflowsSection(report));
447
492
  lines.push(...formatRiskGateSection(report));
448
493
  lines.push(...formatTemplateDriftSection(report));
494
+ lines.push(...formatTriggerBoundaryDriftSection(report));
449
495
  lines.push(...formatHookBudgetLedgerMarginSection(report));
450
496
  lines.push(...formatGroundingSection(report));
451
497
  lines.push(...formatClaudeMcpSection(report));
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/cli/doctor/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/cli/doctor/format.ts"],"names":[],"mappings":"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"}
@@ -114,6 +114,16 @@ export interface CheckBinResolutionOptions {
114
114
  export declare function checkBinResolution(manifest: Manifest, opts?: CheckBinResolutionOptions): Promise<BinResolutionReport>;
115
115
  /** Render `checkBinResolution`'s issues as human-readable lines for the `init` tail. */
116
116
  export declare function formatBinResolutionIssues(report: BinResolutionReport): string[];
117
+ /**
118
+ * Wraps a version probe with a per-full-argv cache, keyed on
119
+ * `JSON.stringify(cmd)` so two commands sharing only `cmd[0]` (e.g.
120
+ * `["understanding-gate", "--version"]` vs. `["understanding-gate",
121
+ * "--check"]`) are never conflated into the same cache slot; only a
122
+ * byte-identical argv array is deduped. Exported standalone (task
123
+ * ab634898) so this caching contract has its own focused
124
+ * unit test independent of any particular pack's hook shape.
125
+ */
126
+ export declare function memoizeVersionProbe(probe: (cmd: readonly string[]) => string | null): (cmd: readonly string[]) => string | null;
117
127
  /**
118
128
  * Declared-but-not-live policy pack check. `expandPolicyPacks` silently
119
129
  * skips a pack whose `source:` token is unrecognised or whose builtin
@@ -8,11 +8,12 @@ import { RealMcpProbe, probeAll, } from "../../probes/mcp.js";
8
8
  import { EVIDENCE_LEDGER_DB_ENV, GROUNDING_MCP_SERVER_NAME, } from "../apply/generate-settings.js";
9
9
  import { parsePackSource } from "../../policy-packs/source.js";
10
10
  import { resolveBuiltin } from "../../policy-packs/registry.js";
11
+ import { expandPolicyPacks } from "../../policy-packs/index.js";
11
12
  import { checkPolicyPackConfigs } from "../../policy-packs/config-check.js";
12
13
  import { checkPolicyPackVersions } from "../../policy-packs/version-check.js";
13
14
  import { checkPolicyPackUxDrift } from "../../policy-packs/ux-drift-check.js";
14
15
  import { DEFAULT_RUNTIME } from "../../policy-packs/runtime.js";
15
- import { checkHookBudgetLedgerMargin, checkPolicyRiskWithoutEnvScope, checkSolutionAcceptanceKnobIgnored, checkSolutionAcceptanceProducer, checkTemplatePolicyDrift, createDefaultGitIgnoreProbe, } from "../validate/checks.js";
16
+ import { checkHookBudgetLedgerMargin, checkPolicyRiskWithoutEnvScope, checkSolutionAcceptanceKnobIgnored, checkSolutionAcceptanceProducer, checkTemplatePolicyDrift, checkTriggerBoundaryDrift, createDefaultGitIgnoreProbe, } from "../validate/checks.js";
16
17
  import { loadManifest } from "../loader.js";
17
18
  import { countCodexDiagnostics, findOnPath, runCodexTargetChecks, } from "./codex.js";
18
19
  import { countOpencodeDiagnostics, runOpencodeTargetChecks, } from "./opencode.js";
@@ -289,6 +290,8 @@ function checkHookVersion(hook, versionProbe) {
289
290
  if (stdout === null) {
290
291
  return {
291
292
  status: "warn",
293
+ kind: "probe_failed",
294
+ actualVersion: null,
292
295
  message: `version probe failed for ${hook.version_command.join(" ")}`,
293
296
  };
294
297
  }
@@ -296,15 +299,99 @@ function checkHookVersion(hook, versionProbe) {
296
299
  if (!m || !m[1]) {
297
300
  return {
298
301
  status: "warn",
302
+ kind: "parse_failed",
303
+ actualVersion: null,
299
304
  message: `could not parse a version from "${stdout.trim()}"`,
300
305
  };
301
306
  }
302
307
  const actual = m[1];
303
308
  const cmp = compareVersions(actual, hook.min_version);
304
309
  return cmp < 0
305
- ? { status: "warn", message: `outdated: installed v${actual} < required ${hook.min_version}` }
310
+ ? {
311
+ status: "warn",
312
+ kind: "below_floor",
313
+ actualVersion: actual,
314
+ message: `outdated: installed v${actual} < required ${hook.min_version}`,
315
+ }
306
316
  : { status: "ok", message: `v${actual} ≥ ${hook.min_version}` };
307
317
  }
318
+ /**
319
+ * Wraps a version probe with a per-full-argv cache, keyed on
320
+ * `JSON.stringify(cmd)` so two commands sharing only `cmd[0]` (e.g.
321
+ * `["understanding-gate", "--version"]` vs. `["understanding-gate",
322
+ * "--check"]`) are never conflated into the same cache slot; only a
323
+ * byte-identical argv array is deduped. Exported standalone (task
324
+ * ab634898) so this caching contract has its own focused
325
+ * unit test independent of any particular pack's hook shape.
326
+ */
327
+ export function memoizeVersionProbe(probe) {
328
+ const cache = new Map();
329
+ return (cmd) => {
330
+ const key = JSON.stringify(cmd);
331
+ if (!cache.has(key))
332
+ cache.set(key, probe(cmd));
333
+ return cache.get(key) ?? null;
334
+ };
335
+ }
336
+ /**
337
+ * Hook-level `min_version` floor on policy-pack-expanded hooks (task
338
+ * ab634898). `checkHooks` above only walks `manifest.hooks[]`, but the
339
+ * hooks Claude Code actually runs also include whatever
340
+ * `expandPolicyPacks` contributes, e.g. understanding-before-execution's
341
+ * UserPromptSubmit/Stop hooks, floored at understanding-gate 0.5.0
342
+ * (see `src/policy-packs/builtin/understanding-before-execution.ts`).
343
+ * Those pack-expanded hooks never reached `checkHookVersion`, so an
344
+ * operator on an older understanding-gate saw a clean doctor report
345
+ * even though the pause wiring (or the Understanding Report's 10th
346
+ * section) was silently degraded below the declared floor.
347
+ *
348
+ * Reuses `checkHookVersion` verbatim so the warning wording matches the
349
+ * manifest-hook case exactly. `versionProbe` is wrapped with a
350
+ * per-command cache so two hooks that share one `version_command` (the
351
+ * common case: user-prompt-submit and stop both probe
352
+ * `understanding-gate --version`) spawn the underlying binary once, not
353
+ * twice. Only below-floor / probe-failed / parse-failed results are
354
+ * returned; a hook at or above its floor produces nothing, mirroring
355
+ * the pack-level floor's "green ones produce nothing" contract
356
+ * (`checkPolicyPackVersions`). Always warn, never error: the pack still
357
+ * runs in degraded mode rather than failing outright.
358
+ *
359
+ * Always expands against `DEFAULT_RUNTIME` ("claude-code"), never
360
+ * `opts.target`: `--target codex` / `--target opencode` additionally
361
+ * evaluate the harness-side adapter health for that runtime, they do
362
+ * not change which runtime is actually installed and running the
363
+ * hooks. Matches the sibling pack-level check's `resolveBuiltin(pack,
364
+ * DEFAULT_RUNTIME)` further below (task ab634898:
365
+ * keying this on `--target` produced a below-floor install that showed
366
+ * no warning under `--target codex` and a spurious one under
367
+ * `--target opencode`, where the pack never wires in the first place).
368
+ */
369
+ function checkPolicyPackHookVersions(manifest, versionProbe) {
370
+ // Always expands against DEFAULT_RUNTIME ("claude-code"), not
371
+ // `opts.target`: `--target` additionally evaluates the harness-side
372
+ // adapter health for that runtime (see checkPolicyPackHookVersions'
373
+ // header comment), it does not change which runtime is actually
374
+ // installed. Matches the sibling pack-level check's
375
+ // `resolveBuiltin(pack, DEFAULT_RUNTIME)` a few hundred lines below.
376
+ const expansion = expandPolicyPacks(manifest, DEFAULT_RUNTIME);
377
+ const dedupedProbe = memoizeVersionProbe(versionProbe);
378
+ const gaps = [];
379
+ for (const hook of expansion.hooks) {
380
+ const version = checkHookVersion(hook, dedupedProbe);
381
+ if (version && version.status === "warn" && hook.min_version) {
382
+ gaps.push({
383
+ name: hook.name,
384
+ event: hook.event,
385
+ declaredMinVersion: hook.min_version,
386
+ kind: version.kind,
387
+ actualVersion: version.actualVersion ?? null,
388
+ versionCommand: hook.version_command ?? [],
389
+ message: version.message,
390
+ });
391
+ }
392
+ }
393
+ return gaps;
394
+ }
308
395
  function checkHooks(manifest, home, opts) {
309
396
  const versionProbe = opts.versionProbe ?? (() => null);
310
397
  return manifest.hooks.map((hook) => {
@@ -554,13 +641,37 @@ function buildRiskGate(manifest) {
554
641
  * dogfood/CI run should fail until the manifest is caught up or the name
555
642
  * is explicitly acknowledged under doctor.ignore_template_drift.
556
643
  */
557
- function buildTemplateDrift(manifest) {
558
- const diags = checkTemplatePolicyDrift(manifest);
644
+ /**
645
+ * Splits a `Diagnostic[]` into the `{ errors, warnings }` message-array
646
+ * shape every drift-style doctor section uses (task 037cfb7c review round
647
+ * 3: `buildTemplateDrift` and `buildTriggerBoundaryDrift` had become
648
+ * byte-identical bodies around two different `checkX(manifest)` calls;
649
+ * this is the one place that split lives now).
650
+ */
651
+ function partitionDiagnosticsBySeverity(diags) {
559
652
  return {
560
653
  errors: diags.filter((d) => d.severity === "error").map((d) => d.message),
561
654
  warnings: diags.filter((d) => d.severity === "warning").map((d) => d.message),
562
655
  };
563
656
  }
657
+ function buildTemplateDrift(manifest) {
658
+ return partitionDiagnosticsBySeverity(checkTemplatePolicyDrift(manifest));
659
+ }
660
+ /**
661
+ * Trigger-boundary drift (task 037cfb7c): shipped-by-name `bash_match`
662
+ * triggers (hook- and policy-level) missing a boundary alternative the
663
+ * template has, or missing a boundary group entirely. Doctor-only, like
664
+ * `checkTemplatePolicyDrift` immediately above: `checkTriggerBoundaryDrift`
665
+ * is deliberately not wired into validate's `runAssetChecks`, so
666
+ * `harness validate` does not run it (only `harness doctor` does). Uses
667
+ * the same `partitionDiagnosticsBySeverity` split as `buildTemplateDrift`
668
+ * above: `checkTriggerBoundaryDrift` only emits `error`-severity
669
+ * diagnostics today, but a future non-`error` diagnostic now surfaces in
670
+ * `warnings` instead of being silently dropped.
671
+ */
672
+ function buildTriggerBoundaryDrift(manifest) {
673
+ return partitionDiagnosticsBySeverity(checkTriggerBoundaryDrift(manifest));
674
+ }
564
675
  /**
565
676
  * Hook-budget-vs-ledger-timeout margin (task d20a7e0c). Delegates to the
566
677
  * shared validate check so `harness doctor` and `harness validate` stay
@@ -695,6 +806,10 @@ function countDiagnostics(report) {
695
806
  // release are lost. Parallel to the hook-level version probe's
696
807
  // `status: warn`.
697
808
  warningCount += report.policyPacks.versionGaps.length;
809
+ // Hook-level min_version gaps on pack-expanded hooks (task ab634898):
810
+ // always warn-not-error, mirroring both the pack-level floor above
811
+ // and the manifest-declared hook floor in the `report.hooks` loop.
812
+ warningCount += report.policyPackHookVersions.length;
698
813
  // Ux/producers drift is always warn: the pack still functions with the
699
814
  // stale wording, the operator is just missing a wording improvement.
700
815
  // Fix is opt-in (`harness pack reseed <name>`), so this never escalates
@@ -712,6 +827,14 @@ function countDiagnostics(report) {
712
827
  // entries are warn-only (task adf037c1).
713
828
  errorCount += report.templateDrift.errors.length;
714
829
  warningCount += report.templateDrift.warnings.length;
830
+ // Trigger-boundary drift (task 037cfb7c): every entry is a measured,
831
+ // exploitable gate bypass (see checkTriggerBoundaryDrift's header),
832
+ // mapped to errorCount, mirroring templateDrift.errors immediately
833
+ // above; warnings mirrors templateDrift.warnings the same way (no
834
+ // warning-severity diagnostic exists today, but the pathway is wired
835
+ // so one would count instead of vanishing).
836
+ errorCount += report.triggerBoundaryDrift.errors.length;
837
+ warningCount += report.triggerBoundaryDrift.warnings.length;
715
838
  // Hook-budget-vs-ledger-timeout margin (task d20a7e0c): every entry is
716
839
  // a real fail-open gap, mirroring templateDrift.errors immediately
717
840
  // above.
@@ -835,9 +958,11 @@ export async function doctor(opts = {}) {
835
958
  const policies = buildPolicies(manifest);
836
959
  const policyPacksVersionProbe = opts.versionProbe ?? (() => null);
837
960
  const policyPacks = buildPolicyPacks(manifest, policyPacksVersionProbe, resolveGitIgnoreProbe(opts));
961
+ const policyPackHookVersions = checkPolicyPackHookVersions(manifest, policyPacksVersionProbe);
838
962
  const workflows = buildWorkflows(manifest);
839
963
  const riskGate = buildRiskGate(manifest);
840
964
  const templateDrift = buildTemplateDrift(manifest);
965
+ const triggerBoundaryDrift = buildTriggerBoundaryDrift(manifest);
841
966
  const hookBudgetLedgerMargin = buildHookBudgetLedgerMargin(manifest);
842
967
  const groundingServer = manifest.tools.mcp.find((m) => m.name === GROUNDING_MCP_SERVER_NAME && m.enabled !== false) ?? null;
843
968
  const grounding = groundingServer !== null
@@ -898,9 +1023,11 @@ export async function doctor(opts = {}) {
898
1023
  hooks,
899
1024
  policies,
900
1025
  policyPacks,
1026
+ policyPackHookVersions,
901
1027
  workflows,
902
1028
  riskGate,
903
1029
  templateDrift,
1030
+ triggerBoundaryDrift,
904
1031
  hookBudgetLedgerMargin,
905
1032
  ...(grounding !== undefined ? { grounding } : {}),
906
1033
  ...(claudeMcp !== undefined ? { claudeMcp } : {}),