daftari 1.29.0 → 1.31.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 +281 -0
- package/README.md +263 -9
- package/dist/access/rbac.d.ts +1 -0
- package/dist/access/rbac.d.ts.map +1 -1
- package/dist/access/rbac.js +7 -0
- package/dist/access/rbac.js.map +1 -1
- package/dist/asof/git-read.d.ts +17 -0
- package/dist/asof/git-read.d.ts.map +1 -0
- package/dist/asof/git-read.js +163 -0
- package/dist/asof/git-read.js.map +1 -0
- package/dist/asof/index.d.ts +2 -0
- package/dist/asof/index.d.ts.map +1 -0
- package/dist/asof/index.js +151 -0
- package/dist/asof/index.js.map +1 -0
- package/dist/asof/report.d.ts +11 -0
- package/dist/asof/report.d.ts.map +1 -0
- package/dist/asof/report.js +119 -0
- package/dist/asof/report.js.map +1 -0
- package/dist/asof/snapshot.d.ts +72 -0
- package/dist/asof/snapshot.d.ts.map +1 -0
- package/dist/asof/snapshot.js +207 -0
- package/dist/asof/snapshot.js.map +1 -0
- package/dist/audit/checks/broken_refs.d.ts +1 -1
- package/dist/audit/checks/broken_refs.d.ts.map +1 -1
- package/dist/audit/checks/broken_refs.js +77 -22
- package/dist/audit/checks/broken_refs.js.map +1 -1
- package/dist/audit/collect.d.ts +1 -0
- package/dist/audit/collect.d.ts.map +1 -1
- package/dist/audit/collect.js +22 -2
- package/dist/audit/collect.js.map +1 -1
- package/dist/audit/index.d.ts.map +1 -1
- package/dist/audit/index.js +9 -3
- package/dist/audit/index.js.map +1 -1
- package/dist/audit/links.d.ts.map +1 -1
- package/dist/audit/links.js +9 -3
- package/dist/audit/links.js.map +1 -1
- package/dist/audit/report.d.ts.map +1 -1
- package/dist/audit/report.js +2 -0
- package/dist/audit/report.js.map +1 -1
- package/dist/audit/types.d.ts +4 -1
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/audit/types.js.map +1 -1
- package/dist/backfill/apply.js +2 -2
- package/dist/backfill/apply.js.map +1 -1
- package/dist/backfill/derive.d.ts.map +1 -1
- package/dist/backfill/derive.js +1 -0
- package/dist/backfill/derive.js.map +1 -1
- package/dist/backfill/plan.js +2 -2
- package/dist/backfill/plan.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -0
- package/dist/cli.js.map +1 -1
- package/dist/consolidate/call-budget.d.ts +3 -0
- package/dist/consolidate/call-budget.d.ts.map +1 -0
- package/dist/consolidate/call-budget.js +37 -0
- package/dist/consolidate/call-budget.js.map +1 -0
- package/dist/consolidate/constants.d.ts +1 -0
- package/dist/consolidate/constants.d.ts.map +1 -1
- package/dist/consolidate/constants.js +5 -0
- package/dist/consolidate/constants.js.map +1 -1
- package/dist/consolidate/index.d.ts.map +1 -1
- package/dist/consolidate/index.js +96 -27
- package/dist/consolidate/index.js.map +1 -1
- package/dist/court/docket.d.ts +39 -0
- package/dist/court/docket.d.ts.map +1 -0
- package/dist/court/docket.js +103 -0
- package/dist/court/docket.js.map +1 -0
- package/dist/court/index.d.ts +2 -0
- package/dist/court/index.d.ts.map +1 -0
- package/dist/court/index.js +169 -0
- package/dist/court/index.js.map +1 -0
- package/dist/court/precedent.d.ts +18 -0
- package/dist/court/precedent.d.ts.map +1 -0
- package/dist/court/precedent.js +89 -0
- package/dist/court/precedent.js.map +1 -0
- package/dist/court/report.d.ts +10 -0
- package/dist/court/report.d.ts.map +1 -0
- package/dist/court/report.js +77 -0
- package/dist/court/report.js.map +1 -0
- package/dist/curation/consumes.d.ts +24 -0
- package/dist/curation/consumes.d.ts.map +1 -0
- package/dist/curation/consumes.js +122 -0
- package/dist/curation/consumes.js.map +1 -0
- package/dist/curation/edge-staleness.d.ts +47 -0
- package/dist/curation/edge-staleness.d.ts.map +1 -0
- package/dist/curation/edge-staleness.js +258 -0
- package/dist/curation/edge-staleness.js.map +1 -0
- package/dist/curation/edges.d.ts.map +1 -1
- package/dist/curation/edges.js +164 -10
- package/dist/curation/edges.js.map +1 -1
- package/dist/curation/lint.d.ts +4 -1
- package/dist/curation/lint.d.ts.map +1 -1
- package/dist/curation/lint.js +61 -6
- package/dist/curation/lint.js.map +1 -1
- package/dist/curation/provenance.d.ts +2 -0
- package/dist/curation/provenance.d.ts.map +1 -1
- package/dist/curation/provenance.js +2 -0
- package/dist/curation/provenance.js.map +1 -1
- package/dist/curation/read-log.d.ts +19 -0
- package/dist/curation/read-log.d.ts.map +1 -0
- package/dist/curation/read-log.js +120 -0
- package/dist/curation/read-log.js.map +1 -0
- package/dist/curation/review-throughput.d.ts +24 -0
- package/dist/curation/review-throughput.d.ts.map +1 -0
- package/dist/curation/review-throughput.js +102 -0
- package/dist/curation/review-throughput.js.map +1 -0
- package/dist/curation/staged-actions.d.ts +11 -1
- package/dist/curation/staged-actions.d.ts.map +1 -1
- package/dist/curation/staged-actions.js +117 -30
- package/dist/curation/staged-actions.js.map +1 -1
- package/dist/curation/staleness.js +1 -1
- package/dist/curation/staleness.js.map +1 -1
- package/dist/curation/structural.d.ts +16 -0
- package/dist/curation/structural.d.ts.map +1 -0
- package/dist/curation/structural.js +64 -0
- package/dist/curation/structural.js.map +1 -0
- package/dist/curation/tension-access.d.ts +7 -0
- package/dist/curation/tension-access.d.ts.map +1 -0
- package/dist/curation/tension-access.js +44 -0
- package/dist/curation/tension-access.js.map +1 -0
- package/dist/curation/tension-blast.d.ts +6 -1
- package/dist/curation/tension-blast.d.ts.map +1 -1
- package/dist/curation/tension-blast.js +11 -2
- package/dist/curation/tension-blast.js.map +1 -1
- package/dist/curation/tension-clusters.d.ts +1 -1
- package/dist/curation/tension-clusters.d.ts.map +1 -1
- package/dist/curation/tension-clusters.js +5 -2
- package/dist/curation/tension-clusters.js.map +1 -1
- package/dist/curation/tension.d.ts +6 -2
- package/dist/curation/tension.d.ts.map +1 -1
- package/dist/curation/tension.js +86 -35
- package/dist/curation/tension.js.map +1 -1
- package/dist/curation/tier0.d.ts +27 -0
- package/dist/curation/tier0.d.ts.map +1 -0
- package/dist/curation/tier0.js +196 -0
- package/dist/curation/tier0.js.map +1 -0
- package/dist/curation/tier1.d.ts +30 -0
- package/dist/curation/tier1.d.ts.map +1 -0
- package/dist/curation/tier1.js +142 -0
- package/dist/curation/tier1.js.map +1 -0
- package/dist/curation/tier2.d.ts +43 -0
- package/dist/curation/tier2.d.ts.map +1 -0
- package/dist/curation/tier2.js +182 -0
- package/dist/curation/tier2.js.map +1 -0
- package/dist/curation/vault-docs.d.ts +5 -1
- package/dist/curation/vault-docs.d.ts.map +1 -1
- package/dist/curation/vault-docs.js +15 -1
- package/dist/curation/vault-docs.js.map +1 -1
- package/dist/eval/generate.js +22 -5
- package/dist/eval/generate.js.map +1 -1
- package/dist/eval/index.d.ts.map +1 -1
- package/dist/eval/index.js +173 -25
- package/dist/eval/index.js.map +1 -1
- package/dist/eval/llm-openrouter.d.ts +9 -0
- package/dist/eval/llm-openrouter.d.ts.map +1 -0
- package/dist/eval/llm-openrouter.js +171 -0
- package/dist/eval/llm-openrouter.js.map +1 -0
- package/dist/eval/llm.js +1 -1
- package/dist/eval/llm.js.map +1 -1
- package/dist/eval/prune.d.ts +24 -0
- package/dist/eval/prune.d.ts.map +1 -0
- package/dist/eval/prune.js +83 -0
- package/dist/eval/prune.js.map +1 -0
- package/dist/eval/storage.d.ts +3 -0
- package/dist/eval/storage.d.ts.map +1 -1
- package/dist/eval/storage.js +14 -0
- package/dist/eval/storage.js.map +1 -1
- package/dist/frontmatter/parser.d.ts +1 -0
- package/dist/frontmatter/parser.d.ts.map +1 -1
- package/dist/frontmatter/parser.js +12 -0
- package/dist/frontmatter/parser.js.map +1 -1
- package/dist/frontmatter/schema.d.ts.map +1 -1
- package/dist/frontmatter/schema.js +38 -3
- package/dist/frontmatter/schema.js.map +1 -1
- package/dist/frontmatter/types.d.ts +4 -1
- package/dist/frontmatter/types.d.ts.map +1 -1
- package/dist/frontmatter/types.js +8 -0
- package/dist/frontmatter/types.js.map +1 -1
- package/dist/import/index.d.ts.map +1 -1
- package/dist/import/index.js +44 -9
- package/dist/import/index.js.map +1 -1
- package/dist/import/langgraph-store.d.ts +53 -0
- package/dist/import/langgraph-store.d.ts.map +1 -0
- package/dist/import/langgraph-store.js +292 -0
- package/dist/import/langgraph-store.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -18
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/lock.d.ts +9 -1
- package/dist/lifecycle/lock.d.ts.map +1 -1
- package/dist/lifecycle/lock.js +34 -9
- package/dist/lifecycle/lock.js.map +1 -1
- package/dist/okf/export.d.ts +12 -0
- package/dist/okf/export.d.ts.map +1 -0
- package/dist/okf/export.js +115 -0
- package/dist/okf/export.js.map +1 -0
- package/dist/okf/import.d.ts +24 -0
- package/dist/okf/import.d.ts.map +1 -0
- package/dist/okf/import.js +107 -0
- package/dist/okf/import.js.map +1 -0
- package/dist/okf/index.d.ts +2 -0
- package/dist/okf/index.d.ts.map +1 -0
- package/dist/okf/index.js +147 -0
- package/dist/okf/index.js.map +1 -0
- package/dist/okf/map.d.ts +16 -0
- package/dist/okf/map.d.ts.map +1 -0
- package/dist/okf/map.js +149 -0
- package/dist/okf/map.js.map +1 -0
- package/dist/okf/types.d.ts +9 -0
- package/dist/okf/types.d.ts.map +1 -0
- package/dist/okf/types.js +48 -0
- package/dist/okf/types.js.map +1 -0
- package/dist/search/contested.d.ts +18 -0
- package/dist/search/contested.d.ts.map +1 -0
- package/dist/search/contested.js +119 -0
- package/dist/search/contested.js.map +1 -0
- package/dist/search/coverage.d.ts.map +1 -1
- package/dist/search/coverage.js +1 -1
- package/dist/search/coverage.js.map +1 -1
- package/dist/search/hybrid.d.ts +23 -0
- package/dist/search/hybrid.d.ts.map +1 -1
- package/dist/search/hybrid.js +75 -15
- package/dist/search/hybrid.js.map +1 -1
- package/dist/search/reindex.d.ts +1 -0
- package/dist/search/reindex.d.ts.map +1 -1
- package/dist/search/reindex.js +57 -24
- package/dist/search/reindex.js.map +1 -1
- package/dist/search/watcher.d.ts +2 -0
- package/dist/search/watcher.d.ts.map +1 -1
- package/dist/search/watcher.js +23 -12
- package/dist/search/watcher.js.map +1 -1
- package/dist/serve/index.d.ts +36 -0
- package/dist/serve/index.d.ts.map +1 -0
- package/dist/serve/index.js +507 -0
- package/dist/serve/index.js.map +1 -0
- package/dist/server.d.ts +10 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +91 -12
- package/dist/server.js.map +1 -1
- package/dist/sleep/cycle.d.ts +59 -0
- package/dist/sleep/cycle.d.ts.map +1 -0
- package/dist/sleep/cycle.js +127 -0
- package/dist/sleep/cycle.js.map +1 -0
- package/dist/sleep/index.d.ts +5 -0
- package/dist/sleep/index.d.ts.map +1 -0
- package/dist/sleep/index.js +320 -0
- package/dist/sleep/index.js.map +1 -0
- package/dist/sleep/report.d.ts +14 -0
- package/dist/sleep/report.d.ts.map +1 -0
- package/dist/sleep/report.js +139 -0
- package/dist/sleep/report.js.map +1 -0
- package/dist/sleep/tension-scan-state.d.ts +19 -0
- package/dist/sleep/tension-scan-state.d.ts.map +1 -0
- package/dist/sleep/tension-scan-state.js +0 -0
- package/dist/sleep/tension-scan-state.js.map +1 -0
- package/dist/sleep/tension-scan.d.ts +44 -0
- package/dist/sleep/tension-scan.d.ts.map +1 -0
- package/dist/sleep/tension-scan.js +0 -0
- package/dist/sleep/tension-scan.js.map +1 -0
- package/dist/storage/backend.d.ts +12 -0
- package/dist/storage/backend.d.ts.map +1 -0
- package/dist/storage/backend.js +231 -0
- package/dist/storage/backend.js.map +1 -0
- package/dist/storage/backends/fs.d.ts +4 -0
- package/dist/storage/backends/fs.d.ts.map +1 -0
- package/dist/storage/backends/fs.js +99 -0
- package/dist/storage/backends/fs.js.map +1 -0
- package/dist/storage/fs-walk.d.ts +5 -0
- package/dist/storage/fs-walk.d.ts.map +1 -0
- package/dist/storage/fs-walk.js +28 -0
- package/dist/storage/fs-walk.js.map +1 -0
- package/dist/storage/index-db.d.ts +18 -0
- package/dist/storage/index-db.d.ts.map +1 -1
- package/dist/storage/index-db.js +159 -22
- package/dist/storage/index-db.js.map +1 -1
- package/dist/storage/local.d.ts +7 -1
- package/dist/storage/local.d.ts.map +1 -1
- package/dist/storage/local.js +42 -4
- package/dist/storage/local.js.map +1 -1
- package/dist/storage/sync.d.ts +25 -0
- package/dist/storage/sync.d.ts.map +1 -0
- package/dist/storage/sync.js +308 -0
- package/dist/storage/sync.js.map +1 -0
- package/dist/sync/index.d.ts +2 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +136 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/themes/clustering.d.ts +6 -11
- package/dist/themes/clustering.d.ts.map +1 -1
- package/dist/themes/clustering.js +76 -84
- package/dist/themes/clustering.js.map +1 -1
- package/dist/tools/consumes.d.ts +14 -0
- package/dist/tools/consumes.d.ts.map +1 -0
- package/dist/tools/consumes.js +99 -0
- package/dist/tools/consumes.js.map +1 -0
- package/dist/tools/curation.d.ts +2 -0
- package/dist/tools/curation.d.ts.map +1 -1
- package/dist/tools/curation.js +102 -7
- package/dist/tools/curation.js.map +1 -1
- package/dist/tools/edge-staleness.d.ts +28 -0
- package/dist/tools/edge-staleness.d.ts.map +1 -0
- package/dist/tools/edge-staleness.js +205 -0
- package/dist/tools/edge-staleness.js.map +1 -0
- package/dist/tools/edges.d.ts.map +1 -1
- package/dist/tools/edges.js +28 -22
- package/dist/tools/edges.js.map +1 -1
- package/dist/tools/read.d.ts +15 -1
- package/dist/tools/read.d.ts.map +1 -1
- package/dist/tools/read.js +144 -31
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/receipt.d.ts +65 -0
- package/dist/tools/receipt.d.ts.map +1 -0
- package/dist/tools/receipt.js +257 -0
- package/dist/tools/receipt.js.map +1 -0
- package/dist/tools/search.d.ts +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +186 -12
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/staged-actions.d.ts +3 -0
- package/dist/tools/staged-actions.d.ts.map +1 -1
- package/dist/tools/staged-actions.js +228 -23
- package/dist/tools/staged-actions.js.map +1 -1
- package/dist/tools/themes.d.ts +9 -0
- package/dist/tools/themes.d.ts.map +1 -1
- package/dist/tools/themes.js +333 -133
- package/dist/tools/themes.js.map +1 -1
- package/dist/tools/tier1.d.ts +14 -0
- package/dist/tools/tier1.d.ts.map +1 -0
- package/dist/tools/tier1.js +169 -0
- package/dist/tools/tier1.js.map +1 -0
- package/dist/tools/tier2.d.ts +27 -0
- package/dist/tools/tier2.d.ts.map +1 -0
- package/dist/tools/tier2.js +344 -0
- package/dist/tools/tier2.js.map +1 -0
- package/dist/tools/witness.d.ts +9 -0
- package/dist/tools/witness.d.ts.map +1 -0
- package/dist/tools/witness.js +66 -0
- package/dist/tools/witness.js.map +1 -0
- package/dist/tools/write.d.ts +9 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +593 -59
- package/dist/tools/write.js.map +1 -1
- package/dist/utils/config.d.ts +54 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +420 -4
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/paths.d.ts +2 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +15 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/redos.d.ts +2 -0
- package/dist/utils/redos.d.ts.map +1 -0
- package/dist/utils/redos.js +101 -0
- package/dist/utils/redos.js.map +1 -0
- package/dist/utils/run-id.d.ts +3 -0
- package/dist/utils/run-id.d.ts.map +1 -0
- package/dist/utils/run-id.js +19 -0
- package/dist/utils/run-id.js.map +1 -0
- package/dist/utils/vault-gitignore.d.ts +1 -1
- package/dist/utils/vault-gitignore.d.ts.map +1 -1
- package/dist/utils/vault-gitignore.js +6 -1
- package/dist/utils/vault-gitignore.js.map +1 -1
- package/dist/witness/track-record.d.ts +42 -0
- package/dist/witness/track-record.d.ts.map +1 -0
- package/dist/witness/track-record.js +189 -0
- package/dist/witness/track-record.js.map +1 -0
- package/package.json +27 -2
- package/templates/config.yaml +8 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Result } from "../frontmatter/types.js";
|
|
2
|
+
export interface AsofCommit {
|
|
3
|
+
hash: string;
|
|
4
|
+
date: string;
|
|
5
|
+
subject: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveAsofCommit(vaultRoot: string, refOrDate: string): Promise<Result<AsofCommit, Error>>;
|
|
8
|
+
export declare function listTreeDocs(vaultRoot: string, commit: string): Promise<Result<string[], Error>>;
|
|
9
|
+
export declare function readBlobsAt(vaultRoot: string, commit: string, paths: string[]): Promise<Result<Map<string, string>, Error>>;
|
|
10
|
+
export interface RangeCommit {
|
|
11
|
+
hash: string;
|
|
12
|
+
date: string;
|
|
13
|
+
author: string;
|
|
14
|
+
subject: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function logRangeForPath(vaultRoot: string, since: string, path: string): Promise<Result<RangeCommit[], Error>>;
|
|
17
|
+
//# sourceMappingURL=git-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-read.d.ts","sourceRoot":"","sources":["../../src/asof/git-read.ts"],"names":[],"mappings":"AAWA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAqB/D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAQD,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAwBpC;AAaD,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC,CAMlC;AAMD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAuD7C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAmBvC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// Read-only git plumbing for `daftari asof` — belief archaeology.
|
|
2
|
+
//
|
|
3
|
+
// Git is Daftari's version layer, so "what did we believe on March 3?" is a
|
|
4
|
+
// question git can already answer: resolve the date to a commit, read the
|
|
5
|
+
// tree at that commit, parse the same markdown the live tools parse. This
|
|
6
|
+
// module is strictly read-only — it never touches the work tree, never
|
|
7
|
+
// creates a worktree or checkout, and writes nothing to the repo. All reads
|
|
8
|
+
// go through `git ls-tree` / `git cat-file --batch` / `git log`.
|
|
9
|
+
import { execFile, spawn } from "node:child_process";
|
|
10
|
+
import { promisify } from "node:util";
|
|
11
|
+
import { err, ok } from "../frontmatter/types.js";
|
|
12
|
+
const run = promisify(execFile);
|
|
13
|
+
async function git(vaultRoot, args) {
|
|
14
|
+
try {
|
|
15
|
+
const { stdout } = await run("git", ["-C", vaultRoot, ...args], {
|
|
16
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
17
|
+
});
|
|
18
|
+
return ok(stdout);
|
|
19
|
+
}
|
|
20
|
+
catch (e) {
|
|
21
|
+
const reason = e instanceof Error && "stderr" in e && typeof e.stderr === "string"
|
|
22
|
+
? e.stderr.trim() || e.message
|
|
23
|
+
: e instanceof Error
|
|
24
|
+
? e.message
|
|
25
|
+
: String(e);
|
|
26
|
+
return err(new Error(`git ${args[0]} failed: ${reason}`));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
30
|
+
// Resolves the user's `<ref-or-date>` to a commit. A YYYY-MM-DD date means
|
|
31
|
+
// "the last commit made on or before the end of that day" (committer date,
|
|
32
|
+
// local time — the same clock the commits were made on). Anything else is
|
|
33
|
+
// handed to rev-parse as a ref (HEAD~3, a branch, a hash, a tag).
|
|
34
|
+
export async function resolveAsofCommit(vaultRoot, refOrDate) {
|
|
35
|
+
if (typeof refOrDate !== "string" || refOrDate.trim().length === 0) {
|
|
36
|
+
return err(new Error("asof requires a non-empty ref or YYYY-MM-DD date"));
|
|
37
|
+
}
|
|
38
|
+
const input = refOrDate.trim();
|
|
39
|
+
let hash;
|
|
40
|
+
if (DATE_RE.test(input)) {
|
|
41
|
+
const listed = await git(vaultRoot, ["rev-list", "-1", `--before=${input} 23:59:59`, "HEAD"]);
|
|
42
|
+
if (!listed.ok)
|
|
43
|
+
return listed;
|
|
44
|
+
hash = listed.value.trim();
|
|
45
|
+
if (hash.length === 0) {
|
|
46
|
+
return err(new Error(`no commit exists on or before ${input}`));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const parsed = await git(vaultRoot, ["rev-parse", "--verify", `${input}^{commit}`]);
|
|
51
|
+
if (!parsed.ok)
|
|
52
|
+
return err(new Error(`cannot resolve '${input}' to a commit`));
|
|
53
|
+
hash = parsed.value.trim();
|
|
54
|
+
}
|
|
55
|
+
const meta = await git(vaultRoot, ["show", "-s", "--format=%H%x1f%cs%x1f%s", hash]);
|
|
56
|
+
if (!meta.ok)
|
|
57
|
+
return meta;
|
|
58
|
+
const [fullHash, date, subject] = meta.value.trim().split("\x1f");
|
|
59
|
+
return ok({ hash: fullHash ?? hash, date: date ?? "", subject: subject ?? "" });
|
|
60
|
+
}
|
|
61
|
+
// Path segments the live loader never sees (listFiles ignores dotfiles,
|
|
62
|
+
// .daftari, node_modules, .obsidian, .trash) — the historical tree must be
|
|
63
|
+
// filtered identically or then/now diffs would report phantom drift.
|
|
64
|
+
function isManagedDocPath(path) {
|
|
65
|
+
if (!path.endsWith(".md"))
|
|
66
|
+
return false;
|
|
67
|
+
const segments = path.split("/");
|
|
68
|
+
return segments.every((s) => !s.startsWith(".") && s !== "node_modules");
|
|
69
|
+
}
|
|
70
|
+
// Vault-relative paths of the managed markdown documents in the tree at
|
|
71
|
+
// `commit`, sorted (matching listFiles' sorted output).
|
|
72
|
+
export async function listTreeDocs(vaultRoot, commit) {
|
|
73
|
+
const listed = await git(vaultRoot, ["ls-tree", "-r", "--name-only", "-z", commit]);
|
|
74
|
+
if (!listed.ok)
|
|
75
|
+
return listed;
|
|
76
|
+
const paths = listed.value.split("\0").filter((p) => p.length > 0 && isManagedDocPath(p));
|
|
77
|
+
paths.sort();
|
|
78
|
+
return ok(paths);
|
|
79
|
+
}
|
|
80
|
+
// Reads many blobs from one commit in a single `git cat-file --batch`
|
|
81
|
+
// process. Returns a map of path → file content; a path that does not exist
|
|
82
|
+
// at the commit is simply absent from the map. One spawn total, so reading a
|
|
83
|
+
// 3,500-file historical tree costs one process, not 3,500.
|
|
84
|
+
export async function readBlobsAt(vaultRoot, commit, paths) {
|
|
85
|
+
if (paths.length === 0)
|
|
86
|
+
return ok(new Map());
|
|
87
|
+
return new Promise((resolvePromise) => {
|
|
88
|
+
const child = spawn("git", ["-C", vaultRoot, "cat-file", "--batch"], {
|
|
89
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
90
|
+
});
|
|
91
|
+
const stdoutChunks = [];
|
|
92
|
+
const stderrChunks = [];
|
|
93
|
+
child.stdout.on("data", (c) => stdoutChunks.push(c));
|
|
94
|
+
child.stderr.on("data", (c) => stderrChunks.push(c));
|
|
95
|
+
child.on("error", (e) => {
|
|
96
|
+
resolvePromise(err(new Error(`git cat-file failed to spawn: ${e.message}`)));
|
|
97
|
+
});
|
|
98
|
+
child.on("close", (code) => {
|
|
99
|
+
if (code !== 0) {
|
|
100
|
+
const reason = Buffer.concat(stderrChunks).toString("utf-8").trim();
|
|
101
|
+
resolvePromise(err(new Error(`git cat-file exited ${code}: ${reason}`)));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Batch output, per requested object, in request order:
|
|
105
|
+
// "<oid> <type> <size>\n" + <size> bytes + "\n" — found
|
|
106
|
+
// "<input> missing\n" — absent
|
|
107
|
+
// Sizes are BYTE counts, so parsing walks the raw Buffer, decoding
|
|
108
|
+
// each content slice to UTF-8 only after it is bounded.
|
|
109
|
+
const out = Buffer.concat(stdoutChunks);
|
|
110
|
+
const contents = new Map();
|
|
111
|
+
let offset = 0;
|
|
112
|
+
for (const path of paths) {
|
|
113
|
+
const nl = out.indexOf(0x0a, offset);
|
|
114
|
+
if (nl === -1) {
|
|
115
|
+
resolvePromise(err(new Error("git cat-file: truncated batch output")));
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const header = out.subarray(offset, nl).toString("utf-8");
|
|
119
|
+
offset = nl + 1;
|
|
120
|
+
if (header.endsWith(" missing"))
|
|
121
|
+
continue;
|
|
122
|
+
const parts = header.split(" ");
|
|
123
|
+
const size = Number(parts[2]);
|
|
124
|
+
if (!Number.isFinite(size) || size < 0) {
|
|
125
|
+
resolvePromise(err(new Error(`git cat-file: unparseable header: ${header}`)));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
contents.set(path, out.subarray(offset, offset + size).toString("utf-8"));
|
|
129
|
+
offset += size + 1; // skip the trailing \n after the content
|
|
130
|
+
}
|
|
131
|
+
resolvePromise(ok(contents));
|
|
132
|
+
});
|
|
133
|
+
for (const path of paths)
|
|
134
|
+
child.stdin.write(`${commit}:${path}\n`);
|
|
135
|
+
child.stdin.end();
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// Commits in `<since>..HEAD` touching `path`, newest first. The trajectory
|
|
139
|
+
// view uses this to show every revision a document went through since the
|
|
140
|
+
// as-of point.
|
|
141
|
+
export async function logRangeForPath(vaultRoot, since, path) {
|
|
142
|
+
const result = await git(vaultRoot, [
|
|
143
|
+
"log",
|
|
144
|
+
"--format=%H%x1f%cs%x1f%aN%x1f%s%x1e",
|
|
145
|
+
`${since}..HEAD`,
|
|
146
|
+
"--",
|
|
147
|
+
path,
|
|
148
|
+
]);
|
|
149
|
+
if (!result.ok)
|
|
150
|
+
return result;
|
|
151
|
+
const commits = [];
|
|
152
|
+
for (const record of result.value.split("\x1e")) {
|
|
153
|
+
const trimmed = record.trim();
|
|
154
|
+
if (!trimmed)
|
|
155
|
+
continue;
|
|
156
|
+
const [hash, date, author, subject] = trimmed.split("\x1f");
|
|
157
|
+
if (!hash)
|
|
158
|
+
continue;
|
|
159
|
+
commits.push({ hash, date: date ?? "", author: author ?? "", subject: subject ?? "" });
|
|
160
|
+
}
|
|
161
|
+
return ok(commits);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=git-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-read.js","sourceRoot":"","sources":["../../src/asof/git-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/asof/index.ts"],"names":[],"mappings":"AA2DA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqF7D"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// Top-level entry for `daftari asof` — belief archaeology over the vault's
|
|
2
|
+
// git history. Strictly read-only: never checks anything out, never writes
|
|
3
|
+
// to the repo, needs no index and no API key.
|
|
4
|
+
//
|
|
5
|
+
// Exit codes (the audit convention):
|
|
6
|
+
// 0 — report produced
|
|
7
|
+
// 2 — config/usage error (bad ref or date, not a git repo, unknown doc)
|
|
8
|
+
// 3 — runtime error (IO failure writing the report)
|
|
9
|
+
import { writeFile } from "node:fs/promises";
|
|
10
|
+
import { resolve } from "node:path";
|
|
11
|
+
import { listTensions } from "../curation/tension.js";
|
|
12
|
+
import { isGitRepo } from "../utils/git.js";
|
|
13
|
+
import { resolveAsofCommit } from "./git-read.js";
|
|
14
|
+
import { renderJson, renderMarkdown } from "./report.js";
|
|
15
|
+
import { beliefSnapshot, counterfactualReplay, docTrajectory } from "./snapshot.js";
|
|
16
|
+
const HELP = `daftari asof — what did the vault believe at a past point?
|
|
17
|
+
|
|
18
|
+
Usage:
|
|
19
|
+
daftari asof <ref-or-date> [--vault <path>] [options]
|
|
20
|
+
daftari asof --help
|
|
21
|
+
|
|
22
|
+
<ref-or-date> is either a git ref (HEAD~5, a branch, a commit hash, a tag)
|
|
23
|
+
or a YYYY-MM-DD date, meaning the last commit on or before the end of that
|
|
24
|
+
day (committer clock).
|
|
25
|
+
|
|
26
|
+
The default report is a belief snapshot: the vault's document and tension
|
|
27
|
+
state at that point, plus the drift since — documents added/removed, status
|
|
28
|
+
and confidence transitions, and tensions opened or resolved.
|
|
29
|
+
|
|
30
|
+
Flags:
|
|
31
|
+
--vault <path> Vault root (default: current directory).
|
|
32
|
+
--doc <relpath> Add a single-document trajectory: its frontmatter
|
|
33
|
+
then vs now, and every commit touching it since.
|
|
34
|
+
--blast <relpath> Add a counterfactual replay: the blast radius of the
|
|
35
|
+
document computed over the tree AS OF the commit
|
|
36
|
+
(same source/link edge semantics as
|
|
37
|
+
vault_tension_blast), each downstream doc annotated
|
|
38
|
+
with its status today. "This fact turned out wrong —
|
|
39
|
+
who had inherited it, and where are they now?"
|
|
40
|
+
--output <md> Markdown report destination (default: stdout).
|
|
41
|
+
--output-json <json> JSON report destination (default: not written).
|
|
42
|
+
|
|
43
|
+
Read-only. Works on any daftari vault that uses git as its version layer.
|
|
44
|
+
|
|
45
|
+
Exit codes:
|
|
46
|
+
0 — report produced
|
|
47
|
+
2 — config/usage error (bad ref/date, not a git repo, unknown doc)
|
|
48
|
+
3 — runtime error (IO failure)
|
|
49
|
+
`;
|
|
50
|
+
function readStringArg(argv, flag) {
|
|
51
|
+
const raw = argv.find((a) => a === flag || a.startsWith(`${flag}=`));
|
|
52
|
+
if (raw === undefined)
|
|
53
|
+
return undefined;
|
|
54
|
+
const idx = argv.indexOf(raw);
|
|
55
|
+
return raw.includes("=") ? raw.slice(raw.indexOf("=") + 1) : argv[idx + 1];
|
|
56
|
+
}
|
|
57
|
+
export async function runAsof(argv) {
|
|
58
|
+
if (argv.length === 0 || argv.includes("--help") || argv.includes("-h")) {
|
|
59
|
+
process.stdout.write(HELP);
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
const refOrDate = findPositional(argv);
|
|
63
|
+
if (!refOrDate) {
|
|
64
|
+
process.stderr.write("daftari asof: missing <ref-or-date>\n");
|
|
65
|
+
return 2;
|
|
66
|
+
}
|
|
67
|
+
const vaultRoot = resolve(readStringArg(argv, "--vault") ?? ".");
|
|
68
|
+
if (!(await isGitRepo(vaultRoot))) {
|
|
69
|
+
process.stderr.write(`daftari asof: not a git repository: ${vaultRoot}\n`);
|
|
70
|
+
return 2;
|
|
71
|
+
}
|
|
72
|
+
const commit = await resolveAsofCommit(vaultRoot, refOrDate);
|
|
73
|
+
if (!commit.ok) {
|
|
74
|
+
process.stderr.write(`daftari asof: ${commit.error.message}\n`);
|
|
75
|
+
return 2;
|
|
76
|
+
}
|
|
77
|
+
const tensionsNow = await listTensions(vaultRoot);
|
|
78
|
+
if (!tensionsNow.ok) {
|
|
79
|
+
process.stderr.write(`daftari asof: ${tensionsNow.error.message}\n`);
|
|
80
|
+
return 3;
|
|
81
|
+
}
|
|
82
|
+
const snapshot = await beliefSnapshot(vaultRoot, commit.value, tensionsNow.value);
|
|
83
|
+
if (!snapshot.ok) {
|
|
84
|
+
process.stderr.write(`daftari asof: ${snapshot.error.message}\n`);
|
|
85
|
+
return 3;
|
|
86
|
+
}
|
|
87
|
+
const docPath = readStringArg(argv, "--doc");
|
|
88
|
+
let trajectory = null;
|
|
89
|
+
if (docPath) {
|
|
90
|
+
const t = await docTrajectory(vaultRoot, commit.value, docPath);
|
|
91
|
+
if (!t.ok) {
|
|
92
|
+
process.stderr.write(`daftari asof: ${t.error.message}\n`);
|
|
93
|
+
return 2;
|
|
94
|
+
}
|
|
95
|
+
trajectory = t.value;
|
|
96
|
+
}
|
|
97
|
+
const blastPath = readStringArg(argv, "--blast");
|
|
98
|
+
let replay = null;
|
|
99
|
+
if (blastPath) {
|
|
100
|
+
const r = await counterfactualReplay(vaultRoot, commit.value, blastPath);
|
|
101
|
+
if (!r.ok) {
|
|
102
|
+
process.stderr.write(`daftari asof: ${r.error.message}\n`);
|
|
103
|
+
return 2;
|
|
104
|
+
}
|
|
105
|
+
replay = r.value;
|
|
106
|
+
}
|
|
107
|
+
const report = {
|
|
108
|
+
generatedAt: new Date().toISOString(),
|
|
109
|
+
vault: vaultRoot,
|
|
110
|
+
snapshot: snapshot.value,
|
|
111
|
+
trajectory,
|
|
112
|
+
replay,
|
|
113
|
+
};
|
|
114
|
+
const md = renderMarkdown(report);
|
|
115
|
+
const outputMd = readStringArg(argv, "--output");
|
|
116
|
+
const outputJson = readStringArg(argv, "--output-json");
|
|
117
|
+
try {
|
|
118
|
+
if (outputMd) {
|
|
119
|
+
await writeFile(resolve(outputMd), md, "utf-8");
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
process.stdout.write(md);
|
|
123
|
+
}
|
|
124
|
+
if (outputJson) {
|
|
125
|
+
await writeFile(resolve(outputJson), renderJson(report), "utf-8");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
130
|
+
process.stderr.write(`daftari asof: write failed: ${reason}\n`);
|
|
131
|
+
return 3;
|
|
132
|
+
}
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
// The positional <ref-or-date> is the first argv entry that is neither a
|
|
136
|
+
// --flag nor the value of a value-taking flag (the `--flag value` form; the
|
|
137
|
+
// `--flag=value` form never occupies its own entry).
|
|
138
|
+
const VALUE_FLAGS = ["--vault", "--doc", "--blast", "--output", "--output-json"];
|
|
139
|
+
function findPositional(argv) {
|
|
140
|
+
for (let i = 0; i < argv.length; i++) {
|
|
141
|
+
const a = argv[i];
|
|
142
|
+
if (a.startsWith("--"))
|
|
143
|
+
continue;
|
|
144
|
+
const prev = i > 0 ? argv[i - 1] : undefined;
|
|
145
|
+
if (prev !== undefined && VALUE_FLAGS.includes(prev))
|
|
146
|
+
continue;
|
|
147
|
+
return a;
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/asof/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AsofReplay, AsofSnapshot, DocTrajectory } from "./snapshot.js";
|
|
2
|
+
export interface AsofReport {
|
|
3
|
+
generatedAt: string;
|
|
4
|
+
vault: string;
|
|
5
|
+
snapshot: AsofSnapshot;
|
|
6
|
+
trajectory: DocTrajectory | null;
|
|
7
|
+
replay: AsofReplay | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function renderMarkdown(report: AsofReport): string;
|
|
10
|
+
export declare function renderJson(report: AsofReport): string;
|
|
11
|
+
//# sourceMappingURL=report.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/asof/report.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI7E,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3B;AAeD,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA2GzD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAErD"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Markdown + JSON rendering for `daftari asof`. Mirrors the audit report's
|
|
2
|
+
// conventions: markdown to stdout by default, JSON carries the same
|
|
3
|
+
// structure with full detail, long lists are capped in markdown (never in
|
|
4
|
+
// JSON) with an explicit "+n more" so truncation is visible, not silent.
|
|
5
|
+
const LIST_CAP = 50;
|
|
6
|
+
function cappedList(items, render) {
|
|
7
|
+
const shown = items.slice(0, LIST_CAP).map(render);
|
|
8
|
+
if (items.length > LIST_CAP)
|
|
9
|
+
shown.push(`- …and ${items.length - LIST_CAP} more`);
|
|
10
|
+
return shown;
|
|
11
|
+
}
|
|
12
|
+
function countLine(counts) {
|
|
13
|
+
const parts = Object.entries(counts)
|
|
14
|
+
.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
|
|
15
|
+
.map(([k, n]) => `${k} ${n}`);
|
|
16
|
+
return parts.length > 0 ? parts.join(" · ") : "(none)";
|
|
17
|
+
}
|
|
18
|
+
export function renderMarkdown(report) {
|
|
19
|
+
const { snapshot, trajectory, replay } = report;
|
|
20
|
+
const short = snapshot.commit.hash.slice(0, 8);
|
|
21
|
+
const lines = [];
|
|
22
|
+
lines.push(`# Belief Snapshot — as of ${snapshot.commit.date} (${short})`);
|
|
23
|
+
lines.push("");
|
|
24
|
+
lines.push(`> ${snapshot.commit.subject}`);
|
|
25
|
+
lines.push("");
|
|
26
|
+
lines.push("## The vault then");
|
|
27
|
+
lines.push(`- documents: **${snapshot.docCount}**`);
|
|
28
|
+
lines.push(`- by status: ${countLine(snapshot.byStatus)}`);
|
|
29
|
+
lines.push(`- by collection: ${countLine(snapshot.byCollection)}`);
|
|
30
|
+
lines.push("");
|
|
31
|
+
lines.push(`## Drift since (${short}..now)`);
|
|
32
|
+
const d = snapshot.drift;
|
|
33
|
+
lines.push(`- added: **${d.added.length}** · removed: **${d.removed.length}** · ` +
|
|
34
|
+
`belief transitions: **${d.transitions.length}** · bodies changed: **${d.bodiesChanged}**`);
|
|
35
|
+
lines.push("");
|
|
36
|
+
if (d.transitions.length > 0) {
|
|
37
|
+
lines.push("### Belief transitions");
|
|
38
|
+
lines.push("| doc | field | then | now |");
|
|
39
|
+
lines.push("|-----|-------|------|-----|");
|
|
40
|
+
for (const t of d.transitions.slice(0, LIST_CAP)) {
|
|
41
|
+
lines.push(`| ${t.path} | ${t.field} | ${t.from} | ${t.to} |`);
|
|
42
|
+
}
|
|
43
|
+
if (d.transitions.length > LIST_CAP) {
|
|
44
|
+
lines.push(`| …and ${d.transitions.length - LIST_CAP} more | | | |`);
|
|
45
|
+
}
|
|
46
|
+
lines.push("");
|
|
47
|
+
}
|
|
48
|
+
if (d.added.length > 0) {
|
|
49
|
+
lines.push("### Added since");
|
|
50
|
+
lines.push(...cappedList(d.added, (p) => `- ${p}`));
|
|
51
|
+
lines.push("");
|
|
52
|
+
}
|
|
53
|
+
if (d.removed.length > 0) {
|
|
54
|
+
lines.push("### Removed since");
|
|
55
|
+
lines.push(...cappedList(d.removed, (p) => `- ${p}`));
|
|
56
|
+
lines.push("");
|
|
57
|
+
}
|
|
58
|
+
const tn = snapshot.tensions;
|
|
59
|
+
lines.push("## Tensions");
|
|
60
|
+
lines.push(`- open then: **${tn.openThen}** · open now: **${tn.openNow}**`);
|
|
61
|
+
if (tn.openedSince.length > 0) {
|
|
62
|
+
lines.push(`- opened since: **${tn.openedSince.length}**`);
|
|
63
|
+
for (const t of tn.openedSince.slice(0, LIST_CAP)) {
|
|
64
|
+
lines.push(` - ${t.date} · ${t.kind} · ${t.title}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (tn.resolvedSince.length > 0) {
|
|
68
|
+
lines.push(`- resolved since: **${tn.resolvedSince.length}**`);
|
|
69
|
+
for (const t of tn.resolvedSince.slice(0, LIST_CAP)) {
|
|
70
|
+
lines.push(` - ${t.date} · ${t.kind} · ${t.title} → ${t.resolutionKind}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
lines.push("");
|
|
74
|
+
if (replay) {
|
|
75
|
+
lines.push(`## Counterfactual replay — ${replay.document}`);
|
|
76
|
+
lines.push(`Downstream of this document **as of ${snapshot.commit.date}**: ` +
|
|
77
|
+
`**${replay.downstreamThen.length}** documents ` +
|
|
78
|
+
`(primary ${replay.primaryBlast}, advisory ${replay.advisoryBlast}, ` +
|
|
79
|
+
`max depth ${replay.maxDepth}). ` +
|
|
80
|
+
`Of those, **${replay.stillCanonicalNow}** are still canonical today and ` +
|
|
81
|
+
`**${replay.goneNow}** are gone.`);
|
|
82
|
+
lines.push("");
|
|
83
|
+
if (replay.downstreamThen.length > 0) {
|
|
84
|
+
lines.push("| downstream doc (then) | dependency | distance | status now |");
|
|
85
|
+
lines.push("|----------------------|------------|----------|------------|");
|
|
86
|
+
for (const e of replay.downstreamThen.slice(0, LIST_CAP)) {
|
|
87
|
+
lines.push(`| ${e.path} | ${e.dependency_type} | ${e.distance} | ${e.statusNow} |`);
|
|
88
|
+
}
|
|
89
|
+
if (replay.downstreamThen.length > LIST_CAP) {
|
|
90
|
+
lines.push(`| …and ${replay.downstreamThen.length - LIST_CAP} more | | | |`);
|
|
91
|
+
}
|
|
92
|
+
lines.push("");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (trajectory) {
|
|
96
|
+
lines.push(`## Document trajectory — ${trajectory.path}`);
|
|
97
|
+
lines.push("| | then | now |");
|
|
98
|
+
lines.push("|-|------|-----|");
|
|
99
|
+
const fields = ["title", "status", "confidence", "updated", "provenance"];
|
|
100
|
+
for (const f of fields) {
|
|
101
|
+
const a = trajectory.asOf ? trajectory.asOf[f] : "(absent)";
|
|
102
|
+
const b = trajectory.current ? trajectory.current[f] : "(gone)";
|
|
103
|
+
lines.push(`| ${f} | ${a} | ${b} |`);
|
|
104
|
+
}
|
|
105
|
+
lines.push("");
|
|
106
|
+
if (trajectory.commitsBetween.length > 0) {
|
|
107
|
+
lines.push(`### Commits touching it since (${trajectory.commitsBetween.length})`);
|
|
108
|
+
for (const c of trajectory.commitsBetween.slice(0, LIST_CAP)) {
|
|
109
|
+
lines.push(`- ${c.date} · ${c.hash.slice(0, 8)} · ${c.author} · ${c.subject}`);
|
|
110
|
+
}
|
|
111
|
+
lines.push("");
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return `${lines.join("\n")}\n`;
|
|
115
|
+
}
|
|
116
|
+
export function renderJson(report) {
|
|
117
|
+
return `${JSON.stringify(report, null, 2)}\n`;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/asof/report.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,oEAAoE;AACpE,0EAA0E;AAC1E,yEAAyE;AAIzE,MAAM,QAAQ,GAAG,EAAE,CAAC;AAUpB,SAAS,UAAU,CAAC,KAAe,EAAE,MAA6B;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG,QAAQ,OAAO,CAAC,CAAC;IAClF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,MAA8B;IAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,6BAA6B,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC;IAC3E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,kBAAkB,QAAQ,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,oBAAoB,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC;IAC7C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;IACzB,KAAK,CAAC,IAAI,CACR,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM,mBAAmB,CAAC,CAAC,OAAO,CAAC,MAAM,OAAO;QACpE,yBAAyB,CAAC,CAAC,WAAW,CAAC,MAAM,0BAA0B,CAAC,CAAC,aAAa,IAAI,CAC7F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,QAAQ,eAAe,CAAC,CAAC;QACvE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,QAAQ,oBAAoB,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC;IAC5E,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,8BAA8B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,CACR,uCAAuC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM;YAC/D,KAAK,MAAM,CAAC,cAAc,CAAC,MAAM,eAAe;YAChD,YAAY,MAAM,CAAC,YAAY,cAAc,MAAM,CAAC,aAAa,IAAI;YACrE,aAAa,MAAM,CAAC,QAAQ,KAAK;YACjC,eAAe,MAAM,CAAC,iBAAiB,mCAAmC;YAC1E,KAAK,MAAM,CAAC,OAAO,cAAc,CACpC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAC7E,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAC5E,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,eAAe,MAAM,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;YACtF,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC5C,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,QAAQ,eAAe,CAAC,CAAC;YAC/E,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,4BAA4B,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,CAAU,CAAC;QACnF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAC5D,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,IAAI,UAAU,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,kCAAkC,UAAU,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAClF,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type TensionEntry } from "../curation/tension.js";
|
|
2
|
+
import { type BlastDependencyType } from "../curation/tension-blast.js";
|
|
3
|
+
import { type LoadedDoc } from "../curation/vault-docs.js";
|
|
4
|
+
import { type Result } from "../frontmatter/types.js";
|
|
5
|
+
import { type AsofCommit, type RangeCommit } from "./git-read.js";
|
|
6
|
+
export declare function loadDocumentsAt(vaultRoot: string, commit: string): Promise<Result<LoadedDoc[], Error>>;
|
|
7
|
+
export interface BeliefTransition {
|
|
8
|
+
path: string;
|
|
9
|
+
field: "status" | "confidence";
|
|
10
|
+
from: string;
|
|
11
|
+
to: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AsofSnapshot {
|
|
14
|
+
commit: AsofCommit;
|
|
15
|
+
docCount: number;
|
|
16
|
+
byStatus: Record<string, number>;
|
|
17
|
+
byCollection: Record<string, number>;
|
|
18
|
+
drift: {
|
|
19
|
+
added: string[];
|
|
20
|
+
removed: string[];
|
|
21
|
+
transitions: BeliefTransition[];
|
|
22
|
+
bodiesChanged: number;
|
|
23
|
+
};
|
|
24
|
+
tensions: {
|
|
25
|
+
openThen: number;
|
|
26
|
+
openNow: number;
|
|
27
|
+
openedSince: {
|
|
28
|
+
title: string;
|
|
29
|
+
date: string;
|
|
30
|
+
kind: string;
|
|
31
|
+
}[];
|
|
32
|
+
resolvedSince: {
|
|
33
|
+
title: string;
|
|
34
|
+
date: string;
|
|
35
|
+
kind: string;
|
|
36
|
+
resolutionKind: string;
|
|
37
|
+
}[];
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export declare function computeTransitions(then: LoadedDoc[], now: LoadedDoc[]): BeliefTransition[];
|
|
41
|
+
export declare function beliefSnapshot(vaultRoot: string, commit: AsofCommit, tensionsNow: TensionEntry[]): Promise<Result<AsofSnapshot, Error>>;
|
|
42
|
+
export interface ReplayEntry {
|
|
43
|
+
path: string;
|
|
44
|
+
dependency_type: BlastDependencyType;
|
|
45
|
+
distance: number;
|
|
46
|
+
statusNow: string;
|
|
47
|
+
}
|
|
48
|
+
export interface AsofReplay {
|
|
49
|
+
document: string;
|
|
50
|
+
downstreamThen: ReplayEntry[];
|
|
51
|
+
primaryBlast: number;
|
|
52
|
+
advisoryBlast: number;
|
|
53
|
+
maxDepth: number;
|
|
54
|
+
stillCanonicalNow: number;
|
|
55
|
+
goneNow: number;
|
|
56
|
+
}
|
|
57
|
+
export declare function counterfactualReplay(vaultRoot: string, commit: AsofCommit, document: string): Promise<Result<AsofReplay, Error>>;
|
|
58
|
+
export interface DocState {
|
|
59
|
+
title: string;
|
|
60
|
+
status: string;
|
|
61
|
+
confidence: string;
|
|
62
|
+
updated: string;
|
|
63
|
+
provenance: string;
|
|
64
|
+
}
|
|
65
|
+
export interface DocTrajectory {
|
|
66
|
+
path: string;
|
|
67
|
+
asOf: DocState | null;
|
|
68
|
+
current: DocState | null;
|
|
69
|
+
commitsBetween: RangeCommit[];
|
|
70
|
+
}
|
|
71
|
+
export declare function docTrajectory(vaultRoot: string, commit: AsofCommit, path: string): Promise<Result<DocTrajectory, Error>>;
|
|
72
|
+
//# sourceMappingURL=snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/asof/snapshot.ts"],"names":[],"mappings":"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"}
|