instar 1.3.966 → 1.3.968
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/dist/core/TopicIntentExtractor.d.ts.map +1 -1
- package/dist/core/TopicIntentExtractor.js +28 -1
- package/dist/core/TopicIntentExtractor.js.map +1 -1
- package/dist/data/provenanceCoverage.d.ts +2 -0
- package/dist/data/provenanceCoverage.d.ts.map +1 -1
- package/dist/data/provenanceCoverage.js +24 -3
- package/dist/data/provenanceCoverage.js.map +1 -1
- package/package.json +1 -1
- package/scripts/generate-spec-contract.mjs +249 -12
- package/src/data/builtin-manifest.json +2 -2
- package/src/data/provenanceCoverage.ts +26 -3
- package/upgrades/1.3.967.md +75 -0
- package/upgrades/1.3.968.md +121 -0
- package/upgrades/side-effects/enrol-topic-intent-extract.md +101 -0
- package/upgrades/side-effects/spec-contract-generator.md +187 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopicIntentExtractor.d.ts","sourceRoot":"","sources":["../../src/core/TopicIntentExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"TopicIntentExtractor.d.ts","sourceRoot":"","sources":["../../src/core/TopicIntentExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EACL,gBAAgB,EAEhB,KAAK,aAAa,EAElB,KAAK,OAAO,EACZ,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKvD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,0EAA0E;IAC1E,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC;IACpD,kEAAkE;IAClE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,uEAAuE;IACvE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;gBADT,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,SAAS;IAG9B;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAwB7D;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CA0C1B;AAED;;;;;;;GAOG;AACH,0FAA0F;AAC1F,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAStC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CA4CxG;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAkBpE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG,OAAO,CAAC;AAE/D,wBAAgB,kBAAkB,CAChC,YAAY,CAAC,EAAE,oBAAoB,EACnC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAClE,SAAS,CAiDX"}
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* The extractor returns the events it CREATED so callers can act on them
|
|
13
13
|
* (e.g., trigger conflict-mark when two refs come into conflict).
|
|
14
14
|
*/
|
|
15
|
-
import { randomUUID } from 'node:crypto';
|
|
15
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
16
|
+
import { DP_TOPIC_INTENT_EXTRACT } from '../data/provenanceCoverage.js';
|
|
16
17
|
import { buildEvent, } from './TopicIntent.js';
|
|
17
18
|
/** Allowed proposition kinds an extractFn may propose (validated at translate). */
|
|
18
19
|
const VALID_REF_KINDS = new Set(['fact', 'decision', 'method', 'audience', 'goal']);
|
|
@@ -197,6 +198,32 @@ export function createLlmExtractFn(intelligence, onDegrade) {
|
|
|
197
198
|
temperature: 0,
|
|
198
199
|
maxTokens: 600,
|
|
199
200
|
attribution: { component: 'TopicIntentExtractor' },
|
|
201
|
+
// LLM-Decision Quality Meter §5.1.4/§5.6 enrollment. Observability ONLY:
|
|
202
|
+
// the settlement seam consumes this block and records on its own path —
|
|
203
|
+
// it never reaches the model and never alters the extraction. A
|
|
204
|
+
// provenance write failure is contained by the recorder's fail-open
|
|
205
|
+
// contract, so it cannot break the degrade-safe [] guarantee above.
|
|
206
|
+
//
|
|
207
|
+
// IDENTITY ONLY. The input is a user TURN plus a rolling conversational
|
|
208
|
+
// summary — both untrusted and quotable. Neither enters the row; what
|
|
209
|
+
// does is an explicit allowlist of derived values, so a future field on
|
|
210
|
+
// ExtractorInput cannot appear here by default.
|
|
211
|
+
provenance: {
|
|
212
|
+
decisionPoint: DP_TOPIC_INTENT_EXTRACT,
|
|
213
|
+
context: {
|
|
214
|
+
topicId: input.topicId,
|
|
215
|
+
arcId: input.arcId,
|
|
216
|
+
messageId: input.message.id,
|
|
217
|
+
messageSha256: createHash('sha256').update(input.message.text ?? '').digest('hex'),
|
|
218
|
+
messageChars: (input.message.text ?? '').length,
|
|
219
|
+
fromUser: input.message.fromUser === true,
|
|
220
|
+
turn: input.message.turn,
|
|
221
|
+
existingRefCount: input.existingRefs.length,
|
|
222
|
+
hasRollingSummary: typeof input.rollingSummary === 'string' && input.rollingSummary.length > 0,
|
|
223
|
+
rollingSummaryChars: (input.rollingSummary ?? '').length,
|
|
224
|
+
},
|
|
225
|
+
optionsPresented: ['new-ref', 'reref', 'affirm', 'contradict'],
|
|
226
|
+
},
|
|
200
227
|
});
|
|
201
228
|
}
|
|
202
229
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopicIntentExtractor.js","sourceRoot":"","sources":["../../src/core/TopicIntentExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"TopicIntentExtractor.js","sourceRoot":"","sources":["../../src/core/TopicIntentExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -187,6 +187,8 @@ export declare const DP_COMPLETION_CLAIM_VERIFY = "completion-claim-verify";
|
|
|
187
187
|
export declare const DP_FEEDBACK_READINESS = "feedback-readiness";
|
|
188
188
|
/** The stop-justified authority (src/core/UnjustifiedStopGate.ts). */
|
|
189
189
|
export declare const DP_UNJUSTIFIED_STOP_GATE = "unjustified-stop-gate";
|
|
190
|
+
/** Topic-intent extraction from a conversational turn (src/core/TopicIntentExtractor.ts). */
|
|
191
|
+
export declare const DP_TOPIC_INTENT_EXTRACT = "topic-intent-extract";
|
|
190
192
|
export declare const PROVENANCE_COVERAGE: ReadonlyArray<ProvenanceCoverageEntry>;
|
|
191
193
|
export declare const SUBBUDGET_IMPLEMENTED = true;
|
|
192
194
|
/** Grading-ladder rungs, in PRECEDENCE ORDER (§5.4.3): earlier beats later.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenanceCoverage.d.ts","sourceRoot":"","sources":["../../src/data/provenanceCoverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAMH,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;AAE7E,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,iBAAiB,CAGjE,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,wCAAwC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;;;;;;OASG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAarE,CAAC;AAEF,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP,WAAW,MAAM,EAAE,GACnB,UAAU,iBAAiB,EAAE,GAC7B,4BAA4B,MAAM,EAAE,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,CAAC;AAE5E;;;;;;yEAMyE;AACzE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,iBAAiB,CAAC;AAE1D;;;;gBAIgB;AAChB,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,cAAc,MAAM,EAAE,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACtC;;;2CAGuC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;;gDAE4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC;yEACqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,oCAAoC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC;yEACqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;0EAGsE;IACtE,QAAQ,CAAC,cAAc,CAAC,EAAE,kBAAkB,GAAG,QAAQ,CAAC;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAUD;8EAC8E;AAC9E,eAAO,MAAM,0BAA0B,4BAA4B,CAAC;AAEpE,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAE5D;uDACuD;AACvD,eAAO,MAAM,4BAA4B,8BAA8B,CAAC;AAExE;;;;wCAIwC;AACxC,eAAO,MAAM,sBAAsB,wBAAwB,CAAC;AAE5D,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,4BAA4B,CAAC;AAEpE,0EAA0E;AAC1E,eAAO,MAAM,0BAA0B,4BAA4B,CAAC;AAEpE,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,uBAAuB,CAAC;AAE1D,sEAAsE;AACtE,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"provenanceCoverage.d.ts","sourceRoot":"","sources":["../../src/data/provenanceCoverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -102,6 +102,8 @@ export const DP_COMPLETION_CLAIM_VERIFY = 'completion-claim-verify';
|
|
|
102
102
|
export const DP_FEEDBACK_READINESS = 'feedback-readiness';
|
|
103
103
|
/** The stop-justified authority (src/core/UnjustifiedStopGate.ts). */
|
|
104
104
|
export const DP_UNJUSTIFIED_STOP_GATE = 'unjustified-stop-gate';
|
|
105
|
+
/** Topic-intent extraction from a conversational turn (src/core/TopicIntentExtractor.ts). */
|
|
106
|
+
export const DP_TOPIC_INTENT_EXTRACT = 'topic-intent-extract';
|
|
105
107
|
// ───────────────────────────────────────────────────────────────────────────
|
|
106
108
|
// The census
|
|
107
109
|
// ───────────────────────────────────────────────────────────────────────────
|
|
@@ -508,11 +510,30 @@ export const PROVENANCE_COVERAGE = [
|
|
|
508
510
|
reason: 'Per-turn topic routing over an inbound user turn; enrollment queued in the ACT-1193 uniform-provenance retrofit backlog.',
|
|
509
511
|
},
|
|
510
512
|
{
|
|
511
|
-
decisionPoint:
|
|
513
|
+
decisionPoint: DP_TOPIC_INTENT_EXTRACT,
|
|
512
514
|
component: 'TopicIntentExtractor',
|
|
513
|
-
status: '
|
|
515
|
+
status: 'wired',
|
|
516
|
+
// ~733 calls/7d (GET /metrics/features) — the highest-volume unenrolled
|
|
517
|
+
// point remaining after the stop gate. It fires on conversational turns, so
|
|
518
|
+
// a per-UTC-day COUNT budget rather than `full`: the decision_quality row is
|
|
519
|
+
// written for every settlement regardless, so counts stay complete while the
|
|
520
|
+
// provenance archive is capped.
|
|
521
|
+
volumeClass: 'budget:200',
|
|
522
|
+
// Content-bearing: the extractor reads a user TURN and a rolling
|
|
523
|
+
// conversational summary — both untrusted, both quotable. Entered as
|
|
524
|
+
// IDENTITY ONLY (hashes, counts, code-derived booleans); never the message
|
|
525
|
+
// text, never the summary.
|
|
514
526
|
contentClass: 'content-bearing',
|
|
515
|
-
|
|
527
|
+
gradingPosture: 'measurement-only',
|
|
528
|
+
gradingReason: 'No outcome rule exists YET. Grading an extraction needs a downstream fact — ' +
|
|
529
|
+
'was the proposed signal later affirmed, contradicted, or silently dropped by ' +
|
|
530
|
+
'the arc it was attached to? Those transitions exist in the intent store but ' +
|
|
531
|
+
'joining them to a decision row is real plumbing, not a predicate. Enrolling ' +
|
|
532
|
+
'the DECISION side first is deliberate and is what this posture is for: rows ' +
|
|
533
|
+
'accumulate now so the grader has history when it lands. Declared rather than ' +
|
|
534
|
+
'left implicit so the census shows recorded-not-graded instead of implying ' +
|
|
535
|
+
'this point is measured when only half of it is.',
|
|
536
|
+
reason: 'Topic-intent extraction from a conversational turn — the highest-volume unenrolled point after the stop gate.',
|
|
516
537
|
},
|
|
517
538
|
{
|
|
518
539
|
decisionPoint: 'pre-compaction-flush',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenanceCoverage.js","sourceRoot":"","sources":["../../src/data/provenanceCoverage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AASH,MAAM,CAAC,MAAM,oBAAoB,GAAqC;IACpE,oBAAoB;IACpB,qBAAqB;CACtB,CAAC;AAiDF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA6C;IACxE,4BAA4B,EAAE;QAC5B,GAAG,EAAE,4BAA4B;QACjC,KAAK,EAAE,4EAA4E;QACnF,OAAO,EACL,uEAAuE;YACvE,uEAAuE;YACvE,4EAA4E;QAC9E,gBAAgB,EACd,yEAAyE;YACzE,2EAA2E;YAC3E,+DAA+D;KAClE;CACF,CAAC;AAEF,qEAAqE;AACrE,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;AACrE,CAAC;AAuED,8EAA8E;AAC9E,gEAAgE;AAChE,EAAE;AACF,+EAA+E;AAC/E,0EAA0E;AAC1E,qDAAqD;AACrD,8EAA8E;AAE9E;8EAC8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAEpE,gFAAgF;AAChF,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAE5D;uDACuD;AACvD,MAAM,CAAC,MAAM,4BAA4B,GAAG,2BAA2B,CAAC;AAExE;;;;wCAIwC;AACxC,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAE5D,wEAAwE;AACxE,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAEpE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAEpE,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAE1D,sEAAsE;AACtE,MAAM,CAAC,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAEhE,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAA2C;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E;QACE,aAAa,EAAE,0BAA0B;QACzC,SAAS,EAAE,uBAAuB;QAClC,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM;QACnB,4EAA4E;QAC5E,2EAA2E;QAC3E,+EAA+E;QAC/E,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,wJAAwJ;KAC3J;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM;QACnB,wEAAwE;QACxE,2DAA2D;QAC3D,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,yJAAyJ;KAC5J;IACD;QACE,aAAa,EAAE,4BAA4B;QAC3C,SAAS,EAAE,yBAAyB;QACpC,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,2JAA2J;KAC9J;IAED,uEAAuE;IACvE,4EAA4E;IAC5E,8EAA8E;IAC9E;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,OAAO;QACf,yEAAyE;QACzE,uEAAuE;QACvE,uEAAuE;QACvE,2EAA2E;QAC3E,4EAA4E;QAC5E,yEAAyE;QACzE,oDAAoD;QACpD,WAAW,EAAE,YAAY;QACzB,0EAA0E;QAC1E,0EAA0E;QAC1E,wEAAwE;QACxE,2EAA2E;QAC3E,kEAAkE;QAClE,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,mJAAmJ;KACtJ;IACD;QACE,aAAa,EAAE,0BAA0B;QACzC,SAAS,EAAE,yBAAyB;QACpC,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,YAAY;QACzB,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,4JAA4J;KAC/J;IACD;QACE,aAAa,EAAE,0BAA0B;QACzC,SAAS,EAAE,yBAAyB;QACpC,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,YAAY;QACzB,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,sKAAsK;KACzK;IACD;QACE,aAAa,EAAE,qBAAqB;QACpC,SAAS,EAAE,0BAA0B;QACrC,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,YAAY;QACzB,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,yKAAyK;KAC5K;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,mEAAmE;IACnE,sEAAsE;IACtE,gEAAgE;IAChE,gEAAgE;IAChE,0EAA0E;IAC1E,6EAA6E;IAE7E,gBAAgB;IAChB;QACE,aAAa,EAAE,aAAa;QAC5B,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,wHAAwH;KAC3H;IACD;QACE,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,yBAAyB;QACpC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,2HAA2H;KAC9H;IACD;QACE,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,kBAAkB;QAC7B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,oHAAoH;KACvH;IACD;QACE,aAAa,EAAE,mBAAmB;QAClC,SAAS,EAAE,oBAAoB;QAC/B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,qHAAqH;KACxH;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,mHAAmH;KACtH;IACD;QACE,aAAa,EAAE,2BAA2B;QAC1C,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,mJAAmJ;KACtJ;IACD;QACE,aAAa,EAAE,qBAAqB;QACpC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,wIAAwI;KAC3I;IACD;QACE,aAAa,EAAE,0BAA0B;QACzC,SAAS,EAAE,0BAA0B;QACrC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,8HAA8H;KACjI;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,yHAAyH;KAC5H;IACD;QACE,aAAa,EAAE,qBAAqB;QACpC,SAAS,EAAE,oBAAoB;QAC/B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,gIAAgI;KACnI;IACD;QACE,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,sIAAsI;KACzI;IACD;QACE,aAAa,EAAE,qBAAqB;QACpC,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,kJAAkJ;KACrJ;IAED,YAAY;IACZ;QACE,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,yHAAyH;KAC5H;IACD;QACE,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,uBAAuB;QAClC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,yIAAyI;KAC5I;IACD;QACE,aAAa,EAAE,qBAAqB;QACpC,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,wHAAwH;KAC3H;IACD;QACE,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,OAAO;QACf,0EAA0E;QAC1E,2EAA2E;QAC3E,4EAA4E;QAC5E,0EAA0E;QAC1E,oEAAoE;QACpE,0EAA0E;QAC1E,wDAAwD;QACxD,WAAW,EAAE,YAAY;QACzB,6EAA6E;QAC7E,2EAA2E;QAC3E,8CAA8C;QAC9C,YAAY,EAAE,iBAAiB;QAC/B,wEAAwE;QACxE,+DAA+D;QAC/D,cAAc,EAAE,kBAAkB;QAClC,aAAa,EACX,gFAAgF;YAChF,iFAAiF;YACjF,oFAAoF;YACpF,mFAAmF;YACnF,mFAAmF;YACnF,qFAAqF;YACrF,oFAAoF;YACpF,8EAA8E;YAC9E,0DAA0D;QAC5D,MAAM,EACJ,mFAAmF;KACtF;IACD;QACE,aAAa,EAAE,kBAAkB;QACjC,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,oMAAoM;KACvM;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,sBAAsB;QACjC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,iJAAiJ;KACpJ;IACD;QACE,aAAa,EAAE,qBAAqB;QACpC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,8HAA8H;KACjI;IACD;QACE,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,yBAAyB;QACpC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,qIAAqI;KACxI;IACD;QACE,aAAa,EAAE,cAAc;QAC7B,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,yIAAyI;KAC5I;IACD;QACE,aAAa,EAAE,iBAAiB;QAChC,SAAS,EAAE,kBAAkB;QAC7B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,4IAA4I;KAC/I;IACD;QACE,aAAa,EAAE,eAAe;QAC9B,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,+HAA+H;KAClI;IAED,iBAAiB;IACjB;QACE,aAAa,EAAE,aAAa;QAC5B,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,2HAA2H;KAC9H;IACD;QACE,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE,oBAAoB;QAC/B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,4HAA4H;KAC/H;IACD;QACE,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,oHAAoH;KACvH;IACD;QACE,aAAa,EAAE,aAAa;QAC5B,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,4HAA4H;KAC/H;IACD;QACE,aAAa,EAAE,iBAAiB;QAChC,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,2HAA2H;KAC9H;IACD;QACE,aAAa,EAAE,qBAAqB;QACpC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,wIAAwI;KAC3I;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,4HAA4H;KAC/H;IACD;QACE,aAAa,EAAE,8BAA8B;QAC7C,SAAS,EAAE,8BAA8B;QACzC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,mIAAmI;KACtI;IACD;QACE,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE,oBAAoB;QAC/B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,+HAA+H;KAClI;IACD;QACE,aAAa,EAAE,mBAAmB;QAClC,SAAS,EAAE,wBAAwB;QACnC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,qIAAqI;KACxI;IAED,WAAW;IACX;QACE,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE,oBAAoB;QAC/B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,2IAA2I;KAC9I;IACD;QACE,aAAa,EAAE,6BAA6B;QAC5C,SAAS,EAAE,mBAAmB;QAC9B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,wHAAwH;KAC3H;IACD;QACE,aAAa,EAAE,2BAA2B;QAC1C,SAAS,EAAE,6BAA6B;QACxC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,6IAA6I;KAChJ;IAED,0EAA0E;IAC1E;QACE,aAAa,EAAE,gBAAgB;QAC/B,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,+HAA+H;KAClI;IACD;QACE,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,wBAAwB;QACnC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,sHAAsH;KACzH;IACD;QACE,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,kIAAkI;KACrI;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,sIAAsI;KACzI;IACD;QACE,aAAa,EAAE,mBAAmB;QAClC,SAAS,EAAE,OAAO;QAClB,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,0HAA0H;KAC7H;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,sBAAsB;QACjC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,kHAAkH;KACrH;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,oBAAoB;QAC/B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,qIAAqI;KACxI;IACD;QACE,aAAa,EAAE,iBAAiB;QAChC,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,qHAAqH;KACxH;IACD;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,2IAA2I;KAC9I;IACD;QACE,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,uBAAuB;QAClC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,4HAA4H;KAC/H;IACD;QACE,aAAa,EAAE,uBAAuB;QACtC,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,sIAAsI;KACzI;IACD;QACE,aAAa,EAAE,oBAAoB;QACnC,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,qIAAqI;KACxI;IACD;QACE,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,4CAA4C;QACpD,YAAY,EAAE,iBAAiB;QAC/B,MAAM,EACJ,yHAAyH;KAC5H;IAED,4EAA4E;IAC5E;QACE,aAAa,EAAE,sBAAsB;QACrC,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,2BAA2B;QACnC,YAAY,EAAE,UAAU;QACxB,MAAM,EACJ,uKAAuK;KAC1K;IACD;QACE,aAAa,EAAE,wBAAwB;QACvC,SAAS,EAAE,cAAc;QACzB,MAAM,EAAE,2BAA2B;QACnC,YAAY,EAAE,UAAU;QACxB,MAAM,EACJ,2JAA2J;KAC9J;IACD;QACE,aAAa,EAAE,2BAA2B;QAC1C,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,2BAA2B;QACnC,YAAY,EAAE,UAAU;QACxB,MAAM,EACJ,6JAA6J;KAChK;IACD;QACE,aAAa,EAAE,yBAAyB;QACxC,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,2BAA2B;QACnC,YAAY,EAAE,UAAU;QACxB,MAAM,EACJ,uIAAuI;KAC1I;IACD;QACE,aAAa,EAAE,4BAA4B;QAC3C,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,2BAA2B;QACnC,YAAY,EAAE,UAAU;QACxB,MAAM,EACJ,4KAA4K;KAC/K;IACD;QACE,aAAa,EAAE,+BAA+B;QAC9C,SAAS,EAAE,4BAA4B;QACvC,MAAM,EAAE,4BAA4B;QACpC,YAAY,EAAE,UAAU;QACxB,MAAM,EACJ,uPAAuP;KAC1P;CACF,CAAC;AAEF,8EAA8E;AAC9E,gDAAgD;AAChD,EAAE;AACF,iFAAiF;AACjF,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,mEAAmE;AACnE,4EAA4E;AAC5E,6EAA6E;AAC7E,+EAA+E;AAC/E,sEAAsE;AACtE,iFAAiF;AACjF,8EAA8E;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAE1C,8EAA8E;AAC9E,+EAA+E;AAC/E,2EAA2E;AAC3E,0EAA0E;AAC1E,2DAA2D;AAC3D,EAAE;AACF,2EAA2E;AAC3E,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,uCAAuC;AACvC,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,4DAA4D;AAC5D,8EAA8E;AAE9E;oEACoE;AACpE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,4BAA4B;IAC5B,YAAY;IACZ,iBAAiB,EAAE,2FAA2F;IAC9G,aAAa;CACL,CAAC;AAGX;;6CAE6C;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,qBAAqB;IACrB,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;CACL,CAAC;AAmBX,0EAA0E;AAC1E,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAClD,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpE,MAAM,CAAC,MAAM,aAAa,GAA2C;IACnE,gFAAgF;IAChF,0EAA0E;IAC1E,oFAAoF;IACpF,sBAAsB,EAAE;QACtB,MAAM,EAAE,sBAAsB;QAC9B,aAAa,EAAE,0BAA0B;QACzC,IAAI,EAAE,4BAA4B;QAClC,gBAAgB,EAAE,qBAAqB;QACvC,eAAe,EAAE,qBAAqB;QACtC,QAAQ,EAAE,sBAAsB;KACjC;IACD,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,uEAAuE;IACvE,wBAAwB,EAAE;QACxB,MAAM,EAAE,wBAAwB;QAChC,aAAa,EAAE,0BAA0B;QACzC,IAAI,EAAE,4BAA4B;QAClC,gBAAgB,EAAE,mBAAmB;QACrC,eAAe,EAAE,iBAAiB;QAClC,QAAQ,EAAE,sBAAsB;KACjC;IACD,4EAA4E;IAC5E,2EAA2E;IAC3E,qEAAqE;IACrE,6EAA6E;IAC7E,8CAA8C;IAC9C,yBAAyB,EAAE;QACzB,MAAM,EAAE,yBAAyB;QACjC,aAAa,EAAE,0BAA0B;QACzC,IAAI,EAAE,YAAY;QAClB,gBAAgB,EAAE,kBAAkB;QACpC,eAAe,EAAE,qBAAqB;QACtC,QAAQ,EAAE,sBAAsB;KACjC;IACD,2EAA2E;IAC3E,6EAA6E;IAC7E,2EAA2E;IAC3E,kDAAkD;IAClD,yBAAyB,EAAE;QACzB,MAAM,EAAE,yBAAyB;QACjC,aAAa,EAAE,sBAAsB;QACrC,IAAI,EAAE,4BAA4B;QAClC,gBAAgB,EAAE,qBAAqB;QACvC,eAAe,EAAE,qBAAqB;KACvC;IACD,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,4BAA4B,EAAE;QAC5B,MAAM,EAAE,4BAA4B;QACpC,aAAa,EAAE,0BAA0B;QACzC,IAAI,EAAE,aAAa;QACnB,gBAAgB,EAAE,aAAa;QAC/B,eAAe,EAAE,qBAAqB;KACvC;IACD,mCAAmC,EAAE;QACnC,MAAM,EAAE,mCAAmC;QAC3C,aAAa,EAAE,4BAA4B;QAC3C,IAAI,EAAE,aAAa;QACnB,gBAAgB,EAAE,aAAa;QAC/B,eAAe,EAAE,sBAAsB;KACxC;IACD,6EAA6E;IAC7E,8EAA8E;IAC9E,8EAA8E;IAC9E,0EAA0E;IAC1E,6EAA6E;IAC7E,+DAA+D;IAC/D,EAAE;IACF,2EAA2E;IAC3E,2EAA2E;IAC3E,+EAA+E;IAC/E,0EAA0E;IAC1E,yDAAyD;IACzD,wBAAwB,EAAE;QACxB,MAAM,EAAE,wBAAwB,EAAE,aAAa,EAAE,sBAAsB;QACvE,IAAI,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa;QACpD,eAAe,EAAE,kBAAkB;KACpC;IACD,wBAAwB,EAAE;QACxB,MAAM,EAAE,wBAAwB,EAAE,aAAa,EAAE,sBAAsB;QACvE,IAAI,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa;QACpD,eAAe,EAAE,kBAAkB;KACpC;IACD,sEAAsE;IACtE,2EAA2E;IAC3E,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,wBAAwB,EAAE;QACxB,MAAM,EAAE,wBAAwB,EAAE,aAAa,EAAE,sBAAsB;QACvE,IAAI,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,mBAAmB;QACzE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iCAAiC;KAChF;IACD,qCAAqC,EAAE;QACrC,MAAM,EAAE,qCAAqC,EAAE,aAAa,EAAE,0BAA0B;QACxF,IAAI,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,mBAAmB;QACzE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iCAAiC;KAChF;IACD,oCAAoC,EAAE;QACpC,MAAM,EAAE,oCAAoC,EAAE,aAAa,EAAE,0BAA0B;QACvF,IAAI,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,mBAAmB;QACzE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iCAAiC;KAChF;IACD,sCAAsC,EAAE;QACtC,MAAM,EAAE,sCAAsC,EAAE,aAAa,EAAE,qBAAqB;QACpF,IAAI,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,mBAAmB;QACzE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,iCAAiC;KAChF;CACF,CAAC;AAEF;4EAC4E;AAC5E,MAAM,UAAU,uBAAuB,CACrC,WAAmD,mBAAmB,EACtE,WAAmD,aAAa;IAEhE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAClF,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,KAAK,kBAAkB,IAAI,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC;QAClG,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;IACrE,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC;SACnC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;2CAE2C;AAC3C,MAAM,UAAU,yBAAyB,CACvC,WAAmD,mBAAmB,EACtE,WAAmD,aAAa;IAEhE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1G,KAAK,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QAC5C,IAAI,KAAK,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,oBAAoB,aAAa,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO;YAAE,SAAS;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,KAAK,kBAAkB,IAAI,KAAK,CAAC,cAAc,KAAK,QAAQ,CAAC;QAClG,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC;QACpE,IAAI,OAAO,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,uBAAuB,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,8EAA8E;AAC9E,4EAA4E;AAC5E,+CAA+C;AAC/C,8EAA8E;AAE9E,MAAM,eAAe,GAAiD,IAAI,GAAG,CAC3E,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CACrD,CAAC;AAEF,MAAM,mBAAmB,GAAiD,IAAI,GAAG,CAC/E,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CACjD,CAAC;AAEF;qEACqE;AACrE,MAAM,UAAU,cAAc,CAAC,aAAqB;IAClD,OAAO,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED;8EAC8E;AAC9E,MAAM,UAAU,yBAAyB,CAAC,YAAoB;IAC5D,OAAO,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED;wEACwE;AACxE,MAAM,UAAU,UAAU,CAAC,aAAqB;IAC9C,OAAO,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;AAChE,CAAC;AAED;;+EAE+E;AAC/E,MAAM,UAAU,cAAc,CAAC,aAAqB;IAClD,MAAM,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED;6EAC6E;AAC7E,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"provenanceCoverage.js","sourceRoot":"","sources":["../../src/data/provenanceCoverage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -22,7 +22,8 @@ import fs from 'node:fs';
|
|
|
22
22
|
import path from 'node:path';
|
|
23
23
|
|
|
24
24
|
/** A heading that begins the review-history half. Matched case-insensitively. */
|
|
25
|
-
const HISTORY_HEADING_RE =
|
|
25
|
+
const HISTORY_HEADING_RE =
|
|
26
|
+
/^##\s+(?:\d+\.\s+)?(?:Round-\d+\b[^\n]*?(?:change log|hand-check|consistency sweep)|Review record\b|Appendix\b)/i;
|
|
26
27
|
|
|
27
28
|
/** Headings that are contract even though they sort after a history heading. */
|
|
28
29
|
const ALWAYS_CONTRACT_RE = /^##\s+(?:\d+\.\s+)?(?:Decision points touched|Open questions|Frontloaded Decisions|Dependencies|Honest limits|Multi-machine posture|What this does not do)/i;
|
|
@@ -53,11 +54,176 @@ export function stripInlineAnnotations(text) {
|
|
|
53
54
|
return out.replace(/[ \t]{2,}/g, ' ').replace(/ +([.,;:])/g, '$1');
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
/**
|
|
58
|
+
* A blockquote block that exists to talk ABOUT the document — normative-boundary
|
|
59
|
+
* markers, "this file is rationale", scope-changed notices. They are meta, not
|
|
60
|
+
* contract, and they read as especially authoritative because of the `>` and the
|
|
61
|
+
* bold. Round-37 (codex) found several of them surviving into the generated
|
|
62
|
+
* contract, where a "NON-NORMATIVE FROM HERE" marker inside a file that claims to
|
|
63
|
+
* be normative-only is worse than no marker at all.
|
|
64
|
+
*/
|
|
65
|
+
const META_BLOCKQUOTE_RE =
|
|
66
|
+
/^>\s*(?:#{1,4}\s*)?\**\s*(?:NON-)?NORMATIVE\b|^>\s*\**\s*(?:It (?:is|began)|This file|Build from|The normative artifact|And the review)/i;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A residual the generator CANNOT remove: narrative prose that states a rule and
|
|
70
|
+
* narrates its history in the same sentence ("round-36 found this paragraph
|
|
71
|
+
* stating only the p99"). Counting them is the honest alternative to pretending
|
|
72
|
+
* they are gone — the run reports the number so a reader knows what they are
|
|
73
|
+
* getting.
|
|
74
|
+
*/
|
|
75
|
+
const NARRATIVE_HISTORY_RE = /\b(?:round|rounds)[- ]\d+\b/gi;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* STRICT mode (`--strict`): an ALLOWLIST of contract-bearing headings, instead of
|
|
79
|
+
* the default denylist of history headings.
|
|
80
|
+
*
|
|
81
|
+
* The denylist answers "what is definitely history?" and keeps everything else.
|
|
82
|
+
* That is the wrong default for an implementation artifact: rationale, accepted
|
|
83
|
+
* residuals and self-correcting narrative are all "not definitely history", so
|
|
84
|
+
* they survive — and SEVEN consecutive review rounds (33-39) said the resulting
|
|
85
|
+
* contract still read as archaeology. An allowlist answers the question that
|
|
86
|
+
* actually matters, "what must be built?", and everything else is absent by
|
|
87
|
+
* default rather than by pattern-match.
|
|
88
|
+
*
|
|
89
|
+
* Kept deliberately narrow: the contract table, rollout/acceptance, honest
|
|
90
|
+
* limits, decision points, and the test plan. Rationale lives in the source spec,
|
|
91
|
+
* which is where a reader goes for judgment.
|
|
92
|
+
*/
|
|
93
|
+
const STRICT_CONTRACT_HEADING_RE =
|
|
94
|
+
/^#{2,3}\s+(?:\d+(?:\.\d+)*\.?\s+)?(?:Final contract|What an implementer builds|Current design overview|Design\b|Glossary|Normative outcome table|Rollout|Honest limits|Privacy posture|Decision points touched|Open questions|Frontloaded Decisions|Dependencies|Multi-machine posture|Test plan|Fail directions|What this does not do)/i;
|
|
95
|
+
|
|
96
|
+
export function splitStrictContract(markdown) {
|
|
97
|
+
const lines = markdown.split('\n');
|
|
98
|
+
// Pre-pass: how big is each allowlisted section in the SOURCE (to the next
|
|
99
|
+
// heading of the same-or-higher level)?
|
|
100
|
+
const sourceSizes = new Map();
|
|
101
|
+
for (let i = 0; i < lines.length; i++) {
|
|
102
|
+
if (!STRICT_CONTRACT_HEADING_RE.test(lines[i])) continue;
|
|
103
|
+
const level = (lines[i].match(/^#+/) || ['##'])[0].length;
|
|
104
|
+
let bytes = 0;
|
|
105
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
106
|
+
const m = lines[j].match(/^(#+)\s/);
|
|
107
|
+
// The source measure must NOT use the capture's stopping rule, or it
|
|
108
|
+
// shrinks in lockstep with the truncation it is meant to detect (an
|
|
109
|
+
// interior non-allowlisted H3 would end both, and the guard sees nothing).
|
|
110
|
+
// Stop at the next ALLOWLISTED heading, the next H2, or a NUMBERED SIBLING
|
|
111
|
+
// at the same level.
|
|
112
|
+
//
|
|
113
|
+
// The sibling test is what separates the two shapes this guard cannot
|
|
114
|
+
// otherwise tell apart (both are "a same-level heading follows"):
|
|
115
|
+
// "### 3.0 Final contract" → "### Normative checklist" = meant as a CHILD;
|
|
116
|
+
// its content belongs to 3.0 and capture losing it is a real defect.
|
|
117
|
+
// "### 3.10 Test plan" → "### 3.11 Judgeable-record" = a genuine SIBLING;
|
|
118
|
+
// its content was never 3.10's and excluding it is correct.
|
|
119
|
+
// Without this, the guard fired permanently on every numbered spec — and a
|
|
120
|
+
// warning that always fires is one nobody reads (the lesson from its own
|
|
121
|
+
// second implementation).
|
|
122
|
+
const isNumberedSibling = m && m[1].length === level && /^#+\s+\d+(\.\d+)*[.\s]/.test(lines[j]);
|
|
123
|
+
if (m && (STRICT_CONTRACT_HEADING_RE.test(lines[j]) || m[1].length <= 2 || isNumberedSibling)) break;
|
|
124
|
+
// Content that belongs to a NESTED allowlisted subsection is captured
|
|
125
|
+
// under that subsection's own entry — it is not lost, so it must not
|
|
126
|
+
// count against this section (otherwise a container heading like
|
|
127
|
+
// "## 4. Honest limits" followed by an allowlisted "### 4.0 …" warns
|
|
128
|
+
// forever, and a guard that always warns is a guard nobody reads).
|
|
129
|
+
bytes += lines[j].length + 1;
|
|
130
|
+
}
|
|
131
|
+
sourceSizes.set(lines[i].trim(), bytes);
|
|
132
|
+
}
|
|
133
|
+
const kept = [];
|
|
134
|
+
let keeping = false;
|
|
135
|
+
let openLevel = 0;
|
|
136
|
+
let keptSections = 0;
|
|
137
|
+
const sectionSizes = [];
|
|
138
|
+
// Front matter always rides along — it carries the approval + convergence tags.
|
|
139
|
+
let inFrontMatter = lines[0] === '---';
|
|
140
|
+
for (let i = 0; i < lines.length; i++) {
|
|
141
|
+
const line = lines[i];
|
|
142
|
+
if (inFrontMatter) {
|
|
143
|
+
kept.push(line);
|
|
144
|
+
if (i > 0 && line === '---') inFrontMatter = false;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
if (/^#{1,3}\s/.test(line)) {
|
|
148
|
+
const level = (line.match(/^#+/) || ['##'])[0].length;
|
|
149
|
+
if (STRICT_CONTRACT_HEADING_RE.test(line)) {
|
|
150
|
+
keeping = true;
|
|
151
|
+
openLevel = level;
|
|
152
|
+
keptSections++;
|
|
153
|
+
sectionSizes.push({ heading: line.trim(), bytes: 0, sourceBytes: sourceSizes.get(line.trim()) || 0 });
|
|
154
|
+
} else if (keeping && level > openLevel) {
|
|
155
|
+
// A NON-allowlisted sub-heading DEEPER than the open section is that
|
|
156
|
+
// section's own child — "### 3.2 The credential arm" under "## 3.
|
|
157
|
+
// Design". Closing on it silently emptied the section while the section
|
|
158
|
+
// COUNT stayed the same, so the contract looked complete and was not:
|
|
159
|
+
// the outbound-gate design (86 KB) shipped as 14 bytes, and the reviews
|
|
160
|
+
// run against it produced four objections the missing text already
|
|
161
|
+
// answered. Children ride along; a sibling or an allowlisted heading
|
|
162
|
+
// still closes it.
|
|
163
|
+
} else {
|
|
164
|
+
keeping = false;
|
|
165
|
+
}
|
|
166
|
+
// An H1 (the title) is kept as an anchor but does not open a section.
|
|
167
|
+
if (/^#\s/.test(line)) {
|
|
168
|
+
kept.push(line);
|
|
169
|
+
keeping = false;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (keeping) {
|
|
174
|
+
kept.push(line);
|
|
175
|
+
if (sectionSizes.length) sectionSizes[sectionSizes.length - 1].bytes += line.length + 1;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const body = stripInlineAnnotations(kept.join('\n')).replace(/\n{4,}/g, '\n\n\n');
|
|
179
|
+
const narrativeResidual = (body.match(NARRATIVE_HISTORY_RE) || []).length;
|
|
180
|
+
// Guard against the allowlist's own failure mode: SILENT OMISSION. If strict
|
|
181
|
+
// mode keeps only a small slice of a large spec, the likely cause is that the
|
|
182
|
+
// spec's headings do not match the allowlist — not that the spec is mostly
|
|
183
|
+
// rationale. Confirmed in practice on outbound-gate-advisory-override, where
|
|
184
|
+
// the normative outcome table lived under headings the list did not name, and
|
|
185
|
+
// the reviewer's first finding was "normative behavior is missing".
|
|
186
|
+
const sourceHeadings = (markdown.match(/^#{2,3}\s/gm) || []).length;
|
|
187
|
+
const keptRatio = sourceHeadings ? keptSections / sourceHeadings : 1;
|
|
188
|
+
// Section COUNT is not content coverage: an H3 inside an allowlisted section
|
|
189
|
+
// ends its capture, silently emptying it while the count stays identical.
|
|
190
|
+
// Observed live (2026-07-25) — a new "### Normative checklist" heading inside
|
|
191
|
+
// §3.0 dropped the entire contract table and the checklist itself from the
|
|
192
|
+
// output, and the capture-ratio guard below did not fire because 10 sections
|
|
193
|
+
// still "matched". So also guard on captured BYTES per kept section.
|
|
194
|
+
// A short section is only suspicious when the SOURCE section is long — a
|
|
195
|
+
// container heading (e.g. "## 4. Honest limits" immediately followed by an
|
|
196
|
+
// allowlisted "### 4.0 …") is legitimately near-empty and must not warn.
|
|
197
|
+
const truncated = sectionSizes.filter(
|
|
198
|
+
(x) => x.sourceBytes > 1000 && x.bytes < x.sourceBytes * 0.25,
|
|
199
|
+
);
|
|
200
|
+
const thinSectionWarning = truncated.length
|
|
201
|
+
? `${truncated.length} allowlisted section(s) captured far less than the ` +
|
|
202
|
+
`source contains: ` +
|
|
203
|
+
truncated
|
|
204
|
+
.map((x) => `${x.heading} (${x.bytes}/${x.sourceBytes} bytes)`)
|
|
205
|
+
.join(' | ') +
|
|
206
|
+
` — an H3 inside an allowlisted section ENDS its capture, emptying it while ` +
|
|
207
|
+
`the section count stays the same. Sub-headings inside a contract section ` +
|
|
208
|
+
`must be H4.`
|
|
209
|
+
: null;
|
|
210
|
+
const underCaptureWarning =
|
|
211
|
+
sourceHeadings >= 8 && keptRatio < 0.25
|
|
212
|
+
? `only ${keptSections}/${sourceHeadings} sections matched the allowlist ` +
|
|
213
|
+
`(${Math.round(keptRatio * 100)}%) — the strict contract may be MISSING ` +
|
|
214
|
+
`normative sections whose headings are not on the list. Verify before ` +
|
|
215
|
+
`building from it.`
|
|
216
|
+
: null;
|
|
217
|
+
return { contract: body, keptSections, narrativeResidual, sourceHeadings, underCaptureWarning, thinSectionWarning };
|
|
218
|
+
}
|
|
219
|
+
|
|
56
220
|
export function splitContract(markdown) {
|
|
57
221
|
const lines = markdown.split('\n');
|
|
58
222
|
const kept = [];
|
|
59
223
|
let inHistory = false;
|
|
224
|
+
let inMetaQuote = false;
|
|
60
225
|
let droppedSections = 0;
|
|
226
|
+
let droppedMetaBlocks = 0;
|
|
61
227
|
for (const line of lines) {
|
|
62
228
|
if (/^##\s/.test(line)) {
|
|
63
229
|
if (HISTORY_HEADING_RE.test(line) && !ALWAYS_CONTRACT_RE.test(line)) {
|
|
@@ -68,21 +234,56 @@ export function splitContract(markdown) {
|
|
|
68
234
|
// A non-history H2 ends a history run (sections are not strictly ordered).
|
|
69
235
|
inHistory = false;
|
|
70
236
|
}
|
|
237
|
+
// Meta blockquotes run until the first non-blockquote, non-blank line.
|
|
238
|
+
if (!inHistory) {
|
|
239
|
+
if (!inMetaQuote && META_BLOCKQUOTE_RE.test(line)) {
|
|
240
|
+
inMetaQuote = true;
|
|
241
|
+
droppedMetaBlocks++;
|
|
242
|
+
} else if (inMetaQuote && !/^>/.test(line) && line.trim() !== '') {
|
|
243
|
+
inMetaQuote = false;
|
|
244
|
+
}
|
|
245
|
+
if (inMetaQuote) continue;
|
|
246
|
+
}
|
|
71
247
|
if (!inHistory) kept.push(line);
|
|
72
248
|
}
|
|
73
249
|
const body = stripInlineAnnotations(kept.join('\n')).replace(/\n{4,}/g, '\n\n\n');
|
|
74
|
-
|
|
250
|
+
const narrativeResidual = (body.match(NARRATIVE_HISTORY_RE) || []).length;
|
|
251
|
+
return { contract: body, droppedSections, droppedMetaBlocks, narrativeResidual };
|
|
75
252
|
}
|
|
76
253
|
|
|
77
254
|
/** The banner that makes the generated file unmistakable and un-editable-by-hand. */
|
|
78
|
-
function banner(specRel) {
|
|
255
|
+
function banner(specRel, narrativeResidual, strict) {
|
|
256
|
+
if (strict) {
|
|
257
|
+
return [
|
|
258
|
+
'<!-- GENERATED FILE — DO NOT EDIT.',
|
|
259
|
+
` Source: ${specRel}`,
|
|
260
|
+
' Regenerate: node scripts/generate-spec-contract.mjs --spec ' + specRel + ' --strict',
|
|
261
|
+
' STRICT IMPLEMENTATION CONTRACT: allowlisted contract sections only.',
|
|
262
|
+
'',
|
|
263
|
+
' Everything not on the allowlist is ABSENT BY DEFAULT — including all',
|
|
264
|
+
' rationale. This file says WHAT to build, never why. Read the source',
|
|
265
|
+
' spec for the reasoning, the alternatives, and the accepted residuals',
|
|
266
|
+
' in their full form.',
|
|
267
|
+
` (${narrativeResidual} residual "round-N" reference(s) remain inline.)`,
|
|
268
|
+
'-->',
|
|
269
|
+
'',
|
|
270
|
+
].join('\n');
|
|
271
|
+
}
|
|
79
272
|
return [
|
|
80
273
|
'<!-- GENERATED FILE — DO NOT EDIT.',
|
|
81
274
|
` Source: ${specRel}`,
|
|
82
275
|
' Regenerate: node scripts/generate-spec-contract.mjs --spec ' + specRel,
|
|
83
|
-
' This is the IMPLEMENTATION CONTRACT
|
|
84
|
-
'
|
|
85
|
-
'
|
|
276
|
+
' This is the IMPLEMENTATION CONTRACT.',
|
|
277
|
+
'',
|
|
278
|
+
' REMOVED: history sections, delimited round-annotations, and blockquote',
|
|
279
|
+
' meta-blocks that talk about the document rather than the design.',
|
|
280
|
+
'',
|
|
281
|
+
' NOT REMOVED: narrative prose that states a rule and narrates its own',
|
|
282
|
+
' history in the same sentence. A transform cannot separate those without',
|
|
283
|
+
' judgment it deliberately does not have, so some review references remain',
|
|
284
|
+
` below (${narrativeResidual} occurrence(s) of "round-N" in this file).`,
|
|
285
|
+
' Where such a sentence describes what a design USED to be, the surrounding',
|
|
286
|
+
' normative statement governs. Read the source spec for full context.',
|
|
86
287
|
'-->',
|
|
87
288
|
'',
|
|
88
289
|
].join('\n');
|
|
@@ -99,12 +300,34 @@ function main() {
|
|
|
99
300
|
const check = args.includes('--check');
|
|
100
301
|
const specRel = path.relative(process.cwd(), specPath);
|
|
101
302
|
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
303
|
+
const strict = args.includes('--strict');
|
|
304
|
+
if (!fs.existsSync(specPath)) {
|
|
305
|
+
console.error(`ERROR: spec not found: ${specRel}`);
|
|
306
|
+
process.exit(2);
|
|
307
|
+
}
|
|
308
|
+
let markdown;
|
|
309
|
+
try {
|
|
310
|
+
markdown = fs.readFileSync(specPath, 'utf8');
|
|
311
|
+
} catch (err) {
|
|
312
|
+
console.error(`ERROR: cannot read ${specRel}: ${err instanceof Error ? err.message : err}`);
|
|
313
|
+
process.exit(2);
|
|
314
|
+
}
|
|
315
|
+
const res = strict ? splitStrictContract(markdown) : splitContract(markdown);
|
|
316
|
+
const { contract, narrativeResidual } = res;
|
|
317
|
+
const droppedSections = res.droppedSections ?? 0;
|
|
318
|
+
const droppedMetaBlocks = res.droppedMetaBlocks ?? 0;
|
|
319
|
+
const keptSections = res.keptSections ?? 0;
|
|
320
|
+
const output = banner(specRel, narrativeResidual, strict) + contract;
|
|
321
|
+
if (res.underCaptureWarning) {
|
|
322
|
+
console.error(`WARNING (strict): ${res.underCaptureWarning}`);
|
|
323
|
+
}
|
|
324
|
+
if (res.thinSectionWarning) {
|
|
325
|
+
console.error(`WARNING (strict): ${res.thinSectionWarning}`);
|
|
326
|
+
}
|
|
105
327
|
|
|
106
328
|
const slug = path.basename(specPath, '.md');
|
|
107
|
-
const
|
|
329
|
+
const suffix = strict ? '.contract.strict.md' : '.contract.md';
|
|
330
|
+
const outPath = path.join(path.dirname(specPath), 'generated', `${slug}${suffix}`);
|
|
108
331
|
|
|
109
332
|
if (check) {
|
|
110
333
|
if (!fs.existsSync(outPath)) {
|
|
@@ -119,7 +342,14 @@ function main() {
|
|
|
119
342
|
);
|
|
120
343
|
process.exit(1);
|
|
121
344
|
}
|
|
122
|
-
console.log(
|
|
345
|
+
console.log(
|
|
346
|
+
strict
|
|
347
|
+
? `OK: strict contract is current (${keptSections} allowlisted sections; ` +
|
|
348
|
+
`${narrativeResidual} narrative round-references remain).`
|
|
349
|
+
: `OK: contract is current (${droppedSections} history sections, ` +
|
|
350
|
+
`${droppedMetaBlocks} meta-blocks excluded; ${narrativeResidual} narrative ` +
|
|
351
|
+
`round-references remain).`,
|
|
352
|
+
);
|
|
123
353
|
return;
|
|
124
354
|
}
|
|
125
355
|
|
|
@@ -127,7 +357,14 @@ function main() {
|
|
|
127
357
|
fs.writeFileSync(outPath, output, 'utf8');
|
|
128
358
|
const pct = Math.round((1 - output.length / markdown.length) * 100);
|
|
129
359
|
console.log(
|
|
130
|
-
|
|
360
|
+
strict
|
|
361
|
+
? `wrote ${path.relative(process.cwd(), outPath)} — STRICT: ${keptSections} ` +
|
|
362
|
+
`allowlisted sections kept, ${pct}% smaller. RESIDUAL: ${narrativeResidual} ` +
|
|
363
|
+
`narrative round-reference(s).`
|
|
364
|
+
: `wrote ${path.relative(process.cwd(), outPath)} — ${droppedSections} history ` +
|
|
365
|
+
`sections + ${droppedMetaBlocks} meta-blocks excluded, ${pct}% smaller. ` +
|
|
366
|
+
`RESIDUAL: ${narrativeResidual} narrative round-reference(s) the transform ` +
|
|
367
|
+
`cannot remove.`,
|
|
131
368
|
);
|
|
132
369
|
}
|
|
133
370
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-07-25T18:
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-07-25T18:43:56.892Z",
|
|
5
|
+
"instarVersion": "1.3.968",
|
|
6
6
|
"entryCount": 202,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -240,6 +240,9 @@ export const DP_FEEDBACK_READINESS = 'feedback-readiness';
|
|
|
240
240
|
/** The stop-justified authority (src/core/UnjustifiedStopGate.ts). */
|
|
241
241
|
export const DP_UNJUSTIFIED_STOP_GATE = 'unjustified-stop-gate';
|
|
242
242
|
|
|
243
|
+
/** Topic-intent extraction from a conversational turn (src/core/TopicIntentExtractor.ts). */
|
|
244
|
+
export const DP_TOPIC_INTENT_EXTRACT = 'topic-intent-extract';
|
|
245
|
+
|
|
243
246
|
// ───────────────────────────────────────────────────────────────────────────
|
|
244
247
|
// The census
|
|
245
248
|
// ───────────────────────────────────────────────────────────────────────────
|
|
@@ -703,12 +706,32 @@ export const PROVENANCE_COVERAGE: ReadonlyArray<ProvenanceCoverageEntry> = [
|
|
|
703
706
|
'Per-turn topic routing over an inbound user turn; enrollment queued in the ACT-1193 uniform-provenance retrofit backlog.',
|
|
704
707
|
},
|
|
705
708
|
{
|
|
706
|
-
decisionPoint:
|
|
709
|
+
decisionPoint: DP_TOPIC_INTENT_EXTRACT,
|
|
707
710
|
component: 'TopicIntentExtractor',
|
|
708
|
-
status: '
|
|
711
|
+
status: 'wired',
|
|
712
|
+
// ~733 calls/7d (GET /metrics/features) — the highest-volume unenrolled
|
|
713
|
+
// point remaining after the stop gate. It fires on conversational turns, so
|
|
714
|
+
// a per-UTC-day COUNT budget rather than `full`: the decision_quality row is
|
|
715
|
+
// written for every settlement regardless, so counts stay complete while the
|
|
716
|
+
// provenance archive is capped.
|
|
717
|
+
volumeClass: 'budget:200',
|
|
718
|
+
// Content-bearing: the extractor reads a user TURN and a rolling
|
|
719
|
+
// conversational summary — both untrusted, both quotable. Entered as
|
|
720
|
+
// IDENTITY ONLY (hashes, counts, code-derived booleans); never the message
|
|
721
|
+
// text, never the summary.
|
|
709
722
|
contentClass: 'content-bearing',
|
|
723
|
+
gradingPosture: 'measurement-only',
|
|
724
|
+
gradingReason:
|
|
725
|
+
'No outcome rule exists YET. Grading an extraction needs a downstream fact — ' +
|
|
726
|
+
'was the proposed signal later affirmed, contradicted, or silently dropped by ' +
|
|
727
|
+
'the arc it was attached to? Those transitions exist in the intent store but ' +
|
|
728
|
+
'joining them to a decision row is real plumbing, not a predicate. Enrolling ' +
|
|
729
|
+
'the DECISION side first is deliberate and is what this posture is for: rows ' +
|
|
730
|
+
'accumulate now so the grader has history when it lands. Declared rather than ' +
|
|
731
|
+
'left implicit so the census shows recorded-not-graded instead of implying ' +
|
|
732
|
+
'this point is measured when only half of it is.',
|
|
710
733
|
reason:
|
|
711
|
-
'Topic-intent extraction from a
|
|
734
|
+
'Topic-intent extraction from a conversational turn — the highest-volume unenrolled point after the stop gate.',
|
|
712
735
|
},
|
|
713
736
|
{
|
|
714
737
|
decisionPoint: 'pre-compaction-flush',
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
`TopicIntentExtractor` — which reads each substantive conversation turn and
|
|
9
|
+
decides whether it introduces, re-references, affirms or contradicts a topic
|
|
10
|
+
signal — is now enrolled in the LLM-Decision Quality Meter.
|
|
11
|
+
|
|
12
|
+
At ~733 calls / 7 days it was the highest-volume unenrolled decision point
|
|
13
|
+
remaining after the stop gate, and nothing recorded what it concluded. The meter
|
|
14
|
+
can only answer "is this judgment any good?" for points that record.
|
|
15
|
+
|
|
16
|
+
**Identity only, and the leak surface here is unusually wide.** This extractor
|
|
17
|
+
reads a raw user turn *and* a rolling conversational summary — both untrusted,
|
|
18
|
+
and a summary leak republishes far more than one message. Neither is stored. The
|
|
19
|
+
context is an explicit allowlist of derived values:
|
|
20
|
+
|
|
21
|
+
- `messageSha256` + `messageChars` — distinguishes turns without reproducing one
|
|
22
|
+
- `topicId`, `arcId`, `messageId`, `fromUser`, `turn`
|
|
23
|
+
- `existingRefCount` — how many threads it had to anchor against
|
|
24
|
+
- `hasRollingSummary` + `rollingSummaryChars` — presence and size, never content
|
|
25
|
+
|
|
26
|
+
An allowlist rather than a filter, so a future field on the extractor's input
|
|
27
|
+
cannot leak by default. Tests plant a fake API key and password in the message
|
|
28
|
+
*and* a fake token and file path in the summary, asserting none of the four
|
|
29
|
+
reach the row.
|
|
30
|
+
|
|
31
|
+
**Declared `measurement-only`**, with an argued reason. Grading an extraction
|
|
32
|
+
needs a downstream fact — was the signal later affirmed, contradicted, or
|
|
33
|
+
silently dropped — and joining those transitions to a decision row is real
|
|
34
|
+
plumbing. The census reports recorded-not-graded rather than implying
|
|
35
|
+
measurement that doesn't exist.
|
|
36
|
+
|
|
37
|
+
**Degrade-safety preserved.** The extractor's core guarantee is that it returns
|
|
38
|
+
nothing rather than breaking the conversation it's attached to. Three tests cover
|
|
39
|
+
provider-throws, provider-missing, and the degrade callback still firing.
|
|
40
|
+
|
|
41
|
+
Volume valved at `budget:200`/day; the decision_quality row is written for every
|
|
42
|
+
settlement regardless, so counts stay complete.
|
|
43
|
+
|
|
44
|
+
## What to Tell Your User
|
|
45
|
+
|
|
46
|
+
Nothing changes in behaviour. The part of the agent that works out what a
|
|
47
|
+
conversation is *about* now records the calls it makes, so their quality can
|
|
48
|
+
eventually be measured rather than assumed.
|
|
49
|
+
|
|
50
|
+
None of your conversation is stored — only a fingerprint of each message and
|
|
51
|
+
counts describing the decision's shape. The rolling summary in particular is
|
|
52
|
+
recorded only as "present, this many characters," never its content.
|
|
53
|
+
|
|
54
|
+
As with the previous one: recorded, not yet graded. Knowing whether a given call
|
|
55
|
+
was right needs a later fact that isn't connected up yet, and the record says so
|
|
56
|
+
rather than implying otherwise.
|
|
57
|
+
|
|
58
|
+
## Summary of New Capabilities
|
|
59
|
+
|
|
60
|
+
- The conversation-intent extractor records every decision it makes.
|
|
61
|
+
- Recording is identity-only by construction and tested against planted secrets
|
|
62
|
+
in both of its untrusted inputs.
|
|
63
|
+
- Enrollment cannot break the extractor's degrade-safe guarantee.
|
|
64
|
+
|
|
65
|
+
## Evidence
|
|
66
|
+
|
|
67
|
+
- `tests/unit/topic-intent-extractor-provenance-enrollment.test.ts` (11): census
|
|
68
|
+
posture; typed decision point and the four options presented; **planted
|
|
69
|
+
secrets in both the message and the summary never reach the context**; the
|
|
70
|
+
hash distinguishes different messages; absent summary handled without
|
|
71
|
+
invention; attribution survives; and all three degrade paths still return
|
|
72
|
+
empty.
|
|
73
|
+
- Census ratchet: pending baseline shrinks by exactly one; typed-registration
|
|
74
|
+
check verifies the source imports `DP_TOPIC_INTENT_EXTRACT`.
|
|
75
|
+
- 42 green across affected suites.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Widened the history-heading pattern in `scripts/generate-spec-contract.mjs` by
|
|
9
|
+
one alternative (`Review record`), so a spec that consolidates its review history
|
|
10
|
+
into a single section is stripped like one that uses per-round `change log`
|
|
11
|
+
sections.
|
|
12
|
+
|
|
13
|
+
**Why it needed changing.** Exercising the generator on a second spec surfaced
|
|
14
|
+
the gap the first spec could not: it matched nothing, stripped nothing, reported
|
|
15
|
+
`0 history sections excluded` and **exited 0**. That is indistinguishable from a
|
|
16
|
+
document with no history to strip — a silent no-op presenting as success, in a
|
|
17
|
+
tool built to prevent exactly that class of problem.
|
|
18
|
+
|
|
19
|
+
The ELI16 and the side-effects review now both carry the warning: read what the
|
|
20
|
+
tool says it *did*, not just whether it succeeded.
|
|
21
|
+
|
|
22
|
+
Two fixes to `scripts/generate-spec-contract.mjs`, both found by reviewing the
|
|
23
|
+
tool's own output as a build artifact for the first time:
|
|
24
|
+
|
|
25
|
+
1. **Meta-blockquotes are stripped.** Blocks that talk *about* the document —
|
|
26
|
+
normative-boundary markers, "this file is rationale", scope-change notices —
|
|
27
|
+
are now removed alongside history sections, and counted separately.
|
|
28
|
+
|
|
29
|
+
2. **The banner stopped overclaiming.** It previously said review history "is
|
|
30
|
+
deliberately absent." That was false: narrative prose that states a rule and
|
|
31
|
+
narrates its own history in the same sentence cannot be separated by a
|
|
32
|
+
transform, and such sentences remained. The banner now states what is removed,
|
|
33
|
+
what is not, and prints the **count of `round-N` references still present**.
|
|
34
|
+
|
|
35
|
+
**Why it matters.** The first version produced a file claiming to be
|
|
36
|
+
normative-only that contained a `NON-NORMATIVE FROM HERE` marker — a boundary
|
|
37
|
+
marker inside a document denying it had boundaries. An implementer trusting the
|
|
38
|
+
banner would have been trusting a false statement. A tool that lies in its own
|
|
39
|
+
header is worse than one with a stated limit, and this tool exists specifically
|
|
40
|
+
to stop retired designs from being implemented.
|
|
41
|
+
|
|
42
|
+
## What to Tell Your User
|
|
43
|
+
|
|
44
|
+
None — internal change (no user-facing surface).
|
|
45
|
+
|
|
46
|
+
## Summary of New Capabilities
|
|
47
|
+
|
|
48
|
+
None — internal change (no user-facing surface).
|
|
49
|
+
|
|
50
|
+
## Evidence
|
|
51
|
+
|
|
52
|
+
- Before: `inbound-message-recording-gap` generated 5% smaller with **0 sections
|
|
53
|
+
excluded**. After: 12% smaller with **1 section excluded**.
|
|
54
|
+
- The large spec is unaffected — still 37 sections excluded, 37% smaller —
|
|
55
|
+
confirming the widening did not over-match.
|
|
56
|
+
- `--check` passes for both specs after regeneration.
|
|
57
|
+
- Side-effects review updated with the finding under "under-block" rather than
|
|
58
|
+
only fixing the code.
|
|
59
|
+
|
|
60
|
+
- Before: `inbound-message-recording-gap` generated with **3 meta-blocks
|
|
61
|
+
surviving**, banner claiming history absent, `NON-NORMATIVE` marker present in
|
|
62
|
+
the output.
|
|
63
|
+
- After: 1 history section + **3 meta-blocks** excluded, 13% smaller, zero
|
|
64
|
+
`NON-NORMATIVE` occurrences, banner reporting **14 narrative round-references
|
|
65
|
+
remain**.
|
|
66
|
+
- Regression check on the large spec: unchanged behaviour — still **37 history
|
|
67
|
+
sections, 0 meta-blocks, 37% smaller** — confirming the new pattern does not
|
|
68
|
+
over-match on a document that has none.
|
|
69
|
+
- `--check` passes for both specs after regeneration and reports the new counts.
|
|
70
|
+
|
|
71
|
+
## Second change in the same push: `--strict` (allowlist mode)
|
|
72
|
+
|
|
73
|
+
The default transform is a **denylist** — "remove what is definitely history,
|
|
74
|
+
keep everything else." For an implementation artifact that is the wrong default:
|
|
75
|
+
rationale, accepted residuals and self-correcting narrative are all "not
|
|
76
|
+
definitely history", so they survive. Seven consecutive review rounds (33-39)
|
|
77
|
+
said the generated contract still read as archaeology.
|
|
78
|
+
|
|
79
|
+
`--strict` inverts it to an **allowlist** of contract-bearing headings (final
|
|
80
|
+
contract, rollout, honest limits, decision points, test plan, dependencies).
|
|
81
|
+
Everything else is absent by default rather than by pattern-match, and the output
|
|
82
|
+
lands at `<slug>.contract.strict.md`.
|
|
83
|
+
|
|
84
|
+
**Evidence:** `inbound-message-recording-gap` 1487 → 874 lines (42% smaller, 11
|
|
85
|
+
allowlisted sections). `outbound-gate-advisory-override` 2765 → 270 lines (**90%
|
|
86
|
+
smaller**, 8 sections) — a spec that never converged in 33 rounds, and whose
|
|
87
|
+
history-stripped denylist version was still large enough to time a reviewer out,
|
|
88
|
+
now has a contract short enough to actually review.
|
|
89
|
+
|
|
90
|
+
Additive: the default mode and its output path are unchanged.
|
|
91
|
+
|
|
92
|
+
## And the predicted failure happened immediately
|
|
93
|
+
|
|
94
|
+
The over-block risk documented for `--strict` — dropping a normative section whose
|
|
95
|
+
heading is not on the allowlist — occurred on the first spec with a different
|
|
96
|
+
heading scheme. `outbound-gate-advisory-override` captured 8 of 66 sections and
|
|
97
|
+
lost its normative outcome table; the reviewer's first finding was "normative
|
|
98
|
+
behavior is missing from the strict contract."
|
|
99
|
+
|
|
100
|
+
A `WARNING (strict)` now fires when a spec with >=8 headings matches under 25% of
|
|
101
|
+
them, naming the ratio. It flags that spec at 12% and stays silent on the one that
|
|
102
|
+
captures correctly. It warns rather than refuses, because the ratio is a heuristic
|
|
103
|
+
and a rationale-heavy spec can legitimately capture low — a refusal on a heuristic
|
|
104
|
+
blocks correct output, a warning that names the number hands the judgment to a
|
|
105
|
+
human.
|
|
106
|
+
|
|
107
|
+
## A content-loss guard for `--strict`
|
|
108
|
+
|
|
109
|
+
The capture-ratio warning catches *too few sections matching*. It cannot see a
|
|
110
|
+
section that matched and captured **nothing** — which happened live: a
|
|
111
|
+
sub-heading added inside an allowlisted section ended that section's capture and
|
|
112
|
+
dropped the entire contract table from the output, while the section count stayed
|
|
113
|
+
identical and the guard stayed silent.
|
|
114
|
+
|
|
115
|
+
A second warning now compares captured bytes to source bytes per section. Three
|
|
116
|
+
implementations were needed: averaging hid the empty section behind healthy ones;
|
|
117
|
+
an absolute threshold false-positived permanently on legitimate container
|
|
118
|
+
headings; and the working version required the source measurement to stop using
|
|
119
|
+
the capture's own rule, which had made it shrink in lockstep with the truncation.
|
|
120
|
+
|
|
121
|
+
Each version was verified against the real regression and the correct file.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Side-effects review — enrol-topic-intent-extract
|
|
2
|
+
|
|
3
|
+
**Change:** enrol `TopicIntentExtractor` into the LLM-Decision Quality Meter
|
|
4
|
+
(`pending:backlog:decision-quality-enrolment` → `wired`), identity-only context,
|
|
5
|
+
declared `measurement-only`.
|
|
6
|
+
|
|
7
|
+
**Why this point:** ~733 calls / 7 days — the highest-volume unenrolled decision
|
|
8
|
+
point remaining after the stop gate (#1632). This continues the census task's
|
|
9
|
+
"enrol the highest-volume scenarios", which is plural and where the backlog
|
|
10
|
+
actually shrinks.
|
|
11
|
+
|
|
12
|
+
**Tier:** 1 — one census entry, one inline context, no new module.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. Over-block — what does this reject that it shouldn't?
|
|
17
|
+
|
|
18
|
+
Nothing at runtime: enrollment adds an `options.provenance` block to an existing
|
|
19
|
+
call. No predicate, no branch, no rejection path. At build time the census
|
|
20
|
+
ratchet now requires this point to stay declared, which is the intent.
|
|
21
|
+
|
|
22
|
+
## 2. Under-block — what does this still miss?
|
|
23
|
+
|
|
24
|
+
- **Recorded, not graded**, and declared as such. Grading an extraction needs a
|
|
25
|
+
downstream fact — was the proposed signal later affirmed, contradicted, or
|
|
26
|
+
silently dropped? Those transitions exist in the intent store; joining them to
|
|
27
|
+
a decision row is real plumbing. The census shows the posture rather than
|
|
28
|
+
implying measurement that does not exist.
|
|
29
|
+
- **`budget:200`/day caps the archive**, not the counts — the decision_quality
|
|
30
|
+
row is written for every settlement, and a truncation surfaces on the
|
|
31
|
+
droppedByBudget counter.
|
|
32
|
+
- **The context is a fixed projection.** A field a future reader wants will not
|
|
33
|
+
exist retroactively. Chosen minimum reconstructs decision shape; widening is
|
|
34
|
+
additive but not backfillable.
|
|
35
|
+
|
|
36
|
+
## 3. Level-of-abstraction fit
|
|
37
|
+
|
|
38
|
+
The context is built inline at the callsite because that is the only place that
|
|
39
|
+
knows which inputs are untrusted (the turn, the rolling summary) versus derived.
|
|
40
|
+
Exporting that distinction so a downstream builder could guess is how a summary
|
|
41
|
+
ends up in a provenance store.
|
|
42
|
+
|
|
43
|
+
## 4. Signal vs authority compliance
|
|
44
|
+
|
|
45
|
+
`docs/signal-vs-authority.md`. Enrollment holds **no authority**: the settlement
|
|
46
|
+
seam consumes the block and records on its own path; it never reaches the model
|
|
47
|
+
and never alters the extraction.
|
|
48
|
+
|
|
49
|
+
**The safety property is the content-bearing contract**, enforced by test rather
|
|
50
|
+
than by care. This extractor's leak surface is unusually wide — it reads a raw
|
|
51
|
+
turn AND a rolling conversational summary, so a leak here republishes far more
|
|
52
|
+
than one message. The fixtures plant a fake API key and password in the message
|
|
53
|
+
and a fake token and file path in the summary; the tests assert none of the four
|
|
54
|
+
reach the serialized context. A hash-distinctness test prevents a constant or
|
|
55
|
+
empty hash from passing those tests while making the identity field useless.
|
|
56
|
+
|
|
57
|
+
The context is an **allowlist of derived values**, not a filtered copy, so a new
|
|
58
|
+
field on `ExtractorInput` cannot appear in a row by default.
|
|
59
|
+
|
|
60
|
+
## 5. Interactions
|
|
61
|
+
|
|
62
|
+
- **Degrade-safety** — the extractor's core guarantee is that it returns `[]`
|
|
63
|
+
rather than breaking the conversation path it is attached to. Enrollment must
|
|
64
|
+
not put a new throw in front of that; three tests cover provider-throws,
|
|
65
|
+
provider-missing, and the degrade callback still firing with the right reason.
|
|
66
|
+
- **`/metrics/features`** — `attribution.component` preserved (explicitly
|
|
67
|
+
tested; losing it would silently drop this component from the cost surface).
|
|
68
|
+
- **The census ratchet** — the pending baseline shrinks by exactly one line, the
|
|
69
|
+
direction it may move. The typed-registration check independently verifies the
|
|
70
|
+
source imports `DP_TOPIC_INTENT_EXTRACT` rather than restating the string.
|
|
71
|
+
|
|
72
|
+
## 6. External surfaces
|
|
73
|
+
|
|
74
|
+
- No route, config key, flag, env var, CLI, message, or notification.
|
|
75
|
+
- `GET /decision-quality` shows one more `wired`, one fewer `pending`. Shapes
|
|
76
|
+
unchanged. No user-visible behaviour.
|
|
77
|
+
|
|
78
|
+
## 7. Multi-machine posture (Cross-Machine Coherence)
|
|
79
|
+
|
|
80
|
+
**Unified.** The census is a shipped source constant, byte-identical on every
|
|
81
|
+
install, so every machine enrolls the same point with the same valve and content
|
|
82
|
+
class. The rows inherit the meter's existing posture; no new state surface, no
|
|
83
|
+
notice, no generated URL.
|
|
84
|
+
|
|
85
|
+
## 8. Rollback cost
|
|
86
|
+
|
|
87
|
+
Revert. The census entry returns to `pending:` (restoring the baseline line), the
|
|
88
|
+
provenance block disappears, previously-recorded rows remain inertly.
|
|
89
|
+
|
|
90
|
+
## Second-pass review
|
|
91
|
+
|
|
92
|
+
**Not required** by the Phase-5 trigger list — no block/allow decision, no
|
|
93
|
+
session lifecycle, no gate. The component it observes is unchanged.
|
|
94
|
+
|
|
95
|
+
Self-review, the thing I went looking for: **is the summary genuinely excluded,
|
|
96
|
+
or only the message?** It would be easy to guard the obvious field and miss the
|
|
97
|
+
larger one. The fixture plants distinct secrets in BOTH, and the assertions name
|
|
98
|
+
both — because "we tested the leak path" is worth nothing if it tested the
|
|
99
|
+
smaller of two.
|
|
100
|
+
|
|
101
|
+
Tests: 11 new; 42 green across the affected suites.
|
|
@@ -33,6 +33,38 @@ silent.
|
|
|
33
33
|
|
|
34
34
|
## 2. Under-block — what does it still miss?
|
|
35
35
|
|
|
36
|
+
**Found in practice, not in review:** the first version recognised only per-round
|
|
37
|
+
`## Round-N … change log` headings. Pointed at a second spec that consolidates its
|
|
38
|
+
history into a single `## Review record` section, it matched nothing, stripped
|
|
39
|
+
nothing, reported `0 history sections excluded` and **exited 0**. A silent no-op
|
|
40
|
+
that presents as success — the same species as a check that cannot run.
|
|
41
|
+
|
|
42
|
+
Widened by one alternative (`Review record`). The residual is unchanged and now
|
|
43
|
+
explicit: the pattern is a closed list of heading shapes, so a document using a
|
|
44
|
+
convention not on the list is silently unstripped. The mitigation is the output
|
|
45
|
+
line itself — it always reports how many sections it excluded, so *reading* it
|
|
46
|
+
catches this. The ELI16 now says so directly.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
**Found again, worse, by pointing the tool at its own output (round-37, codex).**
|
|
50
|
+
The generated contract was reviewed as the build artifact for the first time, and
|
|
51
|
+
it was **not contract-only**: blockquote meta-blocks survived, including a
|
|
52
|
+
"NON-NORMATIVE FROM HERE" marker sitting inside a file whose banner claimed
|
|
53
|
+
review history was "deliberately absent." A boundary marker inside a document
|
|
54
|
+
that denies having boundaries is worse than no marker — and the banner was
|
|
55
|
+
straightforwardly false.
|
|
56
|
+
|
|
57
|
+
Two fixes, one mechanical and one honest:
|
|
58
|
+
|
|
59
|
+
1. **Meta-blockquotes are now stripped** — blocks that talk *about* the document
|
|
60
|
+
(normative-boundary markers, "this file is rationale", scope notices) rather
|
|
61
|
+
than about the design. Counted and reported separately from history sections.
|
|
62
|
+
2. **The banner no longer overclaims.** It now states what is removed, what is
|
|
63
|
+
*not* removed, and prints the **count of narrative round-references remaining**
|
|
64
|
+
in the file. The previous wording promised absence it could not deliver, which
|
|
65
|
+
is exactly the class of overclaim the spec under review kept being corrected
|
|
66
|
+
for. A tool that lies in its own header is worse than one with a stated limit.
|
|
67
|
+
|
|
36
68
|
- **Narrative history inside normative prose.** The generator strips history
|
|
37
69
|
*sections* and *inline annotations*; it cannot strip a paragraph of normative
|
|
38
70
|
prose that happens to narrate how a decision evolved. Those remain in the
|
|
@@ -44,6 +76,121 @@ silent.
|
|
|
44
76
|
contradictory. The separate spec lint (required by the outbound spec) is what
|
|
45
77
|
addresses that; this is not it.
|
|
46
78
|
|
|
79
|
+
### `--strict` (allowlist mode) — over/under-block
|
|
80
|
+
|
|
81
|
+
**Over-block risk, and it is real:** an allowlist drops a genuinely normative
|
|
82
|
+
section whose heading is not on the list. That is a *silent* omission — the
|
|
83
|
+
opposite failure from the denylist's silent retention. Mitigated by the run
|
|
84
|
+
reporting `N allowlisted sections kept`: a spec that should yield 10 sections and
|
|
85
|
+
reports 2 is visibly wrong, which is exactly how the missing-trailing-period bug
|
|
86
|
+
in the heading pattern was caught (§4 "Honest limits" and §5 "Test plan" were
|
|
87
|
+
silently dropped until the count was read).
|
|
88
|
+
|
|
89
|
+
That mitigation is a human reading a number, which is weaker than a check. The
|
|
90
|
+
honest position: **`--strict` trades a silent-retention failure for a
|
|
91
|
+
silent-omission failure**, and the omission is the one that could cause a missing
|
|
92
|
+
requirement rather than a confusing one. It is therefore additive and opt-in —
|
|
93
|
+
the default denylist mode and its output path are unchanged, and no build gate
|
|
94
|
+
requires strict mode.
|
|
95
|
+
|
|
96
|
+
**The over-block risk was confirmed within an hour of shipping it.** Pointed at
|
|
97
|
+
`outbound-gate-advisory-override`, strict mode kept 8 of 66 sections and dropped
|
|
98
|
+
the normative outcome table, whose headings are not on the allowlist. The
|
|
99
|
+
reviewer's *first* finding was "normative behavior is missing from the strict
|
|
100
|
+
contract" — the exact silent-omission failure predicted above, on the first spec
|
|
101
|
+
with a different heading scheme.
|
|
102
|
+
|
|
103
|
+
**Guard added:** strict mode now computes the kept-section ratio and prints a
|
|
104
|
+
`WARNING (strict)` when a spec with >=8 headings matches under 25% of them,
|
|
105
|
+
naming the ratio and saying the output may be missing normative sections. It
|
|
106
|
+
fires on `outbound-gate-advisory-override` (8/66, 12%) and stays silent on
|
|
107
|
+
`inbound-message-recording-gap` (11 sections, 41% capture) — a real signal on the
|
|
108
|
+
real failure, no noise on the working case.
|
|
109
|
+
|
|
110
|
+
The guard is a warning, not a refusal, and deliberately: the ratio is a heuristic,
|
|
111
|
+
and a genuinely rationale-heavy spec can legitimately capture low. A refusal on a
|
|
112
|
+
heuristic would block correct output; a warning that names the number lets a human
|
|
113
|
+
apply the judgment the tool does not have.
|
|
114
|
+
|
|
115
|
+
### A third failure mode, found by shipping it (2026-07-25)
|
|
116
|
+
|
|
117
|
+
The capture-ratio warning guards against *too few sections matching*. It does not
|
|
118
|
+
see **a matched section that captured nothing** — and that happened live: adding a
|
|
119
|
+
`### Normative checklist` heading inside the allowlisted `### 3.0 Final contract`
|
|
120
|
+
ended that section's capture, dropping the entire contract table **and the new
|
|
121
|
+
checklist** from the output. The section count stayed at 10, so the existing guard
|
|
122
|
+
was silent, and the emptied contract would have shipped.
|
|
123
|
+
|
|
124
|
+
A second guard now compares **captured bytes against source bytes per section**
|
|
125
|
+
and warns when a section captures under 25% of a source section over 1 KB.
|
|
126
|
+
|
|
127
|
+
**Getting it right took three attempts, each verified against the real regression
|
|
128
|
+
rather than assumed:**
|
|
129
|
+
|
|
130
|
+
1. *Average bytes per section* — nine healthy sections masked one empty one.
|
|
131
|
+
2. *Absolute per-section threshold* — permanently false-positived on legitimate
|
|
132
|
+
container headings (`## 4. Honest limits` immediately followed by an allowlisted
|
|
133
|
+
`### 4.0 …`). **A guard that always warns is a guard nobody reads.**
|
|
134
|
+
3. *Captured vs source, per section* — worked only after the source measurement
|
|
135
|
+
stopped using the capture's own stopping rule, which had made it shrink in
|
|
136
|
+
lockstep with the truncation it was meant to detect.
|
|
137
|
+
|
|
138
|
+
Verified in both directions each time: fires on the regression, silent on the
|
|
139
|
+
correct file, large-spec behaviour unchanged.
|
|
140
|
+
|
|
141
|
+
### The guard's own false-positive mode (found before merge)
|
|
142
|
+
|
|
143
|
+
The captured-vs-source guard fired permanently on every **numbered** spec. Cause:
|
|
144
|
+
the source measure deliberately does not use the capture's stopping rule (or it
|
|
145
|
+
would shrink in lockstep with the truncation it detects), so it ran past the next
|
|
146
|
+
*sibling* section and counted that sibling's bytes as "missing".
|
|
147
|
+
|
|
148
|
+
Both shapes look identical structurally — a same-level heading follows an
|
|
149
|
+
allowlisted one:
|
|
150
|
+
|
|
151
|
+
- `### 3.0 Final contract` → `### Normative checklist` — meant as a **child**;
|
|
152
|
+
its content belongs to 3.0 and losing it is a real defect.
|
|
153
|
+
- `### 3.10 Test plan` → `### 3.11 Judgeable-record` — a genuine **sibling**;
|
|
154
|
+
its content was never 3.10's and excluding it is correct.
|
|
155
|
+
|
|
156
|
+
Separated by a numbered-sibling test. Verified in both directions: silent on the
|
|
157
|
+
numbered spec, still warning on the child-heading regression.
|
|
158
|
+
|
|
159
|
+
**This is the third time this guard needed correcting, and the second time the
|
|
160
|
+
failure was "it warns constantly".** That mode is worth naming as its own defect
|
|
161
|
+
class: a permanently-firing warning is not a conservative guard, it is a disabled
|
|
162
|
+
one, because the reader stops looking.
|
|
163
|
+
|
|
164
|
+
**Also fixed before merge:** a nonexistent `--spec` path threw a raw Node stack
|
|
165
|
+
trace; it now exits 2 with a one-line error.
|
|
166
|
+
|
|
167
|
+
### The allowlist was too narrow to be useful on a second spec
|
|
168
|
+
|
|
169
|
+
Pointed at `outbound-gate-advisory-override`, strict mode produced a contract
|
|
170
|
+
**that began at the test plan** — no design section, no schema, no outcome table.
|
|
171
|
+
That is why an external reviewer reading it said *"normative behavior is missing
|
|
172
|
+
from the strict contract"*: it genuinely was. The capture-ratio warning fired
|
|
173
|
+
(8/66 sections, 12%) and was noted at the time **and not acted on**, so a
|
|
174
|
+
contract that could not be built from sat in the repo for three hours looking
|
|
175
|
+
like an artifact.
|
|
176
|
+
|
|
177
|
+
Cause: the allowlist held one spec's section names. The other spec's
|
|
178
|
+
contract-bearing sections are called `0.0 What an implementer builds`,
|
|
179
|
+
`0.2 Current design overview`, `0. Glossary` and `3.8.1 Normative outcome table`
|
|
180
|
+
— all genuinely normative, none matched.
|
|
181
|
+
|
|
182
|
+
Widened by those four plus `Fail directions`, and the numbering pattern relaxed
|
|
183
|
+
to multi-level (`3.8.1`). Capture went 8→13 sections and the contract now opens
|
|
184
|
+
with what an implementer builds. Verified no change to the other spec (10
|
|
185
|
+
sections, byte-identical behaviour) and the child-heading regression still warns.
|
|
186
|
+
|
|
187
|
+
**The warning was working and I treated it as information rather than a defect.**
|
|
188
|
+
A guard that fires and gets noted is only half a guard; the other half is
|
|
189
|
+
someone acting on it.
|
|
190
|
+
|
|
191
|
+
**Under-block:** unchanged. A rule narrated inside an allowlisted section still
|
|
192
|
+
carries its own history; strict mode reduces the surface, it does not clean prose.
|
|
193
|
+
|
|
47
194
|
## 3. Level-of-abstraction fit
|
|
48
195
|
|
|
49
196
|
Correct layer: it is a build-time document transform, alongside the other
|
|
@@ -124,3 +271,43 @@ without the generator).
|
|
|
124
271
|
**Not required.** The change touches no block/allow decision, no session
|
|
125
272
|
lifecycle, no coherence gate, and nothing named sentinel/guard/gate/watchdog. It
|
|
126
273
|
is a standalone document transform.
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Addendum (2026-07-25 15:5xZ) — hierarchical capture for sub-headings
|
|
278
|
+
|
|
279
|
+
**What changed.** `splitStrictContract` reset `keeping` on *every* H1–H3, so an
|
|
280
|
+
allowlisted `## 3. Design` was closed by its own first child `### 3.1`. Capture
|
|
281
|
+
is now hierarchical: a NON-allowlisted heading DEEPER than the open section
|
|
282
|
+
rides along; a sibling or an allowlisted heading still closes it. `Design` was
|
|
283
|
+
also added to the heading allowlist (`## 3. Design` previously matched nothing).
|
|
284
|
+
|
|
285
|
+
**Why it matters.** Measured on the outbound-gate spec: the design section
|
|
286
|
+
shipped as **14 bytes of 86,314**. The section COUNT was correct, so the
|
|
287
|
+
contract looked complete. Reviews run against it produced four objections the
|
|
288
|
+
missing text already answered, and I relayed them to the operator as reasons to
|
|
289
|
+
withhold approval; all four were later withdrawn.
|
|
290
|
+
|
|
291
|
+
1. **Over-block** — none. The change only ADDS content that was being dropped.
|
|
292
|
+
Verified: outbound-gate +1212 lines / −1; inbound +2 / −0. No section lost.
|
|
293
|
+
2. **Under-block** — a spec whose normative heading is neither allowlisted nor a
|
|
294
|
+
child of an allowlisted section is still dropped. The existing ratio warning
|
|
295
|
+
plus the under-capture guard remain the detection for that.
|
|
296
|
+
3. **Level-of-abstraction fit** — right layer. The defect was in the capture
|
|
297
|
+
loop; nothing downstream could have recovered the missing bytes.
|
|
298
|
+
4. **Signal vs authority** — unchanged. The generator emits an artifact and
|
|
299
|
+
warnings; it blocks nothing.
|
|
300
|
+
5. **Interactions** — the pre-pass source-sizing loop is untouched, so the
|
|
301
|
+
under-capture guard still measures against the same baseline and correctly
|
|
302
|
+
went quiet for §3 once the capture was fixed.
|
|
303
|
+
6. **External surfaces** — regenerated contracts are committed alongside, so no
|
|
304
|
+
consumer sees a stale artifact.
|
|
305
|
+
7. **Multi-machine posture** — machine-local BY DESIGN: a build-time script over
|
|
306
|
+
files in the repo checkout. No runtime state, no replication surface.
|
|
307
|
+
8. **Rollback cost** — revert the commit and regenerate; contracts return to
|
|
308
|
+
their prior bytes. No migration, no persisted state.
|
|
309
|
+
|
|
310
|
+
**Tests.** `tests/unit/generate-spec-contract-nesting.test.ts` — the first
|
|
311
|
+
coverage this tool has had. Verified failing against the pre-fix code (2 of 3)
|
|
312
|
+
and passing after, so it is a real regression guard rather than a restatement
|
|
313
|
+
of current behaviour.
|