@mmnto/totem 1.118.1 → 1.120.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 (118) hide show
  1. package/dist/artifacts/admission.d.ts +12 -12
  2. package/dist/artifacts/verdict.d.ts +16 -16
  3. package/dist/compile-manifest.d.ts +89 -0
  4. package/dist/compile-manifest.d.ts.map +1 -1
  5. package/dist/compile-manifest.js +180 -31
  6. package/dist/compile-manifest.js.map +1 -1
  7. package/dist/compile-manifest.test.js +169 -1
  8. package/dist/compile-manifest.test.js.map +1 -1
  9. package/dist/compile-smoke-gate.d.ts +23 -0
  10. package/dist/compile-smoke-gate.d.ts.map +1 -1
  11. package/dist/compile-smoke-gate.js +139 -8
  12. package/dist/compile-smoke-gate.js.map +1 -1
  13. package/dist/compile-smoke-gate.test.js +431 -0
  14. package/dist/compile-smoke-gate.test.js.map +1 -1
  15. package/dist/compiler-schema.d.ts +1067 -0
  16. package/dist/compiler-schema.d.ts.map +1 -1
  17. package/dist/compiler-schema.js +204 -1
  18. package/dist/compiler-schema.js.map +1 -1
  19. package/dist/compiler-schema.test.js +92 -0
  20. package/dist/compiler-schema.test.js.map +1 -1
  21. package/dist/compiler.d.ts +2 -6
  22. package/dist/compiler.d.ts.map +1 -1
  23. package/dist/compiler.js +6 -17
  24. package/dist/compiler.js.map +1 -1
  25. package/dist/freeze.d.ts +3 -3
  26. package/dist/index.d.ts +12 -3
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +6 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/ledger.d.ts +12 -12
  31. package/dist/recurrence-stats.d.ts +10 -10
  32. package/dist/regex-safety/apply-rules-bounded.d.ts +11 -0
  33. package/dist/regex-safety/apply-rules-bounded.d.ts.map +1 -1
  34. package/dist/regex-safety/apply-rules-bounded.js +59 -5
  35. package/dist/regex-safety/apply-rules-bounded.js.map +1 -1
  36. package/dist/regex-validation.d.ts +7 -0
  37. package/dist/regex-validation.d.ts.map +1 -0
  38. package/dist/regex-validation.js +32 -0
  39. package/dist/regex-validation.js.map +1 -0
  40. package/dist/rule-engine.d.ts +11 -1
  41. package/dist/rule-engine.d.ts.map +1 -1
  42. package/dist/rule-engine.js +125 -18
  43. package/dist/rule-engine.js.map +1 -1
  44. package/dist/spine/authored-rule.d.ts +687 -263
  45. package/dist/spine/authored-rule.d.ts.map +1 -1
  46. package/dist/spine/authored-rule.js +113 -27
  47. package/dist/spine/authored-rule.js.map +1 -1
  48. package/dist/spine/authored-rule.test.js +170 -4
  49. package/dist/spine/authored-rule.test.js.map +1 -1
  50. package/dist/spine/authoring-ledger.d.ts +83 -24
  51. package/dist/spine/authoring-ledger.d.ts.map +1 -1
  52. package/dist/spine/authoring-ledger.js +46 -25
  53. package/dist/spine/authoring-ledger.js.map +1 -1
  54. package/dist/spine/authoring-ledger.test.js +20 -7
  55. package/dist/spine/authoring-ledger.test.js.map +1 -1
  56. package/dist/spine/candidate-rule.d.ts +18 -1
  57. package/dist/spine/candidate-rule.d.ts.map +1 -1
  58. package/dist/spine/candidate-rule.js.map +1 -1
  59. package/dist/spine/cert-corpus-seed.d.ts +14 -14
  60. package/dist/spine/compile.d.ts +4 -1
  61. package/dist/spine/compile.d.ts.map +1 -1
  62. package/dist/spine/compile.js +50 -3
  63. package/dist/spine/compile.js.map +1 -1
  64. package/dist/spine/compile.test.js +189 -23
  65. package/dist/spine/compile.test.js.map +1 -1
  66. package/dist/spine/frozen-split.d.ts +18 -18
  67. package/dist/spine/ledgers.d.ts +62 -62
  68. package/dist/spine/lf-normalize.d.ts +9 -0
  69. package/dist/spine/lf-normalize.d.ts.map +1 -0
  70. package/dist/spine/lf-normalize.js +38 -0
  71. package/dist/spine/lf-normalize.js.map +1 -0
  72. package/dist/spine/preimage-differential.d.ts +3 -1
  73. package/dist/spine/preimage-differential.d.ts.map +1 -1
  74. package/dist/spine/preimage-differential.js +9 -6
  75. package/dist/spine/preimage-differential.js.map +1 -1
  76. package/dist/spine/preimage-differential.test.js +59 -0
  77. package/dist/spine/preimage-differential.test.js.map +1 -1
  78. package/dist/spine/record-exemplars.fixture.d.ts +5 -0
  79. package/dist/spine/record-exemplars.fixture.d.ts.map +1 -0
  80. package/dist/spine/record-exemplars.fixture.js +61 -0
  81. package/dist/spine/record-exemplars.fixture.js.map +1 -0
  82. package/dist/spine/record-lower.d.ts +90 -0
  83. package/dist/spine/record-lower.d.ts.map +1 -0
  84. package/dist/spine/record-lower.js +418 -0
  85. package/dist/spine/record-lower.js.map +1 -0
  86. package/dist/spine/record-lower.test.d.ts +2 -0
  87. package/dist/spine/record-lower.test.d.ts.map +1 -0
  88. package/dist/spine/record-lower.test.js +562 -0
  89. package/dist/spine/record-lower.test.js.map +1 -0
  90. package/dist/spine/record-runtime.d.ts +215 -0
  91. package/dist/spine/record-runtime.d.ts.map +1 -0
  92. package/dist/spine/record-runtime.js +330 -0
  93. package/dist/spine/record-runtime.js.map +1 -0
  94. package/dist/spine/record-runtime.test.d.ts +2 -0
  95. package/dist/spine/record-runtime.test.d.ts.map +1 -0
  96. package/dist/spine/record-runtime.test.js +814 -0
  97. package/dist/spine/record-runtime.test.js.map +1 -0
  98. package/dist/spine/rule-record.d.ts +864 -0
  99. package/dist/spine/rule-record.d.ts.map +1 -0
  100. package/dist/spine/rule-record.js +781 -0
  101. package/dist/spine/rule-record.js.map +1 -0
  102. package/dist/spine/rule-record.test.d.ts +2 -0
  103. package/dist/spine/rule-record.test.d.ts.map +1 -0
  104. package/dist/spine/rule-record.test.js +1262 -0
  105. package/dist/spine/rule-record.test.js.map +1 -0
  106. package/dist/spine/windtunnel-firing.d.ts.map +1 -1
  107. package/dist/spine/windtunnel-firing.js +28 -1
  108. package/dist/spine/windtunnel-firing.js.map +1 -1
  109. package/dist/spine/windtunnel-lock.d.ts +26 -26
  110. package/dist/stage4-verifier.d.ts.map +1 -1
  111. package/dist/stage4-verifier.js +61 -17
  112. package/dist/stage4-verifier.js.map +1 -1
  113. package/dist/sys/glob.d.ts +30 -0
  114. package/dist/sys/glob.d.ts.map +1 -1
  115. package/dist/sys/glob.js +62 -1
  116. package/dist/sys/glob.js.map +1 -1
  117. package/dist/types.d.ts +1 -1
  118. package/package.json +1 -1
@@ -22,12 +22,12 @@ export declare const AuthoringLedgerEntrySchema: z.ZodObject<{
22
22
  judgedBy: z.ZodEffects<z.ZodString, string, string>;
23
23
  }, "strip", z.ZodTypeAny, {
24
24
  decidable: boolean;
25
- basis: string;
26
25
  judgedBy: string;
26
+ basis: string;
27
27
  }, {
28
28
  decidable: boolean;
29
- basis: string;
30
29
  judgedBy: string;
30
+ basis: string;
31
31
  }>;
32
32
  origin: z.ZodUnion<[z.ZodObject<{
33
33
  kind: z.ZodLiteral<"from-scratch">;
@@ -86,20 +86,52 @@ export declare const AuthoringLedgerEntrySchema: z.ZodObject<{
86
86
  */
87
87
  freezeCommitment: z.ZodOptional<z.ZodString>;
88
88
  /**
89
- * Fingerprint of the MATERIAL author input (engine / class / matcher /
90
- * fixtures / origin) — identity (`author`/`targetDefect`/`ruleId`) AND
91
- * `authoredAt` EXCLUDED, so a pure timestamp refresh is a no-op (§8: a
92
- * timestamp drift must not churn the rule) while a matcher/fixture edit
93
- * appends a new revision row under the SAME `ruleId`. Equal hash on re-read ⇒
94
- * no append.
89
+ * Prop 310 § Design 1 — the rule record this entry was authored from. Present
90
+ * iff the rule is record-carried (every rule since slice 3; pre-slice-3 rows
91
+ * omit it and still parse).
92
+ *
93
+ * `contentHash` is what binds the §8 attestations to the EXACT ingested bytes
94
+ * (the § Design 1 attestation-relocation constraint) and is inside the material
95
+ * hash below. `path` is INFORMATIONAL: § Design 1 says renaming a record
96
+ * changes no identity, so the path must not force a re-attestation, and it is
97
+ * deliberately excluded from the material.
98
+ */
99
+ record: z.ZodOptional<z.ZodObject<{
100
+ path: z.ZodEffects<z.ZodString, string, string>;
101
+ contentHash: z.ZodString;
102
+ }, "strict", z.ZodTypeAny, {
103
+ path: string;
104
+ contentHash: string;
105
+ }, {
106
+ path: string;
107
+ contentHash: string;
108
+ }>>;
109
+ /**
110
+ * Fingerprint of the MATERIAL author input (engine / class / record bytes /
111
+ * fixtures / origin) — identity (`author`/`targetDefect`) AND `authoredAt`
112
+ * EXCLUDED, so a pure timestamp refresh is a no-op (§8: a timestamp drift must
113
+ * not churn the rule) while a matcher/fixture edit appends a new revision row
114
+ * under the SAME `ruleId`. Equal hash on re-read ⇒ no append.
115
+ *
116
+ * `ruleId` enters the material in exactly ONE place since Prop 310 slice 3: as
117
+ * the § Design 10 join key inside each derived
118
+ * `positiveFixtures[].preimageSource`. It is stable per identity (reused from
119
+ * the ledger, never re-minted), so it cannot churn an unchanged rule — the §8
120
+ * "identity is not material" property is preserved in effect, not by absence.
95
121
  */
96
122
  contentHash: z.ZodEffects<z.ZodString, string, string>;
97
123
  }, "strict", z.ZodTypeAny, {
124
+ ruleId: string;
98
125
  contentHash: string;
99
126
  author: string;
100
127
  authoredAt: string;
101
128
  targetDefect: string;
102
- ruleId: string;
129
+ structuralEligibility: {
130
+ decidable: boolean;
131
+ judgedBy: string;
132
+ basis: string;
133
+ };
134
+ declaredEngine: "regex" | "ast" | "ast-grep";
103
135
  origin: {
104
136
  kind: "from-scratch";
105
137
  } | {
@@ -107,24 +139,28 @@ export declare const AuthoringLedgerEntrySchema: z.ZodObject<{
107
139
  sourceRunId: string;
108
140
  suggestionHash: string;
109
141
  };
110
- structuralEligibility: {
111
- decidable: boolean;
112
- basis: string;
113
- judgedBy: string;
114
- };
115
- declaredEngine: "regex" | "ast" | "ast-grep";
116
142
  splitRef: string;
117
143
  authoredAfterSplit: true;
118
144
  heldOutNonInspectionAttestation: true;
119
145
  positiveFixturePrs: number[];
146
+ record?: {
147
+ path: string;
148
+ contentHash: string;
149
+ } | undefined;
120
150
  freezeCommitment?: string | undefined;
121
151
  negativeFixturePrs?: number[] | undefined;
122
152
  }, {
153
+ ruleId: string;
123
154
  contentHash: string;
124
155
  author: string;
125
156
  authoredAt: string;
126
157
  targetDefect: string;
127
- ruleId: string;
158
+ structuralEligibility: {
159
+ decidable: boolean;
160
+ judgedBy: string;
161
+ basis: string;
162
+ };
163
+ declaredEngine: "regex" | "ast" | "ast-grep";
128
164
  origin: {
129
165
  kind: "from-scratch";
130
166
  } | {
@@ -132,22 +168,29 @@ export declare const AuthoringLedgerEntrySchema: z.ZodObject<{
132
168
  sourceRunId: string;
133
169
  suggestionHash: string;
134
170
  };
135
- structuralEligibility: {
136
- decidable: boolean;
137
- basis: string;
138
- judgedBy: string;
139
- };
140
- declaredEngine: "regex" | "ast" | "ast-grep";
141
171
  splitRef: string;
142
172
  authoredAfterSplit: true;
143
173
  heldOutNonInspectionAttestation: true;
144
174
  positiveFixturePrs: number[];
175
+ record?: {
176
+ path: string;
177
+ contentHash: string;
178
+ } | undefined;
145
179
  freezeCommitment?: string | undefined;
146
180
  negativeFixturePrs?: number[] | undefined;
147
181
  }>;
148
182
  export type AuthoringLedgerEntry = z.infer<typeof AuthoringLedgerEntrySchema>;
149
183
  /**
150
- * Deterministic fingerprint of the MATERIAL author fields (§8 idempotency).
184
+ * The LF-image primitive both hash-material edges share (this ledger's material
185
+ * and Prop 310 § Design 10's example-pair material). DEFINED in `lf-normalize.ts`
186
+ * — a leaf, so the record grammar can use it without closing an import cycle
187
+ * through this module's Zod schemas — and re-exported here, where every existing
188
+ * caller and the package barrel already reach for it. One definition (Tenet 20).
189
+ */
190
+ export { lfDeepNormalize } from './lf-normalize.js';
191
+ /**
192
+ * Deterministic fingerprint of the MATERIAL author fields (§8 idempotency), the
193
+ * rule's content-addressed record included (Prop 310 § Design 1).
151
194
  * SELF-normalizes newlines (CRLF→LF) on every string it hashes, so a Windows-
152
195
  * authored and an LF-authored identical rule hash identically REGARDLESS of the
153
196
  * caller — the determinism is single-homed in the hash, not the reader (Tenet-20,
@@ -160,11 +203,27 @@ export type AuthoringLedgerEntry = z.infer<typeof AuthoringLedgerEntrySchema>;
160
203
  * row — otherwise the rule reads `unchanged`, no row is appended, and the ledger
161
204
  * keeps the STALE split. `authoredAt` stays excluded (a timestamp refresh is a
162
205
  * no-op, §8); every OTHER ledger-attested mutable field is covered here.
206
+ *
207
+ * IDENTITY (`author`/`targetDefect`) is excluded. `ruleId` is NOT a separate
208
+ * exclusion since Prop 310 slice 3: it rides inside each derived
209
+ * `positiveFixtures[].preimageSource` as the § Design 10 join key. Because the
210
+ * intake reuses an identity's persisted id and never re-mints it, that value is
211
+ * constant across revisions of one rule and cannot make an unchanged rule read
212
+ * `revised`.
163
213
  */
164
214
  export declare function authoringContentHash(material: {
165
215
  declaredEngine: string;
166
216
  structuralClass: string;
167
- dslSource: string;
217
+ /**
218
+ * Prop 310 § Design 1 — the sha256 of the LF-admitted RECORD BYTES, standing in
219
+ * for the matcher the pre-slice-3 material carried inline as `dslSource`. The
220
+ * record's PATH is deliberately absent: § Design 1 rules that a rename changes no
221
+ * identity, so a path in the material would force a spurious re-attestation. An
222
+ * `examples` edit still moves this hash (it moves the bytes) AND moves the derived
223
+ * `positiveFixtures[].preimageSource.pairHash` — the § Design 10 drift sensor,
224
+ * with no second mechanism.
225
+ */
226
+ recordContentHash: string;
168
227
  positiveFixtures: unknown;
169
228
  negativeFixtures?: unknown;
170
229
  origin: unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"authoring-ledger.d.ts","sourceRoot":"","sources":["../../src/spine/authoring-ledger.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,wFAAwF;AACxF,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;IAInC,0JAA0J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAS1J;;;;;;;;;;;;;;OAcG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;;;;;OAUG;;IAKH;;;;;;;OAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGI,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAoB9E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,+BAA+B,EAAE,OAAO,CAAC;IACzC,sGAAsG;IACtG,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAKT;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAsC5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAuB9F;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GACvC,oBAAoB,EAAE,CAIxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GAAG;IACpF,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB,CA2BA"}
1
+ {"version":3,"file":"authoring-ledger.d.ts","sourceRoot":"","sources":["../../src/spine/authoring-ledger.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,wFAAwF;AACxF,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;IAInC,0JAA0J;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAS1J;;;;;;;;;;;;;;OAcG;;IAEH;;;;;;;OAOG;;IAEH;;;;;;;;;;OAUG;;IAEH;;;;;;;;;;OAUG;;;;;;;;;;;IAQH;;;;;;;;;;;;OAYG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGI,CAAC;AACZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB;;;;;;;;OAQG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,+BAA+B,EAAE,OAAO,CAAC;IACzC,sGAAsG;IACtG,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,MAAM,CAKT;AAMD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAsC5E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAuB9F;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GACvC,oBAAoB,EAAE,CAIxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GAAG;IACpF,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzB,CA2BA"}
@@ -23,8 +23,10 @@ import * as fs from 'node:fs';
23
23
  import * as path from 'node:path';
24
24
  import { z } from 'zod';
25
25
  import { canonicalStringify } from '../compile-manifest.js';
26
+ import { SHA256_HEX_RE } from '../compiler-schema.js';
26
27
  import { TotemError } from '../errors.js';
27
28
  import { AuthoredOriginSchema, DeclaredEngineSchema, StructEligResultSchema, } from './authored-rule.js';
29
+ import { lfDeepNormalize } from './lf-normalize.js';
28
30
  const nonEmpty = (label) => z.string().refine((s) => s.trim().length > 0, { message: `${label} must be non-empty` });
29
31
  /** The spine subdirectory + filename the authoring-ledger lives at, under `.totem/`. */
30
32
  export const AUTHORING_LEDGER_DIR = 'spine';
@@ -82,40 +84,52 @@ export const AuthoringLedgerEntrySchema = z
82
84
  * materialize path fail-louds when a frozen-artifact run meets an
83
85
  * uncommitted entry.
84
86
  */
85
- freezeCommitment: z
86
- .string()
87
- .regex(/^[0-9a-f]{64}$/)
87
+ freezeCommitment: z.string().regex(SHA256_HEX_RE).optional(),
88
+ /**
89
+ * Prop 310 § Design 1 — the rule record this entry was authored from. Present
90
+ * iff the rule is record-carried (every rule since slice 3; pre-slice-3 rows
91
+ * omit it and still parse).
92
+ *
93
+ * `contentHash` is what binds the §8 attestations to the EXACT ingested bytes
94
+ * (the § Design 1 attestation-relocation constraint) and is inside the material
95
+ * hash below. `path` is INFORMATIONAL: § Design 1 says renaming a record
96
+ * changes no identity, so the path must not force a re-attestation, and it is
97
+ * deliberately excluded from the material.
98
+ */
99
+ record: z
100
+ .object({
101
+ path: nonEmpty('record.path'),
102
+ contentHash: z.string().regex(SHA256_HEX_RE),
103
+ })
104
+ .strict()
88
105
  .optional(),
89
106
  /**
90
- * Fingerprint of the MATERIAL author input (engine / class / matcher /
91
- * fixtures / origin) — identity (`author`/`targetDefect`/`ruleId`) AND
92
- * `authoredAt` EXCLUDED, so a pure timestamp refresh is a no-op (§8: a
93
- * timestamp drift must not churn the rule) while a matcher/fixture edit
94
- * appends a new revision row under the SAME `ruleId`. Equal hash on re-read ⇒
95
- * no append.
107
+ * Fingerprint of the MATERIAL author input (engine / class / record bytes /
108
+ * fixtures / origin) — identity (`author`/`targetDefect`) AND `authoredAt`
109
+ * EXCLUDED, so a pure timestamp refresh is a no-op (§8: a timestamp drift must
110
+ * not churn the rule) while a matcher/fixture edit appends a new revision row
111
+ * under the SAME `ruleId`. Equal hash on re-read ⇒ no append.
112
+ *
113
+ * `ruleId` enters the material in exactly ONE place since Prop 310 slice 3: as
114
+ * the § Design 10 join key inside each derived
115
+ * `positiveFixtures[].preimageSource`. It is stable per identity (reused from
116
+ * the ledger, never re-minted), so it cannot churn an unchanged rule — the §8
117
+ * "identity is not material" property is preserved in effect, not by absence.
96
118
  */
97
119
  contentHash: nonEmpty('contentHash'),
98
120
  })
99
121
  .strict();
100
122
  /**
101
- * Recursively LF-normalize every string in a value. Keeps the material-hash
102
- * determinism SINGLE-HOMED in the hash (Tenet-20, gemini diff-review): the hash
103
- * is CRLF-invariant regardless of whether the caller pre-normalized, so a future
104
- * caller of `authoringContentHash` can't silently produce a divergent hash by
105
- * passing un-normalized CRLF input.
123
+ * The LF-image primitive both hash-material edges share (this ledger's material
124
+ * and Prop 310 § Design 10's example-pair material). DEFINED in `lf-normalize.ts`
125
+ * — a leaf, so the record grammar can use it without closing an import cycle
126
+ * through this module's Zod schemas — and re-exported here, where every existing
127
+ * caller and the package barrel already reach for it. One definition (Tenet 20).
106
128
  */
107
- function lfDeepNormalize(value) {
108
- if (typeof value === 'string')
109
- return value.replace(/\r\n/g, '\n');
110
- if (Array.isArray(value))
111
- return value.map(lfDeepNormalize);
112
- if (value !== null && typeof value === 'object') {
113
- return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, lfDeepNormalize(v)]));
114
- }
115
- return value;
116
- }
129
+ export { lfDeepNormalize } from './lf-normalize.js';
117
130
  /**
118
- * Deterministic fingerprint of the MATERIAL author fields (§8 idempotency).
131
+ * Deterministic fingerprint of the MATERIAL author fields (§8 idempotency), the
132
+ * rule's content-addressed record included (Prop 310 § Design 1).
119
133
  * SELF-normalizes newlines (CRLF→LF) on every string it hashes, so a Windows-
120
134
  * authored and an LF-authored identical rule hash identically REGARDLESS of the
121
135
  * caller — the determinism is single-homed in the hash, not the reader (Tenet-20,
@@ -128,6 +142,13 @@ function lfDeepNormalize(value) {
128
142
  * row — otherwise the rule reads `unchanged`, no row is appended, and the ledger
129
143
  * keeps the STALE split. `authoredAt` stays excluded (a timestamp refresh is a
130
144
  * no-op, §8); every OTHER ledger-attested mutable field is covered here.
145
+ *
146
+ * IDENTITY (`author`/`targetDefect`) is excluded. `ruleId` is NOT a separate
147
+ * exclusion since Prop 310 slice 3: it rides inside each derived
148
+ * `positiveFixtures[].preimageSource` as the § Design 10 join key. Because the
149
+ * intake reuses an identity's persisted id and never re-mints it, that value is
150
+ * constant across revisions of one rule and cannot make an unchanged rule read
151
+ * `revised`.
131
152
  */
132
153
  export function authoringContentHash(material) {
133
154
  return createHash('sha256')
@@ -1 +1 @@
1
- {"version":3,"file":"authoring-ledger.js","sourceRoot":"","sources":["../../src/spine/authoring-ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authoring-ledger.js","sourceRoot":"","sources":["../../src/spine/authoring-ledger.ts"],"names":[],"mappings":"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"}
@@ -96,6 +96,20 @@ describe('authoring-ledger fail-loud round-trip (FM(e))', () => {
96
96
  fs.writeFileSync(file, '{not valid json\n', 'utf-8');
97
97
  expect(() => readAuthoringLedger(dir)).toThrow();
98
98
  });
99
+ it('round-trips the Prop 310 record binding (path + contentHash) verbatim', () => {
100
+ const entry = baseEntry({
101
+ record: { path: '.totem/rules/no-console.rule.yaml', contentHash: 'c'.repeat(64) },
102
+ });
103
+ appendAuthoringLedgerEntry(dir, entry);
104
+ expect(readAuthoringLedger(dir)[0]?.record).toEqual(entry.record);
105
+ });
106
+ it('READS a pre-Prop-310 row carrying NO record binding (optional, additive)', () => {
107
+ appendAuthoringLedgerEntry(dir, baseEntry());
108
+ expect(readAuthoringLedger(dir)[0]?.record).toBeUndefined();
109
+ });
110
+ it('fail-loud on a record binding whose contentHash is not a sha256 hex (the attestation basis)', () => {
111
+ expect(() => appendAuthoringLedgerEntry(dir, baseEntry({ record: { path: '.totem/rules/x.rule.yaml', contentHash: 'short' } }))).toThrow();
112
+ });
99
113
  it('fail-loud (schema) on an incomplete entry — never reaches disk silently', () => {
100
114
  expect(() => appendAuthoringLedgerEntry(dir, { ruleId: 'x' })).toThrow();
101
115
  });
@@ -104,7 +118,8 @@ describe('authoringContentHash (§8 revision detection — material-only)', () =
104
118
  const material = {
105
119
  declaredEngine: 'regex',
106
120
  structuralClass: 'forbidden-literal-token',
107
- dslSource: 'TODO',
121
+ // Prop 310 § Design 1: the matcher's stand-in is the RECORD's content hash.
122
+ recordContentHash: 'a'.repeat(64),
108
123
  positiveFixtures: [{ pr: 1 }],
109
124
  origin: { kind: 'from-scratch' },
110
125
  splitRef: 'split-2026-06-27',
@@ -119,8 +134,8 @@ describe('authoringContentHash (§8 revision detection — material-only)', () =
119
134
  it('is deterministic for identical material', () => {
120
135
  expect(authoringContentHash(material)).toBe(authoringContentHash({ ...material }));
121
136
  });
122
- it('changes when the matcher changes (a revision)', () => {
123
- expect(authoringContentHash(material)).not.toBe(authoringContentHash({ ...material, dslSource: 'FIXME' }));
137
+ it('changes when the RECORD BYTES change (a revision — Prop 310 § Design 1)', () => {
138
+ expect(authoringContentHash(material)).not.toBe(authoringContentHash({ ...material, recordContentHash: 'b'.repeat(64) }));
124
139
  });
125
140
  it('changes when an attestation changes (splitRef) — greptile-P1/CR diff-review', () => {
126
141
  expect(authoringContentHash(material)).not.toBe(authoringContentHash({ ...material, splitRef: 'split-other' }));
@@ -140,10 +155,8 @@ describe('authoringContentHash (§8 revision detection — material-only)', () =
140
155
  expect(withCommitment).not.toBe(authoringContentHash({ ...material, freezeCommitment: 'b'.repeat(64) }));
141
156
  });
142
157
  it('is CRLF-invariant — self-normalizes newlines regardless of the caller (Tenet-20 single-home)', () => {
143
- // a CRLF-authored multi-line matcher and its LF twin must hash identically even if the
144
- // CALLER never normalized — the determinism lives in the hash, not the reader (gemini).
145
- expect(authoringContentHash({ ...material, dslSource: 'line-a\r\nline-b' })).toBe(authoringContentHash({ ...material, dslSource: 'line-a\nline-b' }));
146
- // and a nested fixture string (not just dslSource) is normalized too.
158
+ // A nested fixture string is normalized even if the CALLER never normalized —
159
+ // the determinism lives in the hash, not the reader (gemini).
147
160
  expect(authoringContentHash({ ...material, positiveFixtures: [{ pr: 1, matchedSpan: 'a\r\nb' }] })).toBe(authoringContentHash({ ...material, positiveFixtures: [{ pr: 1, matchedSpan: 'a\nb' }] }));
148
161
  // and a string nested INSIDE the §4 preimageSource union (deeper than matchedSpan) is
149
162
  // normalized too — the deep-normalize must reach the new union depth, not just the fixture top.
@@ -1 +1 @@
1
- {"version":3,"file":"authoring-ledger.test.js","sourceRoot":"","sources":["../../src/spine/authoring-ledger.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authoring-ledger.test.js","sourceRoot":"","sources":["../../src/spine/authoring-ledger.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import { type ProvenanceRecord } from '../compiler-schema.js';
3
+ import type { ParsedRuleRecord } from './rule-record.js';
3
4
  /**
4
5
  * Stage-2 classifier disposition (ADR-091 funnel, the gate). A `structural`
5
6
  * (syntactic-invariant) candidate is compile-eligible; a `behavioral` candidate
@@ -23,7 +24,23 @@ export interface CompileInputCandidate {
23
24
  provenance: ProvenanceRecord;
24
25
  classifierDisposition: ClassifierDisposition;
25
26
  classifierLedgerRef: string;
26
- dslSource: string;
27
+ /**
28
+ * The lesson-markdown DSL carrier. EXACTLY ONE of `dslSource` / `record` is
29
+ * present on any candidate — the XOR is a producer contract asserted up front
30
+ * in `compileCandidate` (both or neither throws). The MINED producer always
31
+ * carries this one; the AUTHORED producer carries `record` since Prop 310
32
+ * slice 3 made the record the only authoring surface.
33
+ */
34
+ dslSource?: string;
35
+ /**
36
+ * Prop 310 § Design 1 — the parsed `.totem/rules/<slug>.rule.yaml` record, the
37
+ * other half of the carrier XOR above. Carried ALREADY PARSED (slice 1's
38
+ * `ParsedRuleRecord`): re-serialising a record into lesson markdown just to
39
+ * re-parse it would reintroduce the incumbent grammar this proposal supersedes,
40
+ * so `compileCandidate` dispatches straight to `compileRuleRecord` and never
41
+ * touches `extractManualPattern` on this path.
42
+ */
43
+ record?: ParsedRuleRecord;
27
44
  /**
28
45
  * ADR-112 §3 (#2259/#7) — the engine the structural-eligibility whitelist judged
29
46
  * this rule for (AUTHORED producer only). When present, `compileCandidate` asserts
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-rule.d.ts","sourceRoot":"","sources":["../../src/spine/candidate-rule.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzF;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,yCAAuC,CAAC;AAChF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;IAC9C;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB;IACpC;;;;;;OAMG;;;;;;;;;;;;;;;;;IAEH,4EAA4E;;IAE5E;;;;;;OAMG;;IAIH;;;;;OAKG;;IAIH;;;;;OAKG;;;;;;;;;;;;;;;;;;;;;;;;EAEH,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
1
+ {"version":3,"file":"candidate-rule.d.ts","sourceRoot":"","sources":["../../src/spine/candidate-rule.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,yCAAuC,CAAC;AAChF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,UAAU,CAAC;IAC9C;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB;IACpC;;;;;;OAMG;;;;;;;;;;;;;;;;;IAEH,4EAA4E;;IAE5E;;;;;;OAMG;;IAIH;;;;;OAKG;;IAIH;;;;;OAKG;;;;;;;;;;;;;;;;;;;;;;;;EAEH,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"candidate-rule.js","sourceRoot":"","sources":["../../src/spine/candidate-rule.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,gFAAgF;AAChF,yEAAyE;AACzE,yEAAyE;AACzE,8EAA8E;AAC9E,6DAA6D;AAE7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,yBAAyB,EAAyB,MAAM,uBAAuB,CAAC;AAEzF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AAyChF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD;;;;;;OAMG;IACH,UAAU,EAAE,yBAAyB;IACrC,4EAA4E;IAC5E,qBAAqB,EAAE,2BAA2B;IAClD;;;;;;OAMG;IACH,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;QACjE,OAAO,EAAE,0DAA0D;KACpE,CAAC;IACF;;;;;OAKG;IACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;QACvD,OAAO,EAAE,6BAA6B;KACvC,CAAC;IACF;;;;;OAKG;IACH,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;CAC5B,CAAC,CAAC"}
1
+ {"version":3,"file":"candidate-rule.js","sourceRoot":"","sources":["../../src/spine/candidate-rule.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,8EAA8E;AAC9E,+EAA+E;AAC/E,yEAAyE;AACzE,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,gFAAgF;AAChF,yEAAyE;AACzE,yEAAyE;AACzE,8EAA8E;AAC9E,6DAA6D;AAE7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,yBAAyB,EAAyB,MAAM,uBAAuB,CAAC;AAGzF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AAyDhF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD;;;;;;OAMG;IACH,UAAU,EAAE,yBAAyB;IACrC,4EAA4E;IAC5E,qBAAqB,EAAE,2BAA2B;IAClD;;;;;;OAMG;IACH,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;QACjE,OAAO,EAAE,0DAA0D;KACpE,CAAC;IACF;;;;;OAKG;IACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;QACvD,OAAO,EAAE,6BAA6B;KACvC,CAAC;IACF;;;;;OAKG;IACH,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;CAC5B,CAAC,CAAC"}
@@ -32,18 +32,18 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
32
32
  includeGlobs: z.ZodArray<z.ZodString, "many">;
33
33
  excludeGlobs: z.ZodArray<z.ZodString, "many">;
34
34
  }, "strip", z.ZodTypeAny, {
35
- includeGlobs: string[];
36
35
  excludeGlobs: string[];
37
- }, {
38
36
  includeGlobs: string[];
37
+ }, {
39
38
  excludeGlobs: string[];
39
+ includeGlobs: string[];
40
40
  }>;
41
41
  excludeRevertPairs: z.ZodDefault<z.ZodBoolean>;
42
42
  excludeBotPrs: z.ZodDefault<z.ZodBoolean>;
43
43
  }, "strip", z.ZodTypeAny, {
44
- state: string;
45
44
  asOfCommit: string;
46
45
  predicate: string;
46
+ state: string;
47
47
  window: {
48
48
  type: "all";
49
49
  } | {
@@ -51,15 +51,15 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
51
51
  n: number;
52
52
  };
53
53
  codePathClassifier: {
54
- includeGlobs: string[];
55
54
  excludeGlobs: string[];
55
+ includeGlobs: string[];
56
56
  };
57
57
  excludeRevertPairs: boolean;
58
58
  excludeBotPrs: boolean;
59
59
  }, {
60
- state: string;
61
60
  asOfCommit: string;
62
61
  predicate: string;
62
+ state: string;
63
63
  window: {
64
64
  type: "all";
65
65
  } | {
@@ -67,8 +67,8 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
67
67
  n: number;
68
68
  };
69
69
  codePathClassifier: {
70
- includeGlobs: string[];
71
70
  excludeGlobs: string[];
71
+ includeGlobs: string[];
72
72
  };
73
73
  excludeRevertPairs?: boolean | undefined;
74
74
  excludeBotPrs?: boolean | undefined;
@@ -190,9 +190,9 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
190
190
  repo: string;
191
191
  gate: string;
192
192
  selectionRule: {
193
- state: string;
194
193
  asOfCommit: string;
195
194
  predicate: string;
195
+ state: string;
196
196
  window: {
197
197
  type: "all";
198
198
  } | {
@@ -200,8 +200,8 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
200
200
  n: number;
201
201
  };
202
202
  codePathClassifier: {
203
- includeGlobs: string[];
204
203
  excludeGlobs: string[];
204
+ includeGlobs: string[];
205
205
  };
206
206
  excludeRevertPairs: boolean;
207
207
  excludeBotPrs: boolean;
@@ -246,9 +246,9 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
246
246
  repo: string;
247
247
  gate: string;
248
248
  selectionRule: {
249
- state: string;
250
249
  asOfCommit: string;
251
250
  predicate: string;
251
+ state: string;
252
252
  window: {
253
253
  type: "all";
254
254
  } | {
@@ -256,8 +256,8 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
256
256
  n: number;
257
257
  };
258
258
  codePathClassifier: {
259
- includeGlobs: string[];
260
259
  excludeGlobs: string[];
260
+ includeGlobs: string[];
261
261
  };
262
262
  excludeRevertPairs?: boolean | undefined;
263
263
  excludeBotPrs?: boolean | undefined;
@@ -302,9 +302,9 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
302
302
  repo: string;
303
303
  gate: string;
304
304
  selectionRule: {
305
- state: string;
306
305
  asOfCommit: string;
307
306
  predicate: string;
307
+ state: string;
308
308
  window: {
309
309
  type: "all";
310
310
  } | {
@@ -312,8 +312,8 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
312
312
  n: number;
313
313
  };
314
314
  codePathClassifier: {
315
- includeGlobs: string[];
316
315
  excludeGlobs: string[];
316
+ includeGlobs: string[];
317
317
  };
318
318
  excludeRevertPairs: boolean;
319
319
  excludeBotPrs: boolean;
@@ -358,9 +358,9 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
358
358
  repo: string;
359
359
  gate: string;
360
360
  selectionRule: {
361
- state: string;
362
361
  asOfCommit: string;
363
362
  predicate: string;
363
+ state: string;
364
364
  window: {
365
365
  type: "all";
366
366
  } | {
@@ -368,8 +368,8 @@ export declare const CertCorpusSeedSchema: z.ZodEffects<z.ZodObject<{
368
368
  n: number;
369
369
  };
370
370
  codePathClassifier: {
371
- includeGlobs: string[];
372
371
  excludeGlobs: string[];
372
+ includeGlobs: string[];
373
373
  };
374
374
  excludeRevertPairs?: boolean | undefined;
375
375
  excludeBotPrs?: boolean | undefined;
@@ -49,7 +49,10 @@ export interface CompileStageResult {
49
49
  classifierLedger: ClassifierLedger;
50
50
  }
51
51
  /**
52
- * Compile a single compile-routed candidate's `dslSource` into a `CompiledRule`.
52
+ * Compile a single compile-routed candidate's rule CARRIER into a `CompiledRule`.
53
+ * A candidate carries exactly one: the mined producer's lesson-markdown `dslSource`
54
+ * (parsed here by `extractManualPattern`) or the authored producer's already-parsed
55
+ * Prop 310 `record` (lowered by `compileRuleRecord`). Both/neither throws up front.
53
56
  * PURE (no IO). Throws — fail loud, never a silent skip — on a behavioral candidate
54
57
  * (FM(c) code backstop) or a structural candidate whose `dslSource` yields no usable
55
58
  * pattern (a producer-contract violation: slice-2's `isUsableDsl` preflight should
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/spine/compile.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAuB,MAAM,cAAc,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,wBAAwB,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,gGAAgG;AAChG,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,2GAA2G;IAC3G,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAOD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,qBAAqB,EAChC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACpB,cAAc,CA6FhB;AA6DD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAyF7B"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/spine/compile.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EAExB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAuB,MAAM,cAAc,CAAC;AAM1E;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,wBAAwB,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC7C,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,gGAAgG;AAChG,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC;IACZ,iFAAiF;IACjF,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,2GAA2G;IAC3G,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,qBAAqB,EAChC,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACpB,cAAc,CAgJhB;AA6DD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAyF7B"}