pi-smart-compact 10.1.1 → 10.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/ARCHITECTURE.md CHANGED
@@ -643,7 +643,15 @@ Repair order is intentional: (1) deterministic patch first (free, idempotent);
643
643
  lower-scoring output with a deterministic quality floor built only from
644
644
  extraction, continuity and steering; (4) reject unless final verification has
645
645
  no gaps and meets the verified threshold. Untrusted chunk prose never feeds the
646
- quality floor. Final verification runs again after continuity injection. The
646
+ quality floor. The floor's Goal, Constraints, Key Decisions, Blocked and
647
+ Critical Context sections are rendered from the verifier's own required
648
+ evidence set (`collectVerificationEvidence`: live, high-confidence,
649
+ non-retired constraints; explicit decisions collapsed to one active answer;
650
+ continuity-merged errors and goal), written whole, so the floor never carries a
651
+ line the verifier does not require and can therefore never fail its own gate on
652
+ a contradiction that deterministic repair cannot fix. The contradiction scan
653
+ treats required error lines and the steering focus as polarity-free: an error
654
+ records what happened and a focus names a subject, neither is a rule. Final verification runs again after continuity injection. The
647
655
  final scalar is reported as repaired **verification coverage**, alongside the
648
656
  pre-repair score and fallback provenance, never as raw synthesis quality.
649
657
  Failures keep only exhaustive content-free gap kinds and the rejecting gate
package/CHANGELOG.md CHANGED
@@ -2,6 +2,41 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [10.1.2] - 2026-09-30
6
+
7
+ ### Release approval
8
+
9
+ - Patch release approved by the release owner after the deterministic gates
10
+ on the exact candidate. No version-specific applied-canary cohort or live
11
+ provider run exists for `10.1.2`; the fix is evidenced by the test sweep
12
+ and offline replay of recorded sessions only.
13
+
14
+ ### Fixed
15
+
16
+ - **The deterministic quality floor can no longer fail its own verification
17
+ gate.** The floor rendered every extracted constraint, including ones the
18
+ user had since released (`factOverrides`), stale implicit decisions, and its
19
+ own `[focus]`/`[note]` steering tags, while the verifier required a
20
+ different set; a released prohibition beside its live replacement, an error
21
+ message naming the action a rule forbids ("daemon restart failed" beside "Do
22
+ not restart the daemon"), or a steering focus that named that action, each
23
+ scored as a semantic contradiction, which deterministic repair cannot fix,
24
+ so every candidate was rejected. The floor now renders exactly the
25
+ verifier's required evidence (`collectVerificationEvidence`), written
26
+ whole; the contradiction scan treats required error lines and the steering
27
+ focus as polarity-free; and the floor's goal falls back to the continuity
28
+ goal. Summary-authored contradictions and two live rules of opposite
29
+ polarity still fail. A 512-combination sweep over the evidence sources
30
+ (retired rule, low-confidence inverse, non-live text, continuity-only rule
31
+ or goal, overlapping errors, implicit inverse decision, coverage overflow,
32
+ over-limit texts) asserts no non-repairable gap.
33
+ - A user steering note longer than the constraint line limit is required,
34
+ rendered and repaired whole; a summary that cuts its trailing prohibition
35
+ is still rejected as altered evidence.
36
+ - Display labels `Critical:`, `Open loop:`, `Unresolved error:` and
37
+ `Resolved error:` (plain or bold) are stripped before semantic comparison
38
+ like `Constraint:`/`Goal:`/`Decision:` already were.
39
+
5
40
  ## [10.1.1] - 2026-09-30
6
41
 
7
42
  ### Release approval
@@ -1 +1 @@
1
- {"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../../src/app/steps/synthesize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA4BH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYpE,wBAAsB,qBAAqB,CAC1C,EAAE,EAAE,WAAW,GACb,OAAO,CAAC,aAAa,CAAC,CA+lBxB"}
1
+ {"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../../src/app/steps/synthesize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA4BH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYpE,wBAAsB,qBAAqB,CAC1C,EAAE,EAAE,WAAW,GACb,OAAO,CAAC,aAAa,CAAC,CAmmBxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/app/steps/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiBnE,wBAAsB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAoN3E"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/app/steps/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAiBnE,wBAAsB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAqN3E"}
@@ -8,7 +8,7 @@ import type { CompressionProfile, ProfileConfig } from "./types.ts";
8
8
  * `package.json#version`. Do not hand-edit this line for releases; bump
9
9
  * package.json and run `bun run sync-version`.
10
10
  */
11
- export declare const VERSION = "10.1.1";
11
+ export declare const VERSION = "10.1.2";
12
12
  /**
13
13
  * Opt-in components that are not installed with the extension: optional peer
14
14
  * dependencies in package.json, pinned to the versions the release audit
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  } from "@earendil-works/pi-coding-agent";
6
6
 
7
7
  // src/constants.ts
8
- var VERSION = "10.1.1";
8
+ var VERSION = "10.1.2";
9
9
  var OPTIONAL_COMPONENTS = {
10
10
  mnemopi: { name: "@oh-my-pi/pi-mnemopi", version: "18.3.1", enables: "Mnemopi memory store" },
11
11
  bun: { name: "bun", version: "1.4.2", enables: "Mnemopi worker runtime when no Bun 1.3.14+ is on PATH" },
@@ -6820,8 +6820,9 @@ function stemToken(token) {
6820
6820
  return lower.slice(0, -1);
6821
6821
  return lower;
6822
6822
  }
6823
+ var EVIDENCE_LABEL_PREFIX_RE = /^\s*(?:(?:\*\*)?(?:Constraint|Goal|Decision|Critical|Open loop|Unresolved error|Resolved error):(?:\*\*)?\s*)+/i;
6823
6824
  function semanticTokens(text) {
6824
- const normalized = text.normalize("NFKC").replace(/[\u{2018}\u{2019}\u{02BC}`\u{00B4}]/gu, "'").replace(/\bcannot\b/gi, "can not").replace(/\b(\w+)n't\b/gi, "$1 not").replace(/^\s*(?:Constraint|Goal|Decision):\s*/i, "");
6825
+ const normalized = text.normalize("NFKC").replace(/[\u{2018}\u{2019}\u{02BC}`\u{00B4}]/gu, "'").replace(/\bcannot\b/gi, "can not").replace(/\b(\w+)n't\b/gi, "$1 not").replace(EVIDENCE_LABEL_PREFIX_RE, "");
6825
6826
  return (normalized.match(/[\p{L}\p{N}_-]+/gu) ?? []).map(stemToken).filter((token) => token.length > 2 || NEGATION_MARKERS.has(token));
6826
6827
  }
6827
6828
  var semanticShapeCache = new Map;
@@ -7184,7 +7185,8 @@ function collectVerificationEvidence(extraction, continuity, evidence) {
7184
7185
  const steeringConstraints = [];
7185
7186
  if (evidence.steering?.focus?.trim()) {
7186
7187
  steeringConstraints.push({
7187
- text: "Preserve detail about: " + evidence.steering.focus
7188
+ text: "Preserve detail about: " + evidence.steering.focus,
7189
+ topic: true
7188
7190
  });
7189
7191
  }
7190
7192
  if (evidence.steering?.note?.trim()) {
@@ -7295,22 +7297,31 @@ var EVIDENCE_RENDER_LIMITS = [
7295
7297
  ];
7296
7298
  function requiredEvidenceKeysByPolarity(collected, continuity) {
7297
7299
  const texts = [
7298
- ...collected.constraints.map((item) => item.text),
7300
+ ...collected.constraints.flatMap((item) => item.topic ? [] : [item.text]),
7299
7301
  ...collected.decisions.flatMap((item) => item.answer ? [item.summary, item.answer] : [item.summary]),
7300
- ...collected.unresolved.map((item) => item.message),
7301
- ...collected.resolved.map((item) => item.message),
7302
7302
  ...collected.goal ? [collected.goal] : [],
7303
7303
  ...continuity?.criticalContext ?? []
7304
7304
  ];
7305
+ const polarityFree = [
7306
+ ...collected.constraints.flatMap((item) => item.topic ? [item.text] : []),
7307
+ ...collected.unresolved.map((item) => item.message),
7308
+ ...collected.resolved.map((item) => item.message)
7309
+ ];
7305
7310
  const keys = { negative: new Set, positive: new Set };
7306
- for (const text of texts) {
7307
- const bucket = semanticShape(text).negative ? keys.negative : keys.positive;
7311
+ const addVariants = (text, buckets) => {
7308
7312
  const variants = [text, ...EVIDENCE_RENDER_LIMITS.map((max) => summaryEvidenceLine(text, max))];
7309
7313
  for (const variant of variants) {
7310
- for (const tokens of semanticFragments(variant))
7311
- bucket.add(tokens.join(" "));
7314
+ for (const tokens of semanticFragments(variant)) {
7315
+ for (const bucket of buckets)
7316
+ bucket.add(tokens.join(" "));
7317
+ }
7312
7318
  }
7319
+ };
7320
+ for (const text of texts) {
7321
+ addVariants(text, [semanticShape(text).negative ? keys.negative : keys.positive]);
7313
7322
  }
7323
+ for (const text of polarityFree)
7324
+ addVariants(text, [keys.negative, keys.positive]);
7314
7325
  return keys;
7315
7326
  }
7316
7327
  function verifySemanticCoverage(parsed, collected, continuity, accumulator) {
@@ -7564,7 +7575,7 @@ function patchDeterministic(summary, gaps, extraction, continuity = null, eviden
7564
7575
  break;
7565
7576
  }
7566
7577
  case "missing-constraint":
7567
- canonical = appendToSection(canonical, "constraints", "- " + safe(gap.text, TRUNC.CONSTRAINT_TEXT));
7578
+ canonical = appendToSection(canonical, "constraints", "- " + safe(gap.text, gap.text.length));
7568
7579
  break;
7569
7580
  case "missing-decision": {
7570
7581
  const question = safe(gap.summary, TRUNC.DECISION_SUMMARY);
@@ -7573,7 +7584,7 @@ function patchDeterministic(summary, gaps, extraction, continuity = null, eviden
7573
7584
  break;
7574
7585
  }
7575
7586
  case "missing-goal":
7576
- canonical = upsertSection(canonical, "goal", safe(gap.goal, TRUNC.DETAIL) || "Continue the current task.");
7587
+ canonical = upsertSection(canonical, "goal", safe(gap.goal, gap.goal.length) || "Continue the current task.");
7577
7588
  break;
7578
7589
  case "missing-open-loops": {
7579
7590
  const current = extraction.errors.filter((error) => !error.resolved).map((error) => safe(error.message, TRUNC.SNIPPET)).filter(Boolean).map((message) => "- [high] Resolve " + message);
@@ -11975,22 +11986,22 @@ async function assembleLLM(summaries, extraction, report, model, auth, budget, p
11975
11986
  throw new Error("Assembly truncated output");
11976
11987
  return assembled;
11977
11988
  }
11978
- function assembleFallback(summaries, extraction, steering = {}, budgetTokens = 6000, continuity = null) {
11989
+ function assembleFallback(summaries, extraction, steering = {}, budgetTokens = 6000, continuity = null, factOverrides = []) {
11979
11990
  const safe = (value, max = TRUNC.PREVIEW_MID) => summaryEvidenceLine(value, max);
11991
+ const whole = (value) => summaryEvidenceLine(value, value.length);
11980
11992
  const files = deterministicFileEvidence(extraction, budgetTokens, continuity);
11981
11993
  const detModified = files.modified;
11982
11994
  const detRead = files.read;
11983
11995
  const detDeleted = files.deleted;
11984
- const unresolved = extraction.errors.filter((error) => !error.resolved).map((error) => safe(error.message, TRUNC.PREVIEW)).filter(Boolean);
11985
- const resolved = extraction.errors.filter((error) => error.resolved).slice(-5).map((error) => safe(error.message, TRUNC.PREVIEW)).filter(Boolean);
11986
- const constraints = extraction.constraints.map((item) => "- " + safe(item.text, TRUNC.CONSTRAINT_TEXT)).filter((line) => line !== "- ");
11987
- if (steering.focus?.trim())
11988
- constraints.push("- [focus] Preserve detail about: " + safe(steering.focus, TRUNC.CONSTRAINT_TEXT));
11989
- if (steering.note?.trim())
11990
- constraints.push("- [note] " + safe(steering.note, TRUNC.CONSTRAINT_TEXT));
11991
- const decisions = collapseDecisionsByQuestion(extraction.decisions).map((item) => {
11992
- const summary = safe(item.summary, TRUNC.DECISION_SUMMARY);
11993
- const response = item.userResponse ? safe(item.userResponse, TRUNC.USER_RESPONSE) : "";
11996
+ const required = collectVerificationEvidence(extraction, continuity, {
11997
+ steering,
11998
+ factOverrides
11999
+ });
12000
+ const unresolved = required.unresolved.map((error) => safe(error.message, TRUNC.PREVIEW)).filter(Boolean);
12001
+ const constraints = required.constraints.map((item) => "- " + whole(item.text)).filter((line) => line !== "- ");
12002
+ const decisions = required.decisions.map((item) => {
12003
+ const summary = whole(item.summary);
12004
+ const response = item.answer ? whole(item.answer) : "";
11994
12005
  return summary ? "- **" + summary + "**" + (response ? " \u2192 " + response : "") : "";
11995
12006
  }).filter(Boolean);
11996
12007
  const inProgress = summaries.filter((item) => item.priority === "critical" || item.priority === "high").map((item) => safe(item.summary, TRUNC.PREVIEW)).filter(Boolean).map((item) => "- [ ] " + item);
@@ -11999,13 +12010,12 @@ function assembleFallback(summaries, extraction, steering = {}, budgetTokens = 6
11999
12010
  }
12000
12011
  inProgress.push(...detModified.slice(-5).map((file) => "- [ ] Continue work in " + file));
12001
12012
  const next = safe(extraction.lastUserMessages.at(-1) ?? extraction.timeline.at(-1)?.summary ?? "", TRUNC.PREVIEW) || "Continue from the latest preserved context.";
12002
- const goal = safe(extraction.mainGoal ?? "", TRUNC.DETAIL) || "Continue the current task.";
12013
+ const goal = whole(required.goal ?? "") || "Continue the current task.";
12003
12014
  const overflow = Object.entries(extraction.evidenceOverflow ?? {}).filter(([, count]) => typeof count === "number" && count > 0).map(([kind, count]) => "- Safety bound omitted " + count + " older " + kind + " item(s) from the human summary.");
12004
12015
  const critical = [
12005
- ...unresolved.map((error) => "- Unresolved error: " + safe(error, TRUNC.TOPIC_LABEL)),
12006
- ...resolved.map((error) => "- Resolved error: " + safe(error, TRUNC.TOPIC_LABEL)),
12007
- ...overflow
12008
- ];
12016
+ ...required.unresolved.map((error) => "- Unresolved error: " + safe(error.message, TRUNC.TOPIC_LABEL)),
12017
+ ...required.resolved.map((error) => "- Resolved error: " + safe(error.message, TRUNC.TOPIC_LABEL))
12018
+ ].filter((line) => !/: $/.test(line));
12009
12019
  return [
12010
12020
  "## Goal",
12011
12021
  goal,
@@ -12040,6 +12050,7 @@ function assembleFallback(summaries, extraction, steering = {}, budgetTokens = 6
12040
12050
  ...critical.length ? critical : ["- None recorded."],
12041
12051
  "",
12042
12052
  "## Topics Covered",
12053
+ ...overflow,
12043
12054
  ...summaries.length ? summaries.map((item) => {
12044
12055
  const topic = safe(item.topic, TRUNC.TOPIC_LABEL) || "Segment";
12045
12056
  return "- **" + topic + "** [" + item.priority + "]: " + safe(item.summary);
@@ -12164,7 +12175,7 @@ async function summarizeConversation(rc) {
12164
12175
  phaseName: "Synthesize",
12165
12176
  detail: "Building a deterministic continuation summary \xB7 no LLM call"
12166
12177
  });
12167
- const finalSummary = assembleFallback([], extraction, { focus: rc.focus, note: rc.userNote }, pc.summaryBudgetTokens, rc.previousState);
12178
+ const finalSummary = assembleFallback([], extraction, { focus: rc.focus, note: rc.userNote }, pc.summaryBudgetTokens, rc.previousState, rc.factOverrides);
12168
12179
  setCachedSynthesis(cacheKey, {
12169
12180
  finalSummary,
12170
12181
  method: "heuristic",
@@ -12226,7 +12237,7 @@ async function summarizeConversation(rc) {
12226
12237
  phaseName: "Synthesize",
12227
12238
  detail: "Summary route unavailable \xB7 building a deterministic summary"
12228
12239
  });
12229
- finalSummary = assembleFallback([], extraction, { focus: rc.focus, note: rc.userNote }, pc.summaryBudgetTokens, rc.previousState);
12240
+ finalSummary = assembleFallback([], extraction, { focus: rc.focus, note: rc.userNote }, pc.summaryBudgetTokens, rc.previousState, rc.factOverrides);
12230
12241
  method = "heuristic";
12231
12242
  } else if (singleRequest) {
12232
12243
  showProgressOverlay(rc.ctx, {
@@ -12247,7 +12258,7 @@ async function summarizeConversation(rc) {
12247
12258
  generationFallbacks.push("single-pass generation failed");
12248
12259
  recordIssue({ key: "synth.single-pass", message: "Single-pass synthesis used deterministic fallback (" + errorDetail(err) + ").", error: err });
12249
12260
  rc.notify("Single-pass generation stopped \xB7 using deterministic fallback [" + formatGenerationFailureForUi(err) + "]", "info");
12250
- finalSummary = assembleFallback([], extraction, { focus: rc.focus, note: rc.userNote }, pc.summaryBudgetTokens, rc.previousState);
12261
+ finalSummary = assembleFallback([], extraction, { focus: rc.focus, note: rc.userNote }, pc.summaryBudgetTokens, rc.previousState, rc.factOverrides);
12251
12262
  method = "heuristic";
12252
12263
  }
12253
12264
  } else {
@@ -12454,7 +12465,7 @@ async function summarizeConversation(rc) {
12454
12465
  recordIssue({ key: "synth.assembly", message: "Assembly used deterministic fallback (" + errorDetail(err) + ").", error: err });
12455
12466
  rc.notify("Assembly stopped \xB7 using deterministic fallback [" + formatGenerationFailureForUi(err) + "]", "info");
12456
12467
  method = "heuristic";
12457
- finalSummary = assembleFallback(summaries, extraction, { focus: rc.focus, note: rc.userNote }, pc.summaryBudgetTokens, rc.previousState);
12468
+ finalSummary = assembleFallback(summaries, extraction, { focus: rc.focus, note: rc.userNote }, pc.summaryBudgetTokens, rc.previousState, rc.factOverrides);
12458
12469
  }
12459
12470
  }
12460
12471
  rc.cancellation.signal.throwIfAborted();
@@ -12560,7 +12571,7 @@ async function verifyAndPatch(rc) {
12560
12571
  detail: "Trying the deterministic safety summary",
12561
12572
  explorationRounds: rc.explorationRounds
12562
12573
  });
12563
- let deterministic = assembleFallback([], extraction, evidence.steering, summaryBudgetTokens, rc.previousState);
12574
+ let deterministic = assembleFallback([], extraction, evidence.steering, summaryBudgetTokens, rc.previousState, rc.factOverrides);
12564
12575
  let deterministicVerification = verifySummary(deterministic, extraction, rc.previousState, evidence);
12565
12576
  const repaired = repairSummaryDeterministically(deterministic, deterministicVerification, extraction, rc.previousState, evidence);
12566
12577
  deterministic = repaired.summary;
@@ -2,7 +2,7 @@
2
2
  * Phase 3: Hierarchical Synthesis.
3
3
  */
4
4
  import type { Model, Api, Context, ProviderHeaders } from "@earendil-works/pi-ai";
5
- import type { LlmMessage, LlmChunk, ChunkSummary, StructuredExtraction, ExplorationReport, ProfileConfig, CompactionState } from "../types.ts";
5
+ import type { LlmMessage, LlmChunk, ChunkSummary, StructuredExtraction, ExplorationReport, ProfileConfig, CompactionState, ContinuityOverride } from "../types.ts";
6
6
  import { type TokenEstimator } from "../utils/tokens.ts";
7
7
  import { type SmartCompactServices } from "../infra/services.ts";
8
8
  /** A provider response completed, but did not satisfy the batch-output contract. */
@@ -41,10 +41,19 @@ export declare function assembleLLM(summaries: ChunkSummary[], extraction: Struc
41
41
  apiKey: string;
42
42
  headers?: ProviderHeaders;
43
43
  }, budget: number, prevContext: string, signal?: AbortSignal, services?: SmartCompactServices, focus?: string, continuity?: CompactionState | null): Promise<string>;
44
+ /**
45
+ * Deterministic quality floor. Its Goal, Constraints, Key Decisions, Blocked
46
+ * and Critical Context sections render exactly the evidence the verifier
47
+ * requires ({@link collectVerificationEvidence}: live, high-confidence,
48
+ * non-retired constraints; explicit decisions collapsed to one active answer;
49
+ * continuity-merged errors and goal). A line the verifier does not require
50
+ * is a line it may score as a contradiction, which is not deterministically
51
+ * repairable; the floor therefore adds nothing of its own to those sections.
52
+ */
44
53
  export declare function assembleFallback(summaries: ChunkSummary[], extraction: StructuredExtraction, steering?: {
45
54
  focus?: string;
46
55
  note?: string;
47
- }, budgetTokens?: number, continuity?: CompactionState | null): string;
56
+ }, budgetTokens?: number, continuity?: CompactionState | null, factOverrides?: readonly ContinuityOverride[]): string;
48
57
  /**
49
58
  * Build a placeholder {@link ChunkSummary} when a batch's LLM call failed, so the
50
59
  * assembly step still has something deterministic to merge rather than
@@ -1 +1 @@
1
- {"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/phases/synthesize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synthesize.d.ts","sourceRoot":"","sources":["../../src/phases/synthesize.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,31 @@ export declare function repairSummaryDeterministically(summary: string, result:
48
48
  result: VerificationResult;
49
49
  patched: VerificationGap[];
50
50
  };
51
+ export interface CollectedVerificationEvidence {
52
+ unresolved: Array<{
53
+ message: string;
54
+ }>;
55
+ resolved: Array<{
56
+ message: string;
57
+ }>;
58
+ /** `topic` marks the steering focus: a subject pointer, not a rule with polarity. */
59
+ constraints: Array<{
60
+ text: string;
61
+ topic?: boolean;
62
+ }>;
63
+ decisions: Array<{
64
+ summary: string;
65
+ answer: string | null;
66
+ }>;
67
+ goal: string | null;
68
+ }
69
+ /**
70
+ * The evidence the verifier requires a summary to carry. Exported so the
71
+ * deterministic floor renders exactly this set: any line the floor adds that
72
+ * the verifier does not require is a line the verifier may score as a defect,
73
+ * and a floor that fails its own gate leaves a session uncompactable.
74
+ */
75
+ export declare function collectVerificationEvidence(extraction: StructuredExtraction, continuity: CompactionState | null, evidence: VerificationEvidence): CollectedVerificationEvidence;
51
76
  export declare function verifySummary(summary: string, extraction: StructuredExtraction, continuity?: CompactionState | null, evidence?: VerificationEvidence): VerificationResult;
52
77
  /** Apply every safe, deterministic repair. Hallucination/inconsistency gaps stay visible for LLM/user review. */
53
78
  export declare function patchDeterministic(summary: string, gaps: VerificationGap[], extraction: StructuredExtraction, continuity?: CompactionState | null, evidence?: VerificationEvidence): string;
@@ -1 +1 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/phases/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACX,KAAK,EACL,GAAG,EACH,OAAO,EACP,eAAe,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACX,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AAsCrB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,MAAM,WAAW,oBAAoB;IACpC,cAAc,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC9C;AAmWD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAsClE;AAED,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,kBAAkB,GACxB,MAAM,GAAG,IAAI,CAcf;AAED,wFAAwF;AACxF,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YACC,MAAM,EAAE,kBAAkB,EAC1B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,qBAAqB,EAW5B;CACD;AA2TD,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,OAAO,CAoCT;AA0ND;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAwB/E;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAK1E;AAED,qGAAqG;AACrG,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,QAAQ,GAAE,oBAAyB,EACnC,SAAS,SAAI,GACX;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAyB7E;AA6sBD,wBAAgB,aAAa,CAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,QAAQ,GAAE,oBAAyB,GACjC,kBAAkB,CA4CpB;AAED,iHAAiH;AACjH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,EAAE,EACvB,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,QAAQ,GAAE,oBAAyB,GACjC,MAAM,CAwNR;AA0BD;;;;;sDAKsD;AACtD,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,GACjB,OAAO,CAST;AAUD,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GACzD;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAczC;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAC3D,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EACzE,QAAQ,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAkCjB"}
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/phases/verify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACX,KAAK,EACL,GAAG,EACH,OAAO,EACP,eAAe,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACX,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,UAAU,EACV,MAAM,aAAa,CAAC;AAsCrB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,MAAM,WAAW,oBAAoB;IACpC,cAAc,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC9C;AAmWD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAsClE;AAED,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,kBAAkB,GACxB,MAAM,GAAG,IAAI,CAcf;AAED,wFAAwF;AACxF,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,YACC,MAAM,EAAE,kBAAkB,EAC1B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,qBAAqB,EAW5B;CACD;AAoUD,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC1B,OAAO,CAoCT;AA0ND;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAwB/E;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAK1E;AAED,qGAAqG;AACrG,wBAAgB,8BAA8B,CAC7C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,QAAQ,GAAE,oBAAyB,EACnC,SAAS,SAAI,GACX;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAyB7E;AAOD,MAAM,WAAW,6BAA6B;IAC7C,UAAU,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,qFAAqF;IACrF,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACtD,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC7D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAoOD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAC1C,UAAU,EAAE,oBAAoB,EAChC,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,QAAQ,EAAE,oBAAoB,GAC5B,6BAA6B,CAkF/B;AAwZD,wBAAgB,aAAa,CAC5B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,QAAQ,GAAE,oBAAyB,GACjC,kBAAkB,CA4CpB;AAED,iHAAiH;AACjH,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,EAAE,EACvB,UAAU,EAAE,oBAAoB,EAChC,UAAU,GAAE,eAAe,GAAG,IAAW,EACzC,QAAQ,GAAE,oBAAyB,GACjC,MAAM,CA2NR;AA0BD;;;;;sDAKsD;AACtD,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,GACjB,OAAO,CAST;AAUD,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GACzD;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAczC;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAC3D,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,EAAE,MAAM,CAAC,EAAE,WAAW,EACzE,QAAQ,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAkCjB"}
package/dist/rtk.js CHANGED
@@ -198,7 +198,7 @@ class SecretScrubber {
198
198
  }
199
199
 
200
200
  // src/constants.ts
201
- var VERSION = "10.1.1";
201
+ var VERSION = "10.1.2";
202
202
  var OPTIONAL_COMPONENTS = {
203
203
  mnemopi: { name: "@oh-my-pi/pi-mnemopi", version: "18.3.1", enables: "Mnemopi memory store" },
204
204
  bun: { name: "bun", version: "1.4.2", enables: "Mnemopi worker runtime when no Bun 1.3.14+ is on PATH" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-smart-compact",
3
- "version": "10.1.1",
3
+ "version": "10.1.2",
4
4
  "description": "Pi Continuity — context hygiene and session continuity for Pi Coding Agent: recoverable cleanup, checkpoints, memory and verified compaction.",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.4.2",