@dzhechkov/harness-core 0.7.11 → 0.8.1

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 (137) hide show
  1. package/.dz-manifest.json +287 -87
  2. package/README.md +60 -1
  3. package/dist/amendment-trace.d.ts +12 -1
  4. package/dist/amendment-trace.d.ts.map +1 -1
  5. package/dist/amendment-trace.js +22 -4
  6. package/dist/amendment-trace.js.map +1 -1
  7. package/dist/book-kb.d.ts.map +1 -1
  8. package/dist/book-kb.js +17 -0
  9. package/dist/book-kb.js.map +1 -1
  10. package/dist/feature-adr-checkpoints.d.ts +61 -0
  11. package/dist/feature-adr-checkpoints.d.ts.map +1 -1
  12. package/dist/feature-adr-checkpoints.js +116 -2
  13. package/dist/feature-adr-checkpoints.js.map +1 -1
  14. package/dist/feature-adr-routing.d.ts +69 -12
  15. package/dist/feature-adr-routing.d.ts.map +1 -1
  16. package/dist/feature-adr-routing.js +117 -7
  17. package/dist/feature-adr-routing.js.map +1 -1
  18. package/dist/index.d.ts +23 -6
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +23 -4
  21. package/dist/index.js.map +1 -1
  22. package/dist/learning-backend.d.ts +39 -0
  23. package/dist/learning-backend.d.ts.map +1 -1
  24. package/dist/learning-backend.js +31 -11
  25. package/dist/learning-backend.js.map +1 -1
  26. package/dist/lesson-bandit.d.ts +116 -0
  27. package/dist/lesson-bandit.d.ts.map +1 -0
  28. package/dist/lesson-bandit.js +235 -0
  29. package/dist/lesson-bandit.js.map +1 -0
  30. package/dist/lesson-payoff.d.ts +260 -0
  31. package/dist/lesson-payoff.d.ts.map +1 -0
  32. package/dist/lesson-payoff.js +597 -0
  33. package/dist/lesson-payoff.js.map +1 -0
  34. package/dist/loop-blobs.generated.js +2 -2
  35. package/dist/loop-blobs.generated.js.map +1 -1
  36. package/dist/mutation-gate.d.ts +31 -8
  37. package/dist/mutation-gate.d.ts.map +1 -1
  38. package/dist/mutation-gate.js +57 -16
  39. package/dist/mutation-gate.js.map +1 -1
  40. package/dist/named-lock.d.ts.map +1 -1
  41. package/dist/named-lock.js +11 -9
  42. package/dist/named-lock.js.map +1 -1
  43. package/dist/native-dep-probe.d.ts +11 -0
  44. package/dist/native-dep-probe.d.ts.map +1 -0
  45. package/dist/native-dep-probe.js +100 -0
  46. package/dist/native-dep-probe.js.map +1 -0
  47. package/dist/operations.d.ts.map +1 -1
  48. package/dist/operations.js +82 -1
  49. package/dist/operations.js.map +1 -1
  50. package/dist/parser-safe-region.d.ts +47 -0
  51. package/dist/parser-safe-region.d.ts.map +1 -0
  52. package/dist/parser-safe-region.js +47 -0
  53. package/dist/parser-safe-region.js.map +1 -0
  54. package/dist/patterns.d.ts +21 -0
  55. package/dist/patterns.d.ts.map +1 -1
  56. package/dist/patterns.js +52 -4
  57. package/dist/patterns.js.map +1 -1
  58. package/dist/profile.d.ts +202 -0
  59. package/dist/profile.d.ts.map +1 -0
  60. package/dist/profile.js +536 -0
  61. package/dist/profile.js.map +1 -0
  62. package/dist/project-skills-root.d.ts +44 -0
  63. package/dist/project-skills-root.d.ts.map +1 -0
  64. package/dist/project-skills-root.js +62 -0
  65. package/dist/project-skills-root.js.map +1 -0
  66. package/dist/publish.d.ts +5 -3
  67. package/dist/publish.d.ts.map +1 -1
  68. package/dist/publish.js +46 -8
  69. package/dist/publish.js.map +1 -1
  70. package/dist/qe-rounds.d.ts +75 -0
  71. package/dist/qe-rounds.d.ts.map +1 -0
  72. package/dist/qe-rounds.js +174 -0
  73. package/dist/qe-rounds.js.map +1 -0
  74. package/dist/registry.d.ts.map +1 -1
  75. package/dist/registry.js +5 -1
  76. package/dist/registry.js.map +1 -1
  77. package/dist/run-records.d.ts.map +1 -1
  78. package/dist/run-records.js +8 -1
  79. package/dist/run-records.js.map +1 -1
  80. package/dist/setup.d.ts +35 -4
  81. package/dist/setup.d.ts.map +1 -1
  82. package/dist/setup.js +86 -23
  83. package/dist/setup.js.map +1 -1
  84. package/dist/sign.d.ts +29 -24
  85. package/dist/sign.d.ts.map +1 -1
  86. package/dist/sign.js +183 -61
  87. package/dist/sign.js.map +1 -1
  88. package/dist/store-location.d.ts +56 -0
  89. package/dist/store-location.d.ts.map +1 -0
  90. package/dist/store-location.js +56 -0
  91. package/dist/store-location.js.map +1 -0
  92. package/dist/store-lock.d.ts +1 -0
  93. package/dist/store-lock.d.ts.map +1 -1
  94. package/dist/store-lock.js +7 -1
  95. package/dist/store-lock.js.map +1 -1
  96. package/dist/store-merge.d.ts +55 -0
  97. package/dist/store-merge.d.ts.map +1 -0
  98. package/dist/store-merge.js +77 -0
  99. package/dist/store-merge.js.map +1 -0
  100. package/dist/teach-target.d.ts +61 -0
  101. package/dist/teach-target.d.ts.map +1 -0
  102. package/dist/teach-target.js +105 -0
  103. package/dist/teach-target.js.map +1 -0
  104. package/dist/vector-tier.d.ts +30 -0
  105. package/dist/vector-tier.d.ts.map +1 -1
  106. package/dist/vector-tier.js +178 -20
  107. package/dist/vector-tier.js.map +1 -1
  108. package/package.json +13 -13
  109. package/sbom.json +591 -87
  110. package/src/amendment-trace.ts +34 -4
  111. package/src/book-kb.ts +17 -0
  112. package/src/feature-adr-checkpoints.ts +111 -2
  113. package/src/feature-adr-routing.ts +146 -7
  114. package/src/index.ts +55 -3
  115. package/src/learning-backend.ts +62 -11
  116. package/src/lesson-bandit.ts +279 -0
  117. package/src/lesson-payoff.ts +728 -0
  118. package/src/loop-blobs.generated.ts +2 -2
  119. package/src/mutation-gate.ts +74 -17
  120. package/src/named-lock.ts +10 -8
  121. package/src/native-dep-probe.ts +118 -0
  122. package/src/operations.ts +77 -1
  123. package/src/parser-safe-region.ts +65 -0
  124. package/src/patterns.ts +76 -6
  125. package/src/profile.ts +593 -0
  126. package/src/project-skills-root.ts +63 -0
  127. package/src/publish.ts +43 -7
  128. package/src/qe-rounds.ts +226 -0
  129. package/src/registry.ts +5 -1
  130. package/src/run-records.ts +9 -1
  131. package/src/setup.ts +87 -23
  132. package/src/sign.ts +180 -60
  133. package/src/store-location.ts +76 -0
  134. package/src/store-lock.ts +8 -1
  135. package/src/store-merge.ts +91 -0
  136. package/src/teach-target.ts +126 -0
  137. package/src/vector-tier.ts +236 -21
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Lesson Payoff — the anti-corruption layer around the vendored bandit engine
3
+ * (feature lesson-bandit-rerank; ADR-001 / ADR-002 / ADR-003, domain model §6).
4
+ *
5
+ * WHAT THIS OWNS. One question: *how often did THIS lesson, in THIS kind of situation, actually
6
+ * resolve a problem?* It knows a lesson only as an opaque `ArmKey` (its `dzId`). It never reads
7
+ * lesson text, never writes to the pattern store, never decides candidate membership, and never
8
+ * touches quarantine state (INV-9).
9
+ *
10
+ * WHY AN ACL WHEN WE OWN THE COPY. Vendoring gives us the FILE, not the LANGUAGE. The engine's
11
+ * only counter-advancing method (`recordReward`) also moves the Beta parameters, so there is no way
12
+ * to tell it "a pull happened, no evidence either way". Our domain MUST be able to say that: an
13
+ * EXPOSURE is not a REWARD (INV-2 — the defect cross-model QE already removed once from
14
+ * `patterns.ts`, where recall-hit telemetry was silently promoting every viewed lesson). So the
15
+ * exposure counter lives in OUR envelope, beside the engine payload, and INV-2 is true by DATA
16
+ * LAYOUT rather than by call-site discipline: there is no field in `bandit.contexts` an exposure is
17
+ * allowed to touch.
18
+ *
19
+ * DETERMINISM (ADR-001 D-2 / D-7, reaffirmed by ADR-003's P5). The default payoff term is the
20
+ * POSTERIOR MEAN `alpha/(alpha+beta)`, mapped to `[-1,+1]`, using ONLY `getArmStats` — never
21
+ * `selectArm`, never `rerank`. Both of those Thompson-SAMPLE (`Math.random()` on every zero-pull
22
+ * arm), which would make two identical recalls disagree, defeat the byte-identity proof, and hand
23
+ * quarantined lessons a random lift. `05_architecture.md` §3 and `04_domain_model.md` §6.2 sketch an
24
+ * order-projection over `rerank()` instead; that draft is refuted by ADR-003's P5 ("with
25
+ * `banditExploration` absent, no `Math.random()` is consumed on the recall path"), which `rerank`
26
+ * cannot satisfy. The ADRs are the decision record and they win; this file implements them, and the
27
+ * bound the order-projection was chosen for is preserved exactly — the term is in `[-1,+1]` by
28
+ * construction, so the caller's cap is an EXACT bound.
29
+ *
30
+ * FAILURE POSTURE (NFR-5 / INV-7). Every read here degrades to "no term applied, honest reason
31
+ * recorded"; every write degrades to "this reward was dropped, counted, and logged". Nothing in
32
+ * this module may throw into `hybridRecall` or `reinforcePattern`.
33
+ */
34
+ import { type SerializedBanditState } from './lesson-bandit.js';
35
+ import { type MemoryLearningConfig } from './patterns.js';
36
+ /** OUR envelope version — distinct from the engine's own `version` field (architecture §7.2). */
37
+ export declare const BANDIT_STATE_SCHEMA = 1;
38
+ /**
39
+ * The named lock guarding the state file. It resolves to `<projectRoot>/.dz/locks/lesson-bandit.lock`,
40
+ * i.e. the lock sits in the SAME `.dz` that holds the store — two worktrees pointing at one brain
41
+ * therefore share one lock, which is the only placement that serializes the right writers.
42
+ */
43
+ export declare const BANDIT_LOCK_NAME = "lesson-bandit";
44
+ export declare function banditStateDir(projectRoot: string): string;
45
+ /**
46
+ * `<projectRoot>/.dz/lesson-bandit/state.json` (plan §0 D0-1 — the ADRs' worked examples say
47
+ * `.dz/memory/bandit-state.json`; ADR-002's FR-2 already hedges "or equivalent path under `.dz/`",
48
+ * and requirements/domain-model/architecture all key on this one).
49
+ */
50
+ export declare function banditStatePath(projectRoot: string): string;
51
+ export interface ResolvedBanditConfig {
52
+ /** `memory.learning.banditRerank === true`. Absent/invalid ⇒ false ⇒ this context is never built. */
53
+ readonly enabled: boolean;
54
+ /** What the config ASKED for, before the `enabled` gate. */
55
+ readonly explorationRequested: boolean;
56
+ /** Effective exploration: requested AND armed. `explore` without `rerank` is a no-op (ADR-003). */
57
+ readonly exploration: boolean;
58
+ }
59
+ export declare function resolveBanditConfig(projectRoot: string, cfg?: MemoryLearningConfig): ResolvedBanditConfig;
60
+ /**
61
+ * ContextKey (domain model §3.3) — the coarse situation bucket a recall happened in, derived from
62
+ * the resolved recall domain (the axis `dz recall --domain` already boosts on). COARSE on purpose:
63
+ * with a per-query key every arm would sit at `pulls === 0` forever and the term would be noise.
64
+ * Normalising constructor, so two spellings of one domain cannot fork a posterior.
65
+ */
66
+ export declare function contextKeyFor(domain?: string | null | undefined): string;
67
+ /** A confirmation happened: this lesson demonstrably helped. */
68
+ export interface RewardEvent {
69
+ readonly dzId: string;
70
+ readonly contextKey: string;
71
+ readonly reward: number;
72
+ readonly ts: string;
73
+ }
74
+ /** A lesson was merely SEEN in a recall result. Carries no reward mass, by construction. */
75
+ export interface ExposureEvent {
76
+ readonly dzId: string;
77
+ readonly contextKey: string;
78
+ readonly ts: string;
79
+ }
80
+ /**
81
+ * Build a {@link RewardEvent}, clamping reward into `[0,1]` at the domain boundary (INV-8/AC-7).
82
+ *
83
+ * A NON-FINITE reward (`NaN`, `Infinity`) is REJECTED (`null`), not coerced: `clamp01(NaN)` is
84
+ * `NaN`, which would poison `alpha`; and coercing it to `0` would be worse still — `reward: 0` moves
85
+ * `beta`, i.e. it records evidence the lesson FAILED. Dropping is the only fail-safe direction.
86
+ */
87
+ export declare function makeRewardEvent(dzId: string, contextKey: string, reward: number, ts: string): RewardEvent | null;
88
+ /**
89
+ * Translate one upstream learning sample into exactly one domain event (domain model §5).
90
+ *
91
+ * `kind:'merge'` and every UNRECOGNISED kind are DROPPED — a sample kind added upstream tomorrow
92
+ * defaults to *ignored*, never to *rewarded*. That asymmetry is the whole point of translating
93
+ * rather than subscribing.
94
+ */
95
+ export declare function classifySignal(sample: {
96
+ readonly kind: string;
97
+ readonly dzId: string;
98
+ readonly reward?: number | undefined;
99
+ readonly ts: string;
100
+ }, contextKey: string): {
101
+ readonly type: 'reward';
102
+ readonly event: RewardEvent;
103
+ } | {
104
+ readonly type: 'exposure';
105
+ readonly event: ExposureEvent;
106
+ } | null;
107
+ /** The single bounded number the ranker gets for one candidate (domain model §3.5). */
108
+ export interface PayoffTerm {
109
+ readonly dzId: string;
110
+ /** In `[-1,+1]` BEFORE the caller's cap. */
111
+ readonly term: number;
112
+ readonly basis: 'posterior' | 'unknown-arm' | 'explored';
113
+ }
114
+ export interface BanditStateEnvelope {
115
+ readonly schemaVersion: number;
116
+ /** Verbatim `LessonBandit.serialize()` output — nested untouched so a re-vendor stays a diff. */
117
+ readonly bandit: SerializedBanditState;
118
+ /** OUR projection. INV-2 lives here: an exposure moves this map and nothing in `bandit`. */
119
+ readonly exposures: Record<string, Record<string, number>>;
120
+ /** OUR projection (ADR-003 §4) — trial impressions, kept separate from confirmed reward. */
121
+ readonly explorePulls: Record<string, Record<string, number>>;
122
+ readonly updatedAt: string;
123
+ }
124
+ export type BanditLoadReason = 'absent' | 'future-schema' | 'malformed' | `corrupt: ${string}`;
125
+ export declare function freshBanditEnvelope(now?: string): BanditStateEnvelope;
126
+ /**
127
+ * Read the state envelope. **Never throws** (INV-7): every failure yields a FRESH empty envelope
128
+ * plus an honest `reason`, and recall proceeds with no payoff axis.
129
+ *
130
+ * This function is READ-ONLY — it does not delete, repair, or rename anything. `dz recall` is not
131
+ * the right process to destroy state, and the read path is lock-free (§7.4), so a rename here would
132
+ * race every concurrent recall. Quarantining a corrupt file happens once, inside the WRITE
133
+ * transaction, where a write is expected and the lock is held (see {@link mutateBanditState}).
134
+ */
135
+ export declare function loadBanditState(projectRoot: string): {
136
+ readonly state: BanditStateEnvelope;
137
+ readonly reason?: BanditLoadReason;
138
+ };
139
+ export interface BanditWriteOutcome {
140
+ readonly ok: boolean;
141
+ readonly reason?: string;
142
+ }
143
+ /**
144
+ * Record a genuine confirmation (ADR-001 D-5). This is the ONLY operation that moves reward mass.
145
+ * Called from `reinforcePattern`'s non-exposure branch, AFTER the store lock is released.
146
+ */
147
+ export declare function recordReward(projectRoot: string, event: RewardEvent): BanditWriteOutcome;
148
+ /**
149
+ * Record that lessons were merely SEEN (INV-2 / AC-2).
150
+ *
151
+ * ONE locked transaction per RECALL, not per hit (architecture §4) — `limit` transactions per recall
152
+ * would hold the lock far more often than the work justifies.
153
+ *
154
+ * **No engine call happens here, at any reward value, including `0`.** `recordReward(ctx, arm, 0)`
155
+ * adds `beta += 1`: it is evidence the lesson FAILED. Penalising a lesson for being read is the
156
+ * mirror image of the promote-by-view defect this invariant exists to prevent.
157
+ *
158
+ * `exploredDzIds` are the arms that received a trial lift on this recall (ADR-003 §4) — counted in
159
+ * their own projection, never in `alpha`/`beta`, and never touching `qStatus`.
160
+ */
161
+ export declare function recordExposures(projectRoot: string, events: readonly ExposureEvent[], exploredDzIds?: readonly string[], meta?: {
162
+ readonly moved?: number;
163
+ readonly arms?: number;
164
+ }): BanditWriteOutcome;
165
+ export interface PayoffTerms {
166
+ /** Keyed by `dzId`. An arm absent from `armKeys` is NEVER present here (INV-4 / AC-4). */
167
+ readonly terms: ReadonlyMap<string, PayoffTerm>;
168
+ /** `null` when the state loaded cleanly; otherwise the honest degradation reason (§10). */
169
+ readonly reason: BanditLoadReason | null;
170
+ /** Arms with `pulls === 0` — "no measured payoff yet". */
171
+ readonly unknownArms: number;
172
+ /** Arms that received a trial lift on this call (0 unless exploration is armed). */
173
+ readonly explored: readonly string[];
174
+ /** The ids behind `unknownArms`, so a downstream cut can narrow that counter too. */
175
+ readonly unknownDzIds: readonly string[];
176
+ }
177
+ /**
178
+ * Project the posterior for each arm into a bounded term (ADR-001 D-2). **Lock-free** (§7.4): the
179
+ * writer's final step is a rename, so a reader sees the whole old document or the whole new one,
180
+ * never a partial; a reader that loses the race by microseconds ranks with a state one reward stale,
181
+ * which is a ranking hint, not a fact.
182
+ *
183
+ * ```
184
+ * term = (alpha/(alpha+beta) - 0.5) * 2 ∈ [-1,+1] when pulls > 0 ('posterior')
185
+ * term = 0 when pulls === 0 ('unknown-arm')
186
+ * ```
187
+ * `pulls === 0 ⇒ 0` is the cold start ADR-001 accepts on purpose: no evidence ⇒ no nudge, and
188
+ * crucially no RANDOM lift. `Math.random()` is reached only when `opts.exploration` is true, and
189
+ * then only for a NON-QUARANTINED zero-pull arm (ADR-003 P5/P6) — quarantined lessons are excluded
190
+ * here as a SET RELATION, in addition to the ranker's own arm-list filter upstream.
191
+ *
192
+ * Never throws (NFR-5): any failure yields an empty map plus a reason.
193
+ */
194
+ export declare function payoffTermsFor(projectRoot: string, contextKey: string, armKeys: readonly string[], opts?: {
195
+ readonly exploration?: boolean;
196
+ readonly quarantined?: ReadonlySet<string>;
197
+ readonly rng?: () => number;
198
+ }): PayoffTerms;
199
+ /**
200
+ * The per-query explanation carried on `HybridRecall` when the feature is armed. When disarmed the
201
+ * whole field is ABSENT (not `null`, not `{}`) — its mere presence tells a reader the feature ran.
202
+ */
203
+ export interface BanditRecallReport {
204
+ readonly contextKey: string;
205
+ /** POST-cut count: exactly the arms that were reordered and survived to the caller (FR-8/AC-11). */
206
+ readonly armsConsidered: number;
207
+ /** Arms filtered out before the engine ever saw them (INV-3). */
208
+ readonly quarantinedExcluded: number;
209
+ /** `pulls === 0` — no measured payoff yet. */
210
+ readonly unknownArms: number;
211
+ /** Candidates whose position changed against the same ranking WITHOUT the bandit term. */
212
+ readonly moved: number;
213
+ /** Exploration state and how many arms received a trial lift (ADR-003 D5 — a stochastic ranking
214
+ * is never presented as a deterministic one). */
215
+ readonly exploration: boolean;
216
+ readonly explored: number;
217
+ readonly reason: BanditLoadReason | null;
218
+ /** The POST-cut arm ids, so a further truncation downstream can narrow this report honestly. */
219
+ readonly armDzIds: readonly string[];
220
+ readonly movedDzIds: readonly string[];
221
+ /** Ids behind `unknownArms` and `explored`, so a downstream cut narrows EVERY list-dependent
222
+ * counter, not just two of four. */
223
+ readonly unknownDzIds: readonly string[];
224
+ readonly exploredDzIds: readonly string[];
225
+ /** The two rankings `moved` was derived from. Kept because `moved` cannot be narrowed by
226
+ * intersection: whether a SURVIVING candidate still changed position is a fact about the order
227
+ * AFTER the dropped candidates are removed, and only a recomputation can answer it. */
228
+ readonly beforeOrder: readonly string[];
229
+ readonly afterOrder: readonly string[];
230
+ }
231
+ /**
232
+ * Narrow a report to the hits a caller actually PRINTED. `dz recall` over-fetches under `--domain`
233
+ * and truncates again, so the un-narrowed count would describe a PRE-cut list the reader never saw —
234
+ * the exact dishonesty FR-8/AC-11 names.
235
+ */
236
+ export declare function narrowBanditReport(report: BanditRecallReport, shownDzIds: readonly string[]): BanditRecallReport;
237
+ export interface BanditHealth {
238
+ readonly present: boolean;
239
+ readonly verdict: 'INSUFFICIENT_DATA' | 'OK';
240
+ readonly reason: BanditLoadReason | null;
241
+ readonly updatedAt: string | null;
242
+ readonly contexts: number;
243
+ readonly armsTotal: number;
244
+ /** Arms with ANY measured payoff (`alpha > 1`). Zero means the payoff axis is empty. */
245
+ readonly armsWithReward: number;
246
+ readonly totalPulls: number;
247
+ readonly totalReward: number;
248
+ readonly exposureTotal: number;
249
+ readonly explorePullTotal: number;
250
+ readonly rewardEvents: number;
251
+ readonly exposureEvents: number;
252
+ readonly banditWriteErrors: number;
253
+ /** Mean `moved / armsConsidered` over logged recalls; `null` when nothing was logged. */
254
+ readonly movedRate: number | null;
255
+ }
256
+ /** Read-only health snapshot from the state file + `sessions.jsonl`. Never throws. */
257
+ export declare function banditStats(projectRoot: string): BanditHealth;
258
+ /** Text rendering of {@link banditStats} for `dz compounding`. Pure. */
259
+ export declare function renderBanditHealth(h: BanditHealth): string;
260
+ //# sourceMappingURL=lesson-payoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lesson-payoff.d.ts","sourceRoot":"","sources":["../src/lesson-payoff.ts"],"names":[],"mappings":"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"}