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.
- package/CHANGELOG.md +62 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -1
- package/dist/consolidate/admit.d.ts +15 -0
- package/dist/consolidate/admit.d.ts.map +1 -0
- package/dist/consolidate/admit.js +176 -0
- package/dist/consolidate/admit.js.map +1 -0
- package/dist/consolidate/birth.d.ts +79 -0
- package/dist/consolidate/birth.d.ts.map +1 -0
- package/dist/consolidate/birth.js +315 -0
- package/dist/consolidate/birth.js.map +1 -0
- package/dist/consolidate/clocks.d.ts +15 -0
- package/dist/consolidate/clocks.d.ts.map +1 -0
- package/dist/consolidate/clocks.js +127 -0
- package/dist/consolidate/clocks.js.map +1 -0
- package/dist/consolidate/constants.d.ts +26 -0
- package/dist/consolidate/constants.d.ts.map +1 -0
- package/dist/consolidate/constants.js +83 -0
- package/dist/consolidate/constants.js.map +1 -0
- package/dist/consolidate/decorrelation.d.ts +69 -0
- package/dist/consolidate/decorrelation.d.ts.map +1 -0
- package/dist/consolidate/decorrelation.js +287 -0
- package/dist/consolidate/decorrelation.js.map +1 -0
- package/dist/consolidate/derivation-prompt.d.ts +28 -0
- package/dist/consolidate/derivation-prompt.d.ts.map +1 -0
- package/dist/consolidate/derivation-prompt.js +72 -0
- package/dist/consolidate/derivation-prompt.js.map +1 -0
- package/dist/consolidate/edge-write.d.ts +9 -0
- package/dist/consolidate/edge-write.d.ts.map +1 -0
- package/dist/consolidate/edge-write.js +59 -0
- package/dist/consolidate/edge-write.js.map +1 -0
- package/dist/consolidate/envelope.d.ts +27 -0
- package/dist/consolidate/envelope.d.ts.map +1 -0
- package/dist/consolidate/envelope.js +90 -0
- package/dist/consolidate/envelope.js.map +1 -0
- package/dist/consolidate/index.d.ts +2 -0
- package/dist/consolidate/index.d.ts.map +1 -0
- package/dist/consolidate/index.js +531 -0
- package/dist/consolidate/index.js.map +1 -0
- package/dist/consolidate/priority.d.ts +25 -0
- package/dist/consolidate/priority.d.ts.map +1 -0
- package/dist/consolidate/priority.js +103 -0
- package/dist/consolidate/priority.js.map +1 -0
- package/dist/consolidate/revision.d.ts +81 -0
- package/dist/consolidate/revision.d.ts.map +1 -0
- package/dist/consolidate/revision.js +274 -0
- package/dist/consolidate/revision.js.map +1 -0
- package/dist/consolidate/state.d.ts +10 -0
- package/dist/consolidate/state.d.ts.map +1 -0
- package/dist/consolidate/state.js +54 -0
- package/dist/consolidate/state.js.map +1 -0
- package/dist/curation/edges.d.ts +5 -0
- package/dist/curation/edges.d.ts.map +1 -1
- package/dist/curation/edges.js +82 -9
- package/dist/curation/edges.js.map +1 -1
- package/dist/curation/shadow.d.ts +30 -0
- package/dist/curation/shadow.d.ts.map +1 -1
- package/dist/curation/shadow.js +84 -26
- package/dist/curation/shadow.js.map +1 -1
- package/dist/curation/staged-actions.d.ts +2 -0
- package/dist/curation/staged-actions.d.ts.map +1 -1
- package/dist/curation/staged-actions.js +8 -0
- package/dist/curation/staged-actions.js.map +1 -1
- package/dist/curation/tension.d.ts +1 -0
- package/dist/curation/tension.d.ts.map +1 -1
- package/dist/curation/tension.js +8 -0
- package/dist/curation/tension.js.map +1 -1
- package/dist/curation/vault-docs.d.ts +2 -1
- package/dist/curation/vault-docs.d.ts.map +1 -1
- package/dist/curation/vault-docs.js +1 -0
- package/dist/curation/vault-docs.js.map +1 -1
- package/dist/eval/llm.d.ts +3 -1
- package/dist/eval/llm.d.ts.map +1 -1
- package/dist/eval/llm.js +6 -2
- package/dist/eval/llm.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/storage/index-db.d.ts +2 -0
- package/dist/storage/index-db.d.ts.map +1 -1
- package/dist/storage/index-db.js +14 -9
- package/dist/storage/index-db.js.map +1 -1
- package/dist/tools/curation.d.ts.map +1 -1
- package/dist/tools/curation.js +16 -2
- package/dist/tools/curation.js.map +1 -1
- package/dist/tools/edges.d.ts.map +1 -1
- package/dist/tools/edges.js +1 -0
- package/dist/tools/edges.js.map +1 -1
- package/dist/tools/staged-actions.d.ts.map +1 -1
- package/dist/tools/staged-actions.js +2 -0
- package/dist/tools/staged-actions.js.map +1 -1
- package/dist/utils/git.d.ts +1 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +19 -0
- package/dist/utils/git.js.map +1 -1
- 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
|
-
## [
|
|
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":";
|
|
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":";AACA,eAAe;AACf,EAAE;AACF,0DAA0D;AAC1D,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,+BAA+B;AAE/B,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAErD,MAAM,KAAK,GAAG
|
|
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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"}
|