@dzhechkov/harness-core 0.5.0 → 0.5.2

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 (96) hide show
  1. package/.dz-manifest.json +339 -75
  2. package/README.md +47 -4
  3. package/dist/codex-hooks-assets.d.ts.map +1 -1
  4. package/dist/codex-hooks-assets.js +39 -2
  5. package/dist/codex-hooks-assets.js.map +1 -1
  6. package/dist/codex-hooks-verify.d.ts +23 -2
  7. package/dist/codex-hooks-verify.d.ts.map +1 -1
  8. package/dist/codex-hooks-verify.js +29 -0
  9. package/dist/codex-hooks-verify.js.map +1 -1
  10. package/dist/codex-hooks.d.ts +90 -7
  11. package/dist/codex-hooks.d.ts.map +1 -1
  12. package/dist/codex-hooks.js +171 -21
  13. package/dist/codex-hooks.js.map +1 -1
  14. package/dist/feature-adr-routing.d.ts +22 -0
  15. package/dist/feature-adr-routing.d.ts.map +1 -1
  16. package/dist/feature-adr-routing.js +45 -0
  17. package/dist/feature-adr-routing.js.map +1 -1
  18. package/dist/index.d.ts +11 -4
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +17 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/loop-blobs.generated.d.ts +1 -1
  23. package/dist/loop-blobs.generated.d.ts.map +1 -1
  24. package/dist/loop-blobs.generated.js +12 -3
  25. package/dist/loop-blobs.generated.js.map +1 -1
  26. package/dist/loop-plan.d.ts +70 -0
  27. package/dist/loop-plan.d.ts.map +1 -1
  28. package/dist/loop-plan.js +103 -0
  29. package/dist/loop-plan.js.map +1 -1
  30. package/dist/loop-render.d.ts.map +1 -1
  31. package/dist/loop-render.js +38 -130
  32. package/dist/loop-render.js.map +1 -1
  33. package/dist/loop-run-semantics.d.ts +130 -0
  34. package/dist/loop-run-semantics.d.ts.map +1 -0
  35. package/dist/loop-run-semantics.js +257 -0
  36. package/dist/loop-run-semantics.js.map +1 -0
  37. package/dist/loop-trace.d.ts +106 -5
  38. package/dist/loop-trace.d.ts.map +1 -1
  39. package/dist/loop-trace.js +151 -18
  40. package/dist/loop-trace.js.map +1 -1
  41. package/dist/managed-hooks.d.ts +10 -0
  42. package/dist/managed-hooks.d.ts.map +1 -1
  43. package/dist/managed-hooks.js +17 -5
  44. package/dist/managed-hooks.js.map +1 -1
  45. package/dist/named-lock.d.ts +57 -0
  46. package/dist/named-lock.d.ts.map +1 -0
  47. package/dist/named-lock.js +247 -0
  48. package/dist/named-lock.js.map +1 -0
  49. package/dist/operations.d.ts +81 -5
  50. package/dist/operations.d.ts.map +1 -1
  51. package/dist/operations.js +356 -38
  52. package/dist/operations.js.map +1 -1
  53. package/dist/parity.d.ts +70 -2
  54. package/dist/parity.d.ts.map +1 -1
  55. package/dist/parity.js +133 -2
  56. package/dist/parity.js.map +1 -1
  57. package/dist/qe-bridge.d.ts +291 -0
  58. package/dist/qe-bridge.d.ts.map +1 -0
  59. package/dist/qe-bridge.js +538 -0
  60. package/dist/qe-bridge.js.map +1 -0
  61. package/dist/score.d.ts.map +1 -1
  62. package/dist/score.js +43 -9
  63. package/dist/score.js.map +1 -1
  64. package/dist/trace-corroborate.d.ts +48 -0
  65. package/dist/trace-corroborate.d.ts.map +1 -0
  66. package/dist/trace-corroborate.js +172 -0
  67. package/dist/trace-corroborate.js.map +1 -0
  68. package/dist/workflow-run-dispatch.d.ts +230 -0
  69. package/dist/workflow-run-dispatch.d.ts.map +1 -0
  70. package/dist/workflow-run-dispatch.js +363 -0
  71. package/dist/workflow-run-dispatch.js.map +1 -0
  72. package/dist/workflow-run.d.ts +513 -0
  73. package/dist/workflow-run.d.ts.map +1 -0
  74. package/dist/workflow-run.js +1377 -0
  75. package/dist/workflow-run.js.map +1 -0
  76. package/package.json +2 -2
  77. package/sbom.json +740 -80
  78. package/src/codex-hooks-assets.ts +39 -2
  79. package/src/codex-hooks-verify.ts +55 -2
  80. package/src/codex-hooks.ts +172 -20
  81. package/src/feature-adr-routing.ts +55 -0
  82. package/src/index.ts +46 -1
  83. package/src/loop-blobs.generated.ts +12 -3
  84. package/src/loop-plan.ts +185 -0
  85. package/src/loop-render.ts +38 -128
  86. package/src/loop-run-semantics.ts +278 -0
  87. package/src/loop-trace.ts +207 -16
  88. package/src/managed-hooks.ts +26 -5
  89. package/src/named-lock.ts +277 -0
  90. package/src/operations.ts +441 -40
  91. package/src/parity.ts +177 -2
  92. package/src/qe-bridge.ts +737 -0
  93. package/src/score.ts +50 -9
  94. package/src/trace-corroborate.ts +205 -0
  95. package/src/workflow-run-dispatch.ts +459 -0
  96. package/src/workflow-run.ts +1773 -0
@@ -0,0 +1,291 @@
1
+ /**
2
+ * `dz qe-bridge` — the pure half of the reverse QE bridge (feature qe-bridge-claude, ADR-001).
3
+ *
4
+ * WHY THIS EXISTS. The cross-family QE rule ("the model that writes code must not self-review") is
5
+ * enforceable today in exactly one direction: a Claude driver dispatches `codex exec` to review
6
+ * Claude work. When CODEX hosts the run there is no vehicle for the mandatory Claude review —
7
+ * `buildReqeBrief` literally returns `codexCmdTemplate: null` for the claude branch
8
+ * (`reqe.ts:165-171`). This module turns the raw `claude -p` primitive into a Step-8-shaped review
9
+ * with a PARSEABLE signoff that the existing `dz reqe --done` settles unchanged.
10
+ *
11
+ * THE DOCTRINE, in three rules, each of which has scar tissue behind it:
12
+ *
13
+ * 1. PARSE-NEVER-SYNTHESIZE. Empty, gradeless, marker-less or JSON-less output is a FAILED call
14
+ * with a NAMED reason — never a clean review, never a synthesized `findings: []`. The deleted
15
+ * `{grade:'codex-review', gaps:[]}` stub is the canonical bug this rule exists to prevent.
16
+ * 2. LAST-ANCHORED, MULTI-CHANNEL AGREEMENT. Content under review flows INTO the prompt and comes
17
+ * back quoted, so an earlier planted verdict must lose to the genuine terminal one (the G-F1
18
+ * marker-injection lesson, `feature-adr-routing.ts:1522-1526`). Three channels — the LAST marker
19
+ * line, the LAST fenced signoff block, and `extractReportGrade` over the report body — must all
20
+ * EXIST and AGREE. This is not only an injection defence: MEASURED at T0 on this machine,
21
+ * `claude -p` prints a session-start hook banner on stdout BEFORE the answer, so first-match
22
+ * parsing reads host noise even with no adversary in the picture.
23
+ * 3. INGRESS DEFANG. Repo content is untrusted with respect to the verdict grammar: every extract
24
+ * is neutralised before embedding, so quoted content can never mint a verdict.
25
+ *
26
+ * IMPURE PLUMBING (spawn, timeouts, file writes) lives in `harness-cli`'s `cmdQeBridge`; everything
27
+ * here is pure and directly testable.
28
+ *
29
+ * DELIBERATELY NOT UNIFIED with `parseCodexGrade` (`feature-adr-routing.ts:1343-1347`, first-match,
30
+ * A–D): that parser answers a different threat model. The divergence is named in ADR-001 and is a
31
+ * candidate later refactor, not a blocker.
32
+ */
33
+ export declare const QE_BRIDGE_SCHEMA = "qe-bridge-signoff-1";
34
+ export declare const QE_BRIDGE_FAILURE_SCHEMA = "qe-bridge-failure-1";
35
+ /**
36
+ * Loud refusal ceiling for the assembled prompt. NOT a truncation budget: silently trimming the
37
+ * evidence would produce a review of something other than the change (the stance of
38
+ * `feature-adr-routing.ts:1274-1285`). Sized for a real review, not a probe.
39
+ */
40
+ export declare const CLAUDE_BRIDGE_PROMPT_CEILING_CHARS = 200000;
41
+ /**
42
+ * Data-only default id order — the same policy as `KNOWN_CODEX`. An allowlist says a name is
43
+ * SPELLABLE; only the probe says it ANSWERS (MEASURED at T0: `--model no-such-model-xyz` exits 1).
44
+ * Ids outside this map are still usable via `--model`; this is the default search order.
45
+ */
46
+ export declare const KNOWN_CLAUDE: Record<string, 1>;
47
+ /** The terminal verdict grammar: `QE-BRIDGE-SIGNOFF grade=<A-F> findings=<n>`. */
48
+ export declare const BRIDGE_MARKER = "QE-BRIDGE-SIGNOFF";
49
+ /** The fenced block's info string. */
50
+ export declare const BRIDGE_FENCE_LABEL = "qe-bridge-signoff";
51
+ /** The boundary that closes an embedded extract in the prompt (defanged on ingress). */
52
+ export declare const BRIDGE_EXTRACT_END = "<<<END-EXTRACT>>>";
53
+ export type BridgeFamily = 'claude' | 'openai';
54
+ /**
55
+ * THE canonical model-spec → FAMILY mapper (feature dz-workflow-run, ADR-002 W20 / AM-17).
56
+ *
57
+ * Family is the load-bearing input of the cross-model rule: the family that WROTE the code may not
58
+ * be the family that reviews it. That rule is only as trustworthy as the mapping behind it, so
59
+ * there is exactly ONE mapping — `cmdQeBridge`'s `--coder-family` normalization and the loop
60
+ * runner's same-family comparison both call this function, and an agreement test pins them
61
+ * together over a representative spec list (ADR-002 Confirmation-2b). Two lookalike normalizations
62
+ * is how a codex-coded run comes to be reviewed by codex under a claude label.
63
+ *
64
+ * • `'codex'` (the bare alias) and every `codex*` / `gpt*` / `openai*` spec — including the
65
+ * routing forms `codex:<id>` and `codex:<id>:<effort>` — map to `'openai'`;
66
+ * • `opus` | `sonnet` | `haiku` | `fable` and every `claude*` spec map to `'claude'`;
67
+ * • null / empty / unrecognized maps to `null` — NOT to a default. An unroutable spec is a
68
+ * refusal the caller must make loudly (`plan-model-unroutable`, or `--default-family`), never a
69
+ * silent guess: guessing here would silently decide who is allowed to review.
70
+ *
71
+ * Case- and whitespace-insensitive; the domain is the SPEC string, not a provider API name.
72
+ *
73
+ * NOT related to `trainingPairFamily` (`feature-adr-checkpoints.ts`), whose `'claude' | 'codex'`
74
+ * domain is a recorded DATASET schema — a named pre-existing divergence, deliberately not migrated.
75
+ */
76
+ export declare function modelFamily(spec: string | null | undefined): BridgeFamily | null;
77
+ /**
78
+ * The CLOSED set of named non-successes. A closed set is testable; free text is not (the
79
+ * `parseLandingSignal` precedent, `feature-adr-routing.ts:1097-1108`). Every member is exercised by
80
+ * a test — see the taxonomy describe in `test/qe-bridge.test.ts`.
81
+ */
82
+ export type BridgeFailureReason = 'claude-not-found' | 'claude-not-logged-in' | 'probe-failed' | 'timeout' | 'exit-nonzero' | 'empty-output' | 'envelope-unparseable' | 'no-grade-marker' | 'marker-not-terminal' | 'no-signoff-json' | 'grade-mismatch' | 'ambiguous-grade' | 'findings-count-mismatch' | 'same-family-review-refused' | 'prompt-over-ceiling' | 'audit-write-failed' | 'report-write-failed';
83
+ /** Every member of the closed set, as DATA — so a test can drive the list instead of restating it
84
+ * (the round-1 taxonomy test was a hand-written map of strings, which proves nothing about
85
+ * reachability). */
86
+ export declare const BRIDGE_FAILURE_REASONS: readonly ["claude-not-found", "claude-not-logged-in", "probe-failed", "timeout", "exit-nonzero", "empty-output", "envelope-unparseable", "no-grade-marker", "marker-not-terminal", "no-signoff-json", "grade-mismatch", "ambiguous-grade", "findings-count-mismatch", "same-family-review-refused", "prompt-over-ceiling", "audit-write-failed", "report-write-failed"];
87
+ export interface BridgeFinding {
88
+ n: number;
89
+ severity: string;
90
+ title: string;
91
+ file?: string;
92
+ line?: number;
93
+ }
94
+ export interface BridgeSignoff {
95
+ schema: typeof QE_BRIDGE_SCHEMA;
96
+ slug: string;
97
+ /** A–F, agreed across all three channels. */
98
+ grade: string;
99
+ /** The PROBED id, not the requested one. */
100
+ gradedBy: {
101
+ family: 'claude';
102
+ model: string;
103
+ };
104
+ coderFamily: BridgeFamily;
105
+ /** From the JSON block ONLY; `[]` only when the reviewer wrote it. */
106
+ findings: BridgeFinding[];
107
+ promptSha256: string;
108
+ elapsedMs: number;
109
+ emittedAt: string;
110
+ }
111
+ /** Where each channel was found, for the audit bundle: an auditor can re-derive the verdict from
112
+ * the retained raw stdout without trusting this process's summary. */
113
+ export interface BridgeChannels {
114
+ /** Byte offset of the LAST signoff marker line inside the reviewer's result text. */
115
+ markerIndex: number;
116
+ /** Byte offset of the LAST fenced signoff block. */
117
+ fenceIndex: number;
118
+ /** Length of the reviewer's result text (the envelope payload, not raw stdout). */
119
+ resultChars: number;
120
+ /** Length of the raw stdout the envelope was extracted from. */
121
+ rawChars: number;
122
+ }
123
+ export interface BridgeParseOk {
124
+ ok: true;
125
+ signoff: BridgeSignoff;
126
+ reason: null;
127
+ detail: string;
128
+ channels: BridgeChannels;
129
+ }
130
+ export interface BridgeParseFail {
131
+ ok: false;
132
+ signoff: null;
133
+ reason: BridgeFailureReason;
134
+ detail: string;
135
+ channels?: undefined;
136
+ }
137
+ /** A discriminated union: there is no state in which `ok` is true and `signoff` is null, and none in
138
+ * which a failure carries no reason. The round-1 shape allowed both, which is how the CLI ended up
139
+ * with a `?? 'no-grade-marker'` fallback that could launder an unknown state into a named one. */
140
+ export type BridgeParse = BridgeParseOk | BridgeParseFail;
141
+ export declare function isSafeClaudeId(id: string): boolean;
142
+ /**
143
+ * ISOLATION (round-2 CRITICAL C1). The reviewer must judge the extracts WE send it, and nothing
144
+ * else. Without these flags `claude -p` runs as a fully customized session in whatever directory it
145
+ * was launched from: CLAUDE.md, skills, plugins, hooks, MCP servers and tools all load, and
146
+ * customization output reaches stdout AHEAD of the model's answer — MEASURED on this machine, four
147
+ * separate runs, and again in the before/after capture in `probe-results/c1-isolation-probe.txt`.
148
+ * A parser reading that stream cannot tell the model's verdict from a hook's.
149
+ *
150
+ * Every flag below was PROBED on the installed runtime before being used (`claude --help` lists
151
+ * them; a live `-p` call with the full set answered normally):
152
+ * --safe-mode disables ALL customizations — CLAUDE.md, skills, plugins, hooks, MCP,
153
+ * commands, agents, output styles. (Admin-managed POLICY settings still
154
+ * apply — the honest residue, stated in the SKILL doc.)
155
+ * --strict-mcp-config use only MCP servers from --mcp-config; we pass none, so: none.
156
+ * --tools '' the reviewer needs no tools: the extracts arrive on stdin.
157
+ * --no-session-persistence nothing is written into the isolated working directory.
158
+ * --output-format json the answer arrives as a STRUCTURED field, so text that never came from
159
+ * the model cannot be mistaken for its verdict.
160
+ * The CLI additionally runs both calls from an EMPTY temporary directory, so project-scoped
161
+ * discovery has nothing to discover.
162
+ */
163
+ export declare const CLAUDE_ISOLATION_ARGS: readonly string[];
164
+ /** Validated argv for the liveness probe; null when the id is unsafe. */
165
+ export declare function claudeProbeArgs(model: string): string[] | null;
166
+ /**
167
+ * Mirror of `interpretCodexProbe` (`feature-adr-routing.ts:1310-1313`): exit 0 AND a word-bounded
168
+ * `OK`. Substring, not equality — MEASURED at T0, this machine's `claude -p` prefixes a hook banner
169
+ * to stdout, so an equality check would call a live model dead.
170
+ */
171
+ export declare function interpretClaudeProbe(out: {
172
+ stdout: string;
173
+ exitCode: number;
174
+ }): boolean;
175
+ /**
176
+ * Validated argv for the review call. NO inline prompt: the prompt travels on stdin (MEASURED at
177
+ * T0 — `printf '…' | claude -p` answers with exit 0, so there is no ARG_MAX ceiling and no shell).
178
+ */
179
+ export declare function claudeReviewArgs(model: string): string[] | null;
180
+ export type ClaudeResultExtraction = {
181
+ ok: true;
182
+ text: string;
183
+ } | {
184
+ ok: false;
185
+ reason: BridgeFailureReason;
186
+ detail: string;
187
+ };
188
+ /**
189
+ * Pull the assistant's final text out of `--output-format json` stdout.
190
+ *
191
+ * LAST-anchored like every other channel: the envelope is located by scanning candidate JSON
192
+ * objects from the END of the stream, so anything a customization printed BEFORE it is structurally
193
+ * outside the reviewed text. MEASURED shape (2026-08-19, `claude -p --output-format json`):
194
+ * one object carrying `{"type":"result","subtype":"success","is_error":false,"result":"…"}`.
195
+ */
196
+ export declare function extractClaudeResult(stdout: string): ClaudeResultExtraction;
197
+ /**
198
+ * Neutralise the VERDICT GRAMMAR inside untrusted text before embedding it in the prompt.
199
+ *
200
+ * Three channels are defanged, because the verdict has three channels: the marker line, the fenced
201
+ * block's label, and a line-anchored `GRADE: <A-F>` verdict line. Defanging only the marker (the
202
+ * literal wording of SEC-3) would leave the third channel live — and the bridge's normal job is to
203
+ * review a feature whose `08_qe_report.md` CONTAINS a `GRADE:` line, so an echoed extract would
204
+ * routinely collide with the reviewer's own verdict and produce `ambiguous-grade`. This is a
205
+ * deliberate, documented extension of SEC-3 to the whole grammar, not a drift.
206
+ *
207
+ * Idempotent, and byte-identical on text that carries none of the grammar.
208
+ */
209
+ export declare function defangSignoffEchoes(text: string): string;
210
+ export interface NamedExtract {
211
+ label: string;
212
+ text: string;
213
+ }
214
+ export interface BridgePromptInput {
215
+ slug: string;
216
+ coderFamily: BridgeFamily;
217
+ allowSameFamily: boolean;
218
+ /** The change manifest, the ADR Confirmation section, named files — SCOPED, never a repo dump. */
219
+ extracts: readonly NamedExtract[];
220
+ }
221
+ /**
222
+ * The Step-8-shaped brief (the instruction list of `buildReqeBrief`, `reqe.ts:155-163`) plus the
223
+ * output grammar. Refuses same-family review and an over-ceiling prompt, each with its named
224
+ * reason — a refusal is a first-class result here, never a truncation or a shrug.
225
+ */
226
+ export declare function buildBridgePrompt(input: BridgePromptInput): {
227
+ ok: true;
228
+ prompt: string;
229
+ } | {
230
+ ok: false;
231
+ reason: BridgeFailureReason;
232
+ detail: string;
233
+ };
234
+ /**
235
+ * PARSE-NEVER-SYNTHESIZE. All three channels must exist and agree, LAST-anchored; every miss is a
236
+ * named reason and a null signoff.
237
+ */
238
+ export declare function parseBridgeOutput(raw: string | null | undefined, ctx: {
239
+ slug: string;
240
+ coderFamily: BridgeFamily;
241
+ model: string;
242
+ elapsedMs: number;
243
+ promptSha256: string;
244
+ emittedAt: string;
245
+ }): BridgeParse;
246
+ /**
247
+ * The AUDIT BUNDLE (round-2 M7). A record that only carries a conclusion asks the reader to trust
248
+ * the process that wrote it. These fields let someone else re-derive the verdict: which executable
249
+ * answered, whether it was an override, which prompt (by digest), where each channel was found in
250
+ * the retained raw stdout, which report path was requested, and whether that report actually landed.
251
+ */
252
+ export interface BridgeAudit {
253
+ /** Stable id for this run — the common key across the record, the raw stdout and the report. */
254
+ runId: string;
255
+ /** The executable actually spawned (the resolved path when it is a path). */
256
+ claudeBin: string;
257
+ /** True when the executable was NOT the plain `claude` on PATH — a loud provenance marker. */
258
+ binOverride: boolean;
259
+ /** The `--out` path the caller asked for, recorded even (especially) when nothing was written. */
260
+ requestedOut: string;
261
+ /** Did a report land at `requestedOut`? A failure record says `false` in as many words, instead
262
+ * of leaving "no report exists" as an inference from an absent file. */
263
+ reportWritten: boolean;
264
+ /** Where the raw reviewer stdout was retained, or null when there was none to retain. */
265
+ rawStdoutFile: string | null;
266
+ /** sha256 of the exact prompt sent, so the digest in the signoff can be recomputed. */
267
+ promptSha256: string | null;
268
+ channels?: BridgeChannels;
269
+ }
270
+ /**
271
+ * The failure record written to `.fa-state/qe-bridge/failed-<stamp>.json`. Deliberately carries NO
272
+ * grade field: a failed call has no verdict, and a record with a grade key would be one refactor
273
+ * away from being read as one.
274
+ */
275
+ export declare function buildBridgeFailureRecord(reason: BridgeFailureReason, detail: string, ctx: {
276
+ slug: string;
277
+ model: string | null;
278
+ emittedAt: string;
279
+ } & Partial<BridgeAudit>): object;
280
+ /** The success record: the parsed signoff PLUS the audit bundle that lets it be re-checked. */
281
+ export declare function buildBridgeSignoffRecord(signoff: BridgeSignoff, audit: BridgeAudit): object;
282
+ /**
283
+ * Render the human report (`08b_reqe_report.md` by default). Guaranteed to carry EXACTLY ONE
284
+ * line-anchored `GRADE: <X>` and ≥200 chars of substance, so `settleReqeDebt` (`reqe.ts:202-215`)
285
+ * accepts it — proved by a test that imports and EXECUTES that validator rather than assuming it.
286
+ *
287
+ * Every reviewer-supplied string goes through the defang on the way out: a finding titled
288
+ * "see GRADE: A above" would otherwise mint a second verdict line and make the report unsettleable.
289
+ */
290
+ export declare function renderBridgeReport(signoff: BridgeSignoff): string;
291
+ //# sourceMappingURL=qe-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qe-bridge.d.ts","sourceRoot":"","sources":["../src/qe-bridge.ts"],"names":[],"mappings":"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"}