@dzhechkov/harness-core 0.8.10 → 0.8.20
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/.dz-manifest.json +490 -170
- package/LICENSE +13 -0
- package/README.md +420 -6
- package/dist/agents-policy.d.ts +15 -1
- package/dist/agents-policy.d.ts.map +1 -1
- package/dist/agents-policy.js +27 -1
- package/dist/agents-policy.js.map +1 -1
- package/dist/amendment-trace.d.ts +72 -0
- package/dist/amendment-trace.d.ts.map +1 -1
- package/dist/amendment-trace.js +385 -17
- package/dist/amendment-trace.js.map +1 -1
- package/dist/backlog-public.d.ts +153 -0
- package/dist/backlog-public.d.ts.map +1 -0
- package/dist/backlog-public.js +415 -0
- package/dist/backlog-public.js.map +1 -0
- package/dist/backlog-transitions.d.ts +48 -0
- package/dist/backlog-transitions.d.ts.map +1 -0
- package/dist/backlog-transitions.js +64 -0
- package/dist/backlog-transitions.js.map +1 -0
- package/dist/backlog.d.ts.map +1 -1
- package/dist/backlog.js +13 -0
- package/dist/backlog.js.map +1 -1
- package/dist/claim-check.d.ts.map +1 -1
- package/dist/claim-check.js +24 -2
- package/dist/claim-check.js.map +1 -1
- package/dist/claude-hooks-assets.d.ts +93 -0
- package/dist/claude-hooks-assets.d.ts.map +1 -0
- package/dist/claude-hooks-assets.js +208 -0
- package/dist/claude-hooks-assets.js.map +1 -0
- package/dist/clean-room-smoke.d.ts +83 -0
- package/dist/clean-room-smoke.d.ts.map +1 -0
- package/dist/clean-room-smoke.js +138 -0
- package/dist/clean-room-smoke.js.map +1 -0
- package/dist/cmd-usage.d.ts.map +1 -1
- package/dist/cmd-usage.js +36 -6
- package/dist/cmd-usage.js.map +1 -1
- package/dist/codex-hooks-assets.d.ts +25 -7
- package/dist/codex-hooks-assets.d.ts.map +1 -1
- package/dist/codex-hooks-assets.js +138 -30
- package/dist/codex-hooks-assets.js.map +1 -1
- package/dist/codex-hooks.d.ts +21 -1
- package/dist/codex-hooks.d.ts.map +1 -1
- package/dist/codex-hooks.js +21 -1
- package/dist/codex-hooks.js.map +1 -1
- package/dist/codex-invoke.d.ts +73 -0
- package/dist/codex-invoke.d.ts.map +1 -0
- package/dist/codex-invoke.js +80 -0
- package/dist/codex-invoke.js.map +1 -0
- package/dist/course-staleness.d.ts +19 -0
- package/dist/course-staleness.d.ts.map +1 -0
- package/dist/course-staleness.js +95 -0
- package/dist/course-staleness.js.map +1 -0
- package/dist/destructive-guard-hook.d.ts +40 -0
- package/dist/destructive-guard-hook.d.ts.map +1 -0
- package/dist/destructive-guard-hook.js +109 -0
- package/dist/destructive-guard-hook.js.map +1 -0
- package/dist/destructive-guard.d.ts +27 -0
- package/dist/destructive-guard.d.ts.map +1 -0
- package/dist/destructive-guard.js +2808 -0
- package/dist/destructive-guard.js.map +1 -0
- package/dist/discrimination-gate.d.ts +88 -3
- package/dist/discrimination-gate.d.ts.map +1 -1
- package/dist/discrimination-gate.js +173 -16
- package/dist/discrimination-gate.js.map +1 -1
- package/dist/event-chain.d.ts +30 -0
- package/dist/event-chain.d.ts.map +1 -1
- package/dist/event-chain.js +24 -0
- package/dist/event-chain.js.map +1 -1
- package/dist/feature-adr-routing.d.ts +95 -1
- package/dist/feature-adr-routing.d.ts.map +1 -1
- package/dist/feature-adr-routing.js +193 -27
- package/dist/feature-adr-routing.js.map +1 -1
- package/dist/guard.d.ts +98 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +308 -0
- package/dist/guard.js.map +1 -1
- package/dist/harness-core-location.d.ts +18 -0
- package/dist/harness-core-location.d.ts.map +1 -0
- package/dist/harness-core-location.js +42 -0
- package/dist/harness-core-location.js.map +1 -0
- package/dist/index.d.ts +32 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -7
- package/dist/index.js.map +1 -1
- package/dist/lead-shift-gate.d.ts +95 -0
- package/dist/lead-shift-gate.d.ts.map +1 -0
- package/dist/lead-shift-gate.js +100 -0
- package/dist/lead-shift-gate.js.map +1 -0
- package/dist/ledger-backfill.d.ts +11 -1
- package/dist/ledger-backfill.d.ts.map +1 -1
- package/dist/ledger-backfill.js +19 -0
- package/dist/ledger-backfill.js.map +1 -1
- package/dist/loop-blobs.generated.d.ts +1 -1
- package/dist/loop-blobs.generated.d.ts.map +1 -1
- package/dist/loop-blobs.generated.js +12 -3
- package/dist/loop-blobs.generated.js.map +1 -1
- package/dist/loop-lint.d.ts.map +1 -1
- package/dist/loop-lint.js +56 -7
- package/dist/loop-lint.js.map +1 -1
- package/dist/loop-plan-graph.d.ts +1 -3
- package/dist/loop-plan-graph.d.ts.map +1 -1
- package/dist/loop-plan-graph.js +70 -1
- package/dist/loop-plan-graph.js.map +1 -1
- package/dist/loop-trace.d.ts.map +1 -1
- package/dist/loop-trace.js +16 -2
- package/dist/loop-trace.js.map +1 -1
- package/dist/managed-hooks.d.ts +5 -6
- package/dist/managed-hooks.d.ts.map +1 -1
- package/dist/managed-hooks.js +2 -2
- package/dist/managed-hooks.js.map +1 -1
- package/dist/model-recommender.d.ts.map +1 -1
- package/dist/model-recommender.js +14 -3
- package/dist/model-recommender.js.map +1 -1
- package/dist/mutation-gate.d.ts +39 -36
- package/dist/mutation-gate.d.ts.map +1 -1
- package/dist/mutation-gate.js +111 -5
- package/dist/mutation-gate.js.map +1 -1
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +90 -5
- package/dist/operations.js.map +1 -1
- package/dist/patterns.d.ts +23 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +10 -0
- package/dist/patterns.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +27 -5
- package/dist/plugin.js.map +1 -1
- package/dist/publish.d.ts +11 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +16 -2
- package/dist/publish.js.map +1 -1
- package/dist/recommend.d.ts +4 -5
- package/dist/recommend.d.ts.map +1 -1
- package/dist/recommend.js +110 -45
- package/dist/recommend.js.map +1 -1
- package/dist/registry.d.ts +32 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +168 -11
- package/dist/registry.js.map +1 -1
- package/dist/run-records.d.ts +3 -0
- package/dist/run-records.d.ts.map +1 -1
- package/dist/run-records.js +18 -0
- package/dist/run-records.js.map +1 -1
- package/dist/score.d.ts +95 -0
- package/dist/score.d.ts.map +1 -1
- package/dist/score.js +289 -6
- package/dist/score.js.map +1 -1
- package/dist/session-retro.d.ts +121 -2
- package/dist/session-retro.d.ts.map +1 -1
- package/dist/session-retro.js +454 -11
- package/dist/session-retro.js.map +1 -1
- package/dist/setup.d.ts +28 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +223 -6
- package/dist/setup.js.map +1 -1
- package/dist/sign.d.ts.map +1 -1
- package/dist/sign.js +18 -1
- package/dist/sign.js.map +1 -1
- package/dist/skill-selection.d.ts +72 -0
- package/dist/skill-selection.d.ts.map +1 -0
- package/dist/skill-selection.js +76 -0
- package/dist/skill-selection.js.map +1 -0
- package/dist/skills-verify.d.ts +34 -1
- package/dist/skills-verify.d.ts.map +1 -1
- package/dist/skills-verify.js +82 -0
- package/dist/skills-verify.js.map +1 -1
- package/dist/stage-line.d.ts +68 -0
- package/dist/stage-line.d.ts.map +1 -0
- package/dist/stage-line.js +129 -0
- package/dist/stage-line.js.map +1 -0
- package/dist/statusline.d.ts +99 -0
- package/dist/statusline.d.ts.map +1 -1
- package/dist/statusline.js +310 -44
- package/dist/statusline.js.map +1 -1
- package/dist/stem.d.ts +12 -0
- package/dist/stem.d.ts.map +1 -0
- package/dist/stem.js +89 -0
- package/dist/stem.js.map +1 -0
- package/dist/store-counts.d.ts +26 -0
- package/dist/store-counts.d.ts.map +1 -0
- package/dist/store-counts.js +125 -0
- package/dist/store-counts.js.map +1 -0
- package/dist/store-guard.d.ts +106 -0
- package/dist/store-guard.d.ts.map +1 -0
- package/dist/store-guard.js +294 -0
- package/dist/store-guard.js.map +1 -0
- package/dist/swarm-brief.d.ts +95 -0
- package/dist/swarm-brief.d.ts.map +1 -0
- package/dist/swarm-brief.js +660 -0
- package/dist/swarm-brief.js.map +1 -0
- package/dist/telemetry-vocabulary.d.ts +7 -0
- package/dist/telemetry-vocabulary.d.ts.map +1 -1
- package/dist/telemetry-vocabulary.js +29 -0
- package/dist/telemetry-vocabulary.js.map +1 -1
- package/dist/trace-bundle.d.ts +8 -0
- package/dist/trace-bundle.d.ts.map +1 -1
- package/dist/trace-bundle.js +11 -0
- package/dist/trace-bundle.js.map +1 -1
- package/package.json +10 -9
- package/sbom.json +1033 -233
- package/src/agents-policy.ts +46 -2
- package/src/amendment-trace.ts +441 -19
- package/src/backlog-public.ts +503 -0
- package/src/backlog-transitions.ts +77 -0
- package/src/backlog.ts +12 -0
- package/src/claim-check.ts +25 -2
- package/src/claude-hooks-assets.ts +227 -0
- package/src/clean-room-smoke.ts +195 -0
- package/src/cmd-usage.ts +29 -5
- package/src/codex-hooks-assets.ts +140 -30
- package/src/codex-hooks.ts +21 -1
- package/src/codex-invoke.ts +138 -0
- package/src/course-staleness.ts +125 -0
- package/src/destructive-guard-hook.ts +151 -0
- package/src/destructive-guard.ts +3027 -0
- package/src/discrimination-gate.ts +262 -19
- package/src/event-chain.ts +41 -0
- package/src/feature-adr-routing.ts +220 -22
- package/src/guard.ts +358 -0
- package/src/harness-core-location.ts +44 -0
- package/src/index.ts +121 -7
- package/src/lead-shift-gate.ts +145 -0
- package/src/ledger-backfill.ts +20 -1
- package/src/loop-blobs.generated.ts +12 -3
- package/src/loop-lint.ts +52 -7
- package/src/loop-plan-graph.ts +66 -1
- package/src/loop-trace.ts +13 -1
- package/src/managed-hooks.ts +5 -6
- package/src/model-recommender.ts +14 -3
- package/src/mutation-gate.ts +165 -5
- package/src/operations.ts +83 -5
- package/src/patterns.ts +33 -0
- package/src/plugin.ts +27 -5
- package/src/publish.ts +27 -2
- package/src/recommend.ts +116 -46
- package/src/registry.ts +147 -13
- package/src/run-records.ts +23 -0
- package/src/score.ts +377 -7
- package/src/session-retro.ts +466 -11
- package/src/setup.ts +246 -9
- package/src/sign.ts +18 -1
- package/src/skill-selection.ts +111 -0
- package/src/skills-verify.ts +99 -1
- package/src/stage-line.ts +151 -0
- package/src/statusline.ts +396 -47
- package/src/stem.ts +87 -0
- package/src/store-counts.ts +154 -0
- package/src/store-guard.ts +388 -0
- package/src/swarm-brief.ts +661 -0
- package/src/telemetry-vocabulary.ts +36 -0
- package/src/trace-bundle.ts +10 -0
|
@@ -58,6 +58,40 @@ export interface TelemetryField {
|
|
|
58
58
|
readonly unit: 'ms' | 'tokens' | null;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
export type RunOutcome =
|
|
62
|
+
| 'completed' | 'completed-unverified' | 'refused-repo-root' | 'refused-design'
|
|
63
|
+
| 'refused-plan' | 'paused-checkpoint' | 'crashed' | 'unclassified';
|
|
64
|
+
|
|
65
|
+
/** Every member of the closed set, as data for reachability checks. */
|
|
66
|
+
export const RUN_OUTCOMES = [
|
|
67
|
+
'completed', 'completed-unverified', 'refused-repo-root', 'refused-design',
|
|
68
|
+
'refused-plan', 'paused-checkpoint', 'crashed', 'unclassified',
|
|
69
|
+
] as const satisfies readonly RunOutcome[];
|
|
70
|
+
|
|
71
|
+
export function runOutcomeOf(input: {
|
|
72
|
+
phase: string | null | undefined;
|
|
73
|
+
gates: Record<string, unknown> | null | undefined;
|
|
74
|
+
}): RunOutcome {
|
|
75
|
+
if (input.phase === 'repo-root-mismatch') return 'refused-repo-root';
|
|
76
|
+
if (input.phase === 'design-incomplete') return 'refused-design';
|
|
77
|
+
if (input.phase === 'plan-gate-failed') return 'refused-plan';
|
|
78
|
+
if (input.phase === 'checkpoint-after-plan') return 'paused-checkpoint';
|
|
79
|
+
|
|
80
|
+
const gates = input.gates;
|
|
81
|
+
if ((input.phase === null || input.phase === undefined || input.phase === '')
|
|
82
|
+
&& gates !== null && typeof gates === 'object') {
|
|
83
|
+
const codeCompleted = gates.code === 'produced' || gates.code === 'landed';
|
|
84
|
+
const qe = gates.qe;
|
|
85
|
+
if (codeCompleted && typeof qe === 'string' && qe !== 'not-run' && qe !== 'ran' && qe !== '') {
|
|
86
|
+
return 'completed';
|
|
87
|
+
}
|
|
88
|
+
return 'completed-unverified';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// A crashed run cannot classify itself; an external consumer assigns that outcome later.
|
|
92
|
+
return 'unclassified';
|
|
93
|
+
}
|
|
94
|
+
|
|
61
95
|
/**
|
|
62
96
|
* The vocabulary. Keys are stable identifiers for OUR code to reference; `field` is what goes on
|
|
63
97
|
* disk, so an upstream rename touches the value and never the call sites.
|
|
@@ -75,6 +109,7 @@ export const TELEMETRY_FIELDS: Readonly<Record<string, TelemetryField>> = {
|
|
|
75
109
|
// OpenTelemetry carries elapsed time as span structure, not as an attribute, so there is no
|
|
76
110
|
// upstream name to copy for a JSONL row. Ours, and said so.
|
|
77
111
|
durationMs: { field: 'dz.duration_ms', source: 'local', means: 'elapsed wall time of a stage or run', unit: 'ms' },
|
|
112
|
+
runOutcome: { field: 'dz.run_outcome', source: 'local', means: 'terminal outcome of one feature-adr pipeline run', unit: null },
|
|
78
113
|
// Upstream splits usage into input and output and has no TOTAL. Ours are totals, and folding them
|
|
79
114
|
// into input_tokens would silently change the measured quantity (cross-family review).
|
|
80
115
|
totalTokens: { field: 'dz.total_tokens', source: 'local', means: 'input + output for a run or stage', unit: 'tokens' },
|
|
@@ -122,6 +157,7 @@ export const LOCAL_FIELD_ALIASES: Readonly<Record<string, string>> = {
|
|
|
122
157
|
grade: 'evaluationLabel',
|
|
123
158
|
runId: 'runId',
|
|
124
159
|
stage: 'stage',
|
|
160
|
+
outcome: 'runOutcome',
|
|
125
161
|
};
|
|
126
162
|
|
|
127
163
|
/**
|
package/src/trace-bundle.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* completed mutation.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import { isNonRunRow } from './ledger-backfill.js';
|
|
11
12
|
import { traceValidateEvent } from './loop-trace.js';
|
|
12
13
|
|
|
13
14
|
/** The version is part of the wire contract: readers refuse versions they do not understand. */
|
|
@@ -209,6 +210,14 @@ function normalizedSlot(value: MemberSlot | BundleMember | null | undefined, abs
|
|
|
209
210
|
/**
|
|
210
211
|
* Select only rows attributable to this logical run. Slug fallback is deliberately disabled when
|
|
211
212
|
* a row carries any run id: otherwise a foreign loop run sharing a slug leaks into the slice.
|
|
213
|
+
*
|
|
214
|
+
* fa-phase-statusline AM-4 (MEASURED on `main` 2026-09-05, not inherited from the review): a
|
|
215
|
+
* `kind:"phase"` telemetry row carries a `slug` and NO `runId`, so before this filter the slug
|
|
216
|
+
* fallback matched it and every phase row of the slug entered the bundle. That is worse than a
|
|
217
|
+
* cosmetic leak — `planImport` writes `bundle.ledger.lines` back into a DESTINATION ledger, so a
|
|
218
|
+
* telemetry row would arrive there as a row of an imported run. The ledger header's contract is the
|
|
219
|
+
* same one `planLedgerBackfill` reads: the one-line-one-run invariant applies only to rows WITHOUT
|
|
220
|
+
* `kind`, so a row that carries one is never a run row.
|
|
212
221
|
*/
|
|
213
222
|
export function selectLedgerRows(
|
|
214
223
|
lines: readonly string[] | null | undefined,
|
|
@@ -236,6 +245,7 @@ export function selectLedgerRows(
|
|
|
236
245
|
}
|
|
237
246
|
if (!isObject(row)) continue;
|
|
238
247
|
|
|
248
|
+
if (isNonRunRow(row)) continue; // telemetry (kind:"phase"), never a run row — AM-4
|
|
239
249
|
const rowRunId = row['runId'];
|
|
240
250
|
const carriesRunId = nonEmptyString(rowRunId);
|
|
241
251
|
const byRunId = carriesRunId && targetRunId !== null && rowRunId === targetRunId;
|