daftari 1.21.0 → 1.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/CHANGELOG.md +62 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +7 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/consolidate/admit.d.ts +15 -0
  6. package/dist/consolidate/admit.d.ts.map +1 -0
  7. package/dist/consolidate/admit.js +176 -0
  8. package/dist/consolidate/admit.js.map +1 -0
  9. package/dist/consolidate/birth.d.ts +79 -0
  10. package/dist/consolidate/birth.d.ts.map +1 -0
  11. package/dist/consolidate/birth.js +315 -0
  12. package/dist/consolidate/birth.js.map +1 -0
  13. package/dist/consolidate/clocks.d.ts +15 -0
  14. package/dist/consolidate/clocks.d.ts.map +1 -0
  15. package/dist/consolidate/clocks.js +127 -0
  16. package/dist/consolidate/clocks.js.map +1 -0
  17. package/dist/consolidate/constants.d.ts +26 -0
  18. package/dist/consolidate/constants.d.ts.map +1 -0
  19. package/dist/consolidate/constants.js +83 -0
  20. package/dist/consolidate/constants.js.map +1 -0
  21. package/dist/consolidate/decorrelation.d.ts +69 -0
  22. package/dist/consolidate/decorrelation.d.ts.map +1 -0
  23. package/dist/consolidate/decorrelation.js +287 -0
  24. package/dist/consolidate/decorrelation.js.map +1 -0
  25. package/dist/consolidate/derivation-prompt.d.ts +28 -0
  26. package/dist/consolidate/derivation-prompt.d.ts.map +1 -0
  27. package/dist/consolidate/derivation-prompt.js +72 -0
  28. package/dist/consolidate/derivation-prompt.js.map +1 -0
  29. package/dist/consolidate/edge-write.d.ts +9 -0
  30. package/dist/consolidate/edge-write.d.ts.map +1 -0
  31. package/dist/consolidate/edge-write.js +59 -0
  32. package/dist/consolidate/edge-write.js.map +1 -0
  33. package/dist/consolidate/envelope.d.ts +27 -0
  34. package/dist/consolidate/envelope.d.ts.map +1 -0
  35. package/dist/consolidate/envelope.js +90 -0
  36. package/dist/consolidate/envelope.js.map +1 -0
  37. package/dist/consolidate/index.d.ts +2 -0
  38. package/dist/consolidate/index.d.ts.map +1 -0
  39. package/dist/consolidate/index.js +531 -0
  40. package/dist/consolidate/index.js.map +1 -0
  41. package/dist/consolidate/priority.d.ts +25 -0
  42. package/dist/consolidate/priority.d.ts.map +1 -0
  43. package/dist/consolidate/priority.js +103 -0
  44. package/dist/consolidate/priority.js.map +1 -0
  45. package/dist/consolidate/revision.d.ts +81 -0
  46. package/dist/consolidate/revision.d.ts.map +1 -0
  47. package/dist/consolidate/revision.js +274 -0
  48. package/dist/consolidate/revision.js.map +1 -0
  49. package/dist/consolidate/state.d.ts +10 -0
  50. package/dist/consolidate/state.d.ts.map +1 -0
  51. package/dist/consolidate/state.js +54 -0
  52. package/dist/consolidate/state.js.map +1 -0
  53. package/dist/curation/edges.d.ts +5 -0
  54. package/dist/curation/edges.d.ts.map +1 -1
  55. package/dist/curation/edges.js +82 -9
  56. package/dist/curation/edges.js.map +1 -1
  57. package/dist/curation/shadow.d.ts +30 -0
  58. package/dist/curation/shadow.d.ts.map +1 -1
  59. package/dist/curation/shadow.js +84 -26
  60. package/dist/curation/shadow.js.map +1 -1
  61. package/dist/curation/staged-actions.d.ts +2 -0
  62. package/dist/curation/staged-actions.d.ts.map +1 -1
  63. package/dist/curation/staged-actions.js +8 -0
  64. package/dist/curation/staged-actions.js.map +1 -1
  65. package/dist/curation/tension.d.ts +1 -0
  66. package/dist/curation/tension.d.ts.map +1 -1
  67. package/dist/curation/tension.js +8 -0
  68. package/dist/curation/tension.js.map +1 -1
  69. package/dist/curation/vault-docs.d.ts +2 -1
  70. package/dist/curation/vault-docs.d.ts.map +1 -1
  71. package/dist/curation/vault-docs.js +1 -0
  72. package/dist/curation/vault-docs.js.map +1 -1
  73. package/dist/eval/llm.d.ts +3 -1
  74. package/dist/eval/llm.d.ts.map +1 -1
  75. package/dist/eval/llm.js +6 -2
  76. package/dist/eval/llm.js.map +1 -1
  77. package/dist/index.js +1 -1
  78. package/dist/storage/index-db.d.ts +2 -0
  79. package/dist/storage/index-db.d.ts.map +1 -1
  80. package/dist/storage/index-db.js +14 -9
  81. package/dist/storage/index-db.js.map +1 -1
  82. package/dist/tools/curation.d.ts.map +1 -1
  83. package/dist/tools/curation.js +16 -2
  84. package/dist/tools/curation.js.map +1 -1
  85. package/dist/tools/edges.d.ts.map +1 -1
  86. package/dist/tools/edges.js +1 -0
  87. package/dist/tools/edges.js.map +1 -1
  88. package/dist/tools/staged-actions.d.ts.map +1 -1
  89. package/dist/tools/staged-actions.js +2 -0
  90. package/dist/tools/staged-actions.js.map +1 -1
  91. package/dist/utils/git.d.ts +1 -0
  92. package/dist/utils/git.d.ts.map +1 -1
  93. package/dist/utils/git.js +19 -0
  94. package/dist/utils/git.js.map +1 -1
  95. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,7 +5,68 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## [1.23.0] - 2026-06-19
9
+
10
+ ### Added
11
+
12
+ - **Cortex consolidation loop — Stage 3 (two-gate envelope).** `daftari
13
+ consolidate` now consults a two-gate envelope — an **invariants** gate (it
14
+ refuses to act on an edge whose endpoint carries an unresolved tension) and a
15
+ **trust-budget** gate — before each edge `do()`. The envelope is enforced
16
+ **live but shadowed**: every decision is computed and journaled to
17
+ `.daftari/shadow-actions.jsonl` as `decision: "admitted"` or
18
+ `decision: "gated"` (with gate + reason), but never enacted. `vault_lint`
19
+ surfaces the gated/surfaced envelope decisions as a view distinct from the
20
+ existing would-gate calibration section.
21
+ - **§8 closures.** A loop decision records `decided_by_principal` (the
22
+ authenticated identity) on the staged action and contest tension it produces;
23
+ `vault_tension_resolve` is gated on `canRatify` for loop-authored tensions, so
24
+ the loop cannot close its own tensions.
25
+
26
+ ## [1.22.0] - 2026-06-17
27
+
28
+ ### Added
29
+
30
+ - **Cortex consolidation loop — Stage 2 (Component A).** The loop's read-side
31
+ curation engine, running `shadow_mode` + `ratify:false` by default (it proposes;
32
+ humans ratify), driven by `daftari consolidate --mode scan|birth|revision|both`.
33
+ - **Birth mode** — for an unprocessed doc, retrieve its top-K embedding
34
+ neighbors, judge whether a load-bearing derivation exists and in which
35
+ direction, and seed `k=0` candidate `derives_from` edges. The full top-K and
36
+ per-neighbor verdicts are logged to `.daftari/birth-trace.jsonl` for recall@K
37
+ evaluation.
38
+ - **Revision mode** — cast a panel of M independent votes on a due edge and
39
+ decide once by **majority**: majority-survives accrues strength (each
40
+ surviving vote observes on a distinct axis); majority-fails contests once
41
+ (revoke + tension); a tie surfaces without churning edge state.
42
+ - **Shadow mode** — edge writes route through `.daftari/shadow-actions.jsonl`
43
+ (calibration) with the durable `edges.jsonl` untouched; impact/blast/budget
44
+ are recorded per the §11.5 model.
45
+ - **Axis-decorrelation report** — `--report decorrelation --fixture <path>`
46
+ measures the elicitation prompt's direction-recovery accuracy on a
47
+ ground-truth fixture (PASS gate ≥ 85%).
48
+
49
+ - **Reliable `derives_from` edge direction (foundational-ordering).** Replaces the
50
+ brittle derives/depends token with a temperature-0 foundational-ordering
51
+ judgment (`{related, premise}`): which document is the load-bearing premise that
52
+ must be established first. Birth loads the neighbor's content and elicits the
53
+ direction in **both presentation orders**, committing a directed edge only when
54
+ the orders agree; genuinely-mutual or order-contested pairs become
55
+ direction-unconfirmed **pending edges** that stay visible as undirected
56
+ relationships but do not propagate triggers, plus an interpretive
57
+ direction-pending tension for human adjudication. Edge keys are canonical, so a
58
+ post-edit direction flip collapses to one symmetric edge rather than forking a
59
+ contradictory twin. Validated at 96–100% on curated clear-direction real-prose
60
+ pairs and 97.4% on the contamination-free decorrelation fixture.
61
+
62
+ ### Changed
63
+
64
+ - **SQLite index schema bumped to v6** — adds `direction_verdict` to
65
+ `derives_from_edges`. The `.daftari/index.db` is ephemeral and rebuilds from the
66
+ markdown/JSONL on first open; no data migration.
67
+ - `daftari consolidate` gains exit code **7** (event-clock baseline unreachable —
68
+ the gap is re-baselined to HEAD and left to the backstop clock, surfaced as a
69
+ cron-alertable signal rather than a silent success).
9
70
 
10
71
  ## [1.21.0] - 2026-06-12
11
72
 
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAqLA,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8DnE;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCvD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAuLA,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8DnE;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CvD"}
package/dist/cli.js CHANGED
@@ -23,6 +23,7 @@ Usage:
23
23
  daftari audit [options] Run a cross-repo coherence audit (see: daftari audit --help)
24
24
  daftari eval [options] Cortex quality metric (see: daftari eval --help)
25
25
  daftari backfill [options] Derive frontmatter for an existing wiki (see: daftari backfill --help)
26
+ daftari consolidate [options] Cortex loop scheduler — emit due/birth queues (see: daftari consolidate --help)
26
27
 
27
28
  Server options:
28
29
  --user <username> Identity the server runs as (default: guest)
@@ -51,6 +52,7 @@ const VAULT_GITIGNORE = `# Daftari rebuilds these from the markdown files — ne
51
52
  .daftari/staged-actions.jsonl
52
53
  .daftari/edges.jsonl
53
54
  .daftari/shadow-actions.jsonl
55
+ .daftari/consolidate-state.json
54
56
  # Transient backfill staging surface (daftari backfill --plan). The apply
55
57
  # commit is the durable audit trail — the plan itself is never committed.
56
58
  .daftari/backfill-plan.jsonl
@@ -224,6 +226,11 @@ export async function run(argv) {
224
226
  process.exitCode = await runBackfill(argv.slice(1));
225
227
  return;
226
228
  }
229
+ if (argv[0] === "consolidate") {
230
+ const { runConsolidate } = await import("./consolidate/index.js");
231
+ process.exitCode = await runConsolidate(argv.slice(1));
232
+ return;
233
+ }
227
234
  if (argv.includes("--help") || argv.includes("-h")) {
228
235
  process.stdout.write(USAGE);
229
236
  return;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { type EnvelopeJournalInput, type ShadowActionRecord } from "../curation/shadow.js";
2
+ import type { LoadedDoc } from "../curation/vault-docs.js";
3
+ import { type Result } from "../frontmatter/types.js";
4
+ import { type Admit } from "./envelope.js";
5
+ export interface AdmitConfig {
6
+ vaultRoot: string;
7
+ principal: string;
8
+ docs: LoadedDoc[];
9
+ journal?: (vaultRoot: string, input: EnvelopeJournalInput) => Promise<Result<ShadowActionRecord, Error>>;
10
+ }
11
+ export declare function makeAdmit(cfg: AdmitConfig): Promise<Result<{
12
+ admit: Admit;
13
+ journalFailures: () => number;
14
+ }, Error>>;
15
+ //# sourceMappingURL=admit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admit.d.ts","sourceRoot":"","sources":["../../src/consolidate/admit.ts"],"names":[],"mappings":"AAsBA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,kBAAkB,EAGxB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EACL,KAAK,KAAK,EAKX,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAOlB,IAAI,EAAE,SAAS,EAAE,CAAC;IAIlB,OAAO,CAAC,EAAE,CACR,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,oBAAoB,KACxB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC;CACjD;AA2BD,wBAAsB,SAAS,CAC7B,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,MAAM,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,eAAe,EAAE,MAAM,MAAM,CAAA;CAAE,EAAE,KAAK,CAAC,CAAC,CAmJzE"}
@@ -0,0 +1,176 @@
1
+ // The real `makeAdmit` for the consolidate CLI (Stage 3 §5/D1/D5/D6). This is
2
+ // the envelope-owned admit: it assembles the EnvelopeCtx from in-process vault
3
+ // data, calls the pure evaluateEnvelope, owns the §3.7 per-session spend scalar
4
+ // (deduct-on-admit), and journals every loop decision to the shadow log.
5
+ //
6
+ // SCALE (carried concern): the vault docs are NOT loaded here — the caller
7
+ // (index.ts) already walked the vault once via loadDocuments and passes that
8
+ // LoadedDoc[] in. makeAdmit reuses it to build the reverse maps, per-endpoint
9
+ // metadata, and docCount, so there is no second disk walk and no per-file
10
+ // re-read. The only I/O makeAdmit itself does is reading staged actions and
11
+ // tensions ONCE at construction. The returned Admit closure does NO vault walk
12
+ // per call: it computes only blast from cached reverse maps. (Birth admits
13
+ // per-neighbor, so a per-call vault load would be N full walks per doc — which
14
+ // is exactly what reusing the caller's docs avoids.)
15
+ //
16
+ // Because docs/tensions are loaded once (the docs upstream, tensions here at
17
+ // construction), a tension the loop itself logs mid-pass does NOT self-gate
18
+ // later edges in the same run — this matches the plan's "load tensions once"
19
+ // intent.
20
+ import { posix } from "node:path";
21
+ import { computeDecay } from "../curation/decay.js";
22
+ import { recordEnvelopeDecision, shadowBudget, shadowImpact, } from "../curation/shadow.js";
23
+ import { listStagedActions } from "../curation/staged-actions.js";
24
+ import { listTensions } from "../curation/tension.js";
25
+ import { buildReverseLinkMap, buildReverseSourceMap, computeBlast, } from "../curation/tension-blast.js";
26
+ import { ok } from "../frontmatter/types.js";
27
+ import { evaluateEnvelope, } from "./envelope.js";
28
+ // Same canon() the consolidate modules use — the recurring path-aliasing bug
29
+ // class (an alias like `x/../x/a.md` or `./x.md` would miss every keyed map).
30
+ function canon(p) {
31
+ return posix.normalize(p).replace(/^\.\//, "");
32
+ }
33
+ // Map the envelope action type to its journaling tool name.
34
+ function toolFor(action) {
35
+ return action === "edge-observe" ? "vault_edge_observe" : "vault_edge_contest";
36
+ }
37
+ // Builds the admit closure. Async + Result: construction still does I/O —
38
+ // listStagedActions / listTensions are read ONCE here and can fail. (The vault
39
+ // docs are NOT loaded here; the caller passes them in.) The CLI fails CLOSED on
40
+ // a construction error — the envelope must never let Component A auto-write on
41
+ // incomplete information.
42
+ export async function makeAdmit(cfg) {
43
+ const { vaultRoot, principal, docs: loaded } = cfg;
44
+ const journal = cfg.journal ?? recordEnvelopeDecision;
45
+ // Closure-local count of journal-write failures. Mirrors the traceWriteFailures
46
+ // pattern in index.ts: a calibration row that fails to persist is counted and
47
+ // surfaced, never silently dropped.
48
+ let journalFailures = 0;
49
+ // --- per-endpoint metadata, from the caller's already-loaded docs ---
50
+ //
51
+ // No vault walk and no per-file re-read happen here: the LoadedDoc[] the caller
52
+ // passed already carries each doc's coerced frontmatter (for decay) AND its
53
+ // schema-validation report (for provenance), both from the loader's single
54
+ // parse pass. loadDocuments silently drops malformed-YAML docs, so any path
55
+ // absent from `loaded` reads as unknown provenance below (fail closed); a doc
56
+ // present but schema-invalid reads provenanceKnown=false via validation.valid.
57
+ const cachedByPath = new Map();
58
+ for (const d of loaded) {
59
+ const relPath = canon(d.path);
60
+ // The doc parsed cleanly (it's in the load set ⇒ YAML well-formed);
61
+ // validation.valid tells us whether the schema holds (provenance-required,
62
+ // §5.1) — recovered in-memory from the loader's parse, no re-read.
63
+ const provenanceKnown = d.validation.valid;
64
+ cachedByPath.set(relPath, {
65
+ relPath,
66
+ provenanceKnown,
67
+ decayInput: {
68
+ status: d.frontmatter.status,
69
+ confidence: d.frontmatter.confidence,
70
+ updated: d.frontmatter.updated,
71
+ created: d.frontmatter.created,
72
+ ttl_days: d.frontmatter.ttl_days,
73
+ superseded_by: d.frontmatter.superseded_by,
74
+ },
75
+ });
76
+ }
77
+ // Reverse maps for blast — built from the loaded docs (one source of truth
78
+ // with the tension-blast engine). buildReverse* key on the raw relPaths the
79
+ // loader walked, so blast seeds canonicalize to those keys below.
80
+ const reverseSource = buildReverseSourceMap(loaded);
81
+ const reverseLink = buildReverseLinkMap(loaded);
82
+ const docCount = loaded.length;
83
+ // --- I/O ONCE: live pending staged actions → B₀ queue depth (§5.2) ---
84
+ const pendingRes = await listStagedActions(vaultRoot, "pending");
85
+ if (!pendingRes.ok)
86
+ return pendingRes;
87
+ const nowMs = Date.now();
88
+ const livePending = pendingRes.value.filter((a) => Date.parse(a.expiresAt) > nowMs).length;
89
+ // --- I/O ONCE: unresolved tensions → the tension-respect invariant (§5.1) ---
90
+ const tensionsRes = await listTensions(vaultRoot);
91
+ if (!tensionsRes.ok)
92
+ return tensionsRes;
93
+ const unresolvedTensionPaths = new Set();
94
+ for (const t of tensionsRes.value) {
95
+ if (t.resolved)
96
+ continue;
97
+ unresolvedTensionPaths.add(canon(t.sourceA));
98
+ unresolvedTensionPaths.add(canon(t.sourceB));
99
+ }
100
+ // The §3.7 per-session spend scalar — closure-local, ENVELOPE-owned (D6).
101
+ // NEVER touches shadow's module-global spentByVault.
102
+ let spent = 0;
103
+ // Build an endpoint's invariant state. A canonical relPath not in the cached
104
+ // docs (missing file, or a doc whose YAML was malformed and so was dropped by
105
+ // loadDocuments) reads as unknown provenance — fail closed.
106
+ //
107
+ // v1 scope note: "unknown/broken provenance" here means the doc is missing
108
+ // from the load set or its frontmatter is schema-invalid. Dangling-source
109
+ // detection (an edge endpoint whose `sources` cite a non-vault path) is
110
+ // deferred to Stage 4/5.
111
+ const endpointState = (path) => {
112
+ const cached = cachedByPath.get(path);
113
+ if (!cached) {
114
+ return { path, provenanceKnown: false, decayBlocking: false, hasUnresolvedTension: false };
115
+ }
116
+ const d = computeDecay(cached.decayInput);
117
+ // warn|deprecated block; aging does not (the scarcity rule, §5.1).
118
+ const decayBlocking = d !== null && d.level !== "aging";
119
+ return {
120
+ path,
121
+ provenanceKnown: cached.provenanceKnown,
122
+ decayBlocking,
123
+ hasUnresolvedTension: unresolvedTensionPaths.has(path),
124
+ };
125
+ };
126
+ const admit = async (a) => {
127
+ const canonFrom = canon(a.fromPath);
128
+ const canonTo = canon(a.toPath);
129
+ const action = a.action;
130
+ const fromState = endpointState(canonFrom);
131
+ const toState = endpointState(canonTo);
132
+ // Blast from cached maps (no disk walk). 1 (the action's own footprint) +
133
+ // unique downstream reach of both endpoints. Seeds are the canonical relPath
134
+ // keys the reverse maps use — which is exactly canon() output here.
135
+ const blast = 1 +
136
+ computeBlast({ seeds: [canonFrom, canonTo], reverseSource, reverseLink }).downstream.length;
137
+ const impact = shadowImpact(action, blast);
138
+ const budget = shadowBudget(livePending, docCount);
139
+ const verdict = evaluateEnvelope({ action, endpoints: [fromState, toState], impact, budget }, spent);
140
+ // Journal the decision (admitted OR gated) to the shadow log. In shadow mode
141
+ // the EDGE STORE write is suppressed by makeObserve; this decision journal
142
+ // runs regardless of shadow mode (the gate decision is identical either way).
143
+ //
144
+ // The journal returns a Result — it is CHECKED, not thrown. A failed journal
145
+ // write loses exactly one calibration row, but it must NOT change the gate
146
+ // verdict or crash the pass: the gate decision and the deduct below proceed
147
+ // unchanged. We count the failure here and surface it via the report instead.
148
+ const res = await journal(vaultRoot, {
149
+ tool: toolFor(action),
150
+ action,
151
+ targetPath: canonFrom,
152
+ touchedPaths: [canonFrom, canonTo],
153
+ agent: principal,
154
+ principal,
155
+ decision: verdict.admit ? "admitted" : "gated",
156
+ ...(verdict.gate ? { gate: verdict.gate, gateReason: verdict.reason } : {}),
157
+ impact: verdict.impact,
158
+ budget,
159
+ blast,
160
+ spentBefore: spent,
161
+ commitMessage: `[envelope:${verdict.admit ? "admit" : "gate"}] ${action} ${canonFrom} ← ${canonTo}`,
162
+ });
163
+ if (!res.ok)
164
+ journalFailures++;
165
+ // Deduct on admit (D1): only an admitted action spends. A gated action
166
+ // leaves the budget untouched so a following clean action can still admit.
167
+ // By design: deduction happens here (on the decision), before the caller's
168
+ // observe/contest write — a post-admit storage failure (off-shadow only;
169
+ // the shadow stub never fails) consumes budget even if no edge lands.
170
+ if (verdict.admit)
171
+ spent += verdict.impact;
172
+ return verdict;
173
+ };
174
+ return ok({ admit, journalFailures: () => journalFailures });
175
+ }
176
+ //# sourceMappingURL=admit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admit.js","sourceRoot":"","sources":["../../src/consolidate/admit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { DerivesFromEdge, ObserveEdgeInput } from "../curation/edges.js";
2
+ import type { TensionInput } from "../curation/tension.js";
3
+ import type { LlmClient } from "../eval/llm.js";
4
+ import { type Result } from "../frontmatter/types.js";
5
+ import { CONSOLIDATE_AGENT, type ConsolidatePromptTemplate } from "./constants.js";
6
+ import { type DerivationVerdict } from "./derivation-prompt.js";
7
+ import type { Admit } from "./envelope.js";
8
+ export interface BirthDeps {
9
+ llm: LlmClient;
10
+ searchNeighbors: (docPath: string, k: number) => Promise<Result<string[], Error>>;
11
+ loadNeighborContent: (path: string) => Promise<Result<string, Error>>;
12
+ admit: Admit;
13
+ observe: (input: ObserveEdgeInput) => Promise<Result<DerivesFromEdge, Error>>;
14
+ recordTension: (input: TensionInput) => Promise<Result<unknown, Error>>;
15
+ recordBirthTrace: (row: BirthTraceRow) => Promise<Result<void, Error>>;
16
+ }
17
+ export interface BirthOpts {
18
+ vaultRoot: string;
19
+ agent: string;
20
+ axis: ConsolidatePromptTemplate;
21
+ budgetRemaining: number;
22
+ model: string;
23
+ }
24
+ export interface BirthVerdict {
25
+ neighbor: string;
26
+ related: boolean;
27
+ direction: "directed" | "symmetric" | "none";
28
+ premise: "doc" | "neighbor" | null;
29
+ reason: string;
30
+ gated?: boolean;
31
+ gate?: "invariants" | "budget" | null;
32
+ }
33
+ export interface BirthVerdictError {
34
+ neighbor: string;
35
+ error: string;
36
+ }
37
+ export interface BirthTraceRow {
38
+ at: string;
39
+ docPath: string;
40
+ contentHash: string;
41
+ topK: string[];
42
+ axis: ConsolidatePromptTemplate;
43
+ model: string;
44
+ verdicts: Array<BirthVerdict | BirthVerdictError>;
45
+ }
46
+ export interface BirthOutcome {
47
+ docPath: string;
48
+ contentHash: string;
49
+ neighbors: string[];
50
+ verdicts: Array<BirthVerdict | BirthVerdictError>;
51
+ observations: Array<{
52
+ from: string;
53
+ to: string;
54
+ }>;
55
+ gatedCount: number;
56
+ llmCalls: number;
57
+ inputTokens: number;
58
+ outputTokens: number;
59
+ traceWritten: boolean;
60
+ traceError?: string;
61
+ }
62
+ export type ReconcileOutcome = {
63
+ kind: "unrelated";
64
+ } | {
65
+ kind: "directed";
66
+ premise: "doc" | "neighbor";
67
+ } | {
68
+ kind: "symmetric";
69
+ contested: boolean;
70
+ };
71
+ export declare function reconcileDirection(order1: DerivationVerdict, order2: DerivationVerdict): ReconcileOutcome;
72
+ export declare function birthOne(doc: {
73
+ relPath: string;
74
+ content: string;
75
+ }, deps: BirthDeps, opts: BirthOpts): Promise<Result<BirthOutcome, Error>>;
76
+ export declare function birthTracePath(vaultRoot: string): string;
77
+ export declare function appendBirthTrace(vaultRoot: string, row: BirthTraceRow): Promise<Result<void, Error>>;
78
+ export { CONSOLIDATE_AGENT };
79
+ //# sourceMappingURL=birth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"birth.d.ts","sourceRoot":"","sources":["../../src/consolidate/birth.ts"],"names":[],"mappings":"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"}