daftari 1.30.0 → 1.32.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 (310) hide show
  1. package/CHANGELOG.md +176 -0
  2. package/README.md +188 -4
  3. package/dist/access/rbac.d.ts +1 -0
  4. package/dist/access/rbac.d.ts.map +1 -1
  5. package/dist/access/rbac.js +7 -0
  6. package/dist/access/rbac.js.map +1 -1
  7. package/dist/audit/checks/broken_refs.d.ts +1 -1
  8. package/dist/audit/checks/broken_refs.d.ts.map +1 -1
  9. package/dist/audit/checks/broken_refs.js +77 -22
  10. package/dist/audit/checks/broken_refs.js.map +1 -1
  11. package/dist/audit/collect.d.ts +1 -0
  12. package/dist/audit/collect.d.ts.map +1 -1
  13. package/dist/audit/collect.js +22 -2
  14. package/dist/audit/collect.js.map +1 -1
  15. package/dist/audit/index.d.ts.map +1 -1
  16. package/dist/audit/index.js +9 -3
  17. package/dist/audit/index.js.map +1 -1
  18. package/dist/audit/links.d.ts.map +1 -1
  19. package/dist/audit/links.js +9 -3
  20. package/dist/audit/links.js.map +1 -1
  21. package/dist/audit/report.d.ts.map +1 -1
  22. package/dist/audit/report.js +2 -0
  23. package/dist/audit/report.js.map +1 -1
  24. package/dist/audit/types.d.ts +4 -1
  25. package/dist/audit/types.d.ts.map +1 -1
  26. package/dist/audit/types.js.map +1 -1
  27. package/dist/backfill/derive.d.ts.map +1 -1
  28. package/dist/backfill/derive.js +1 -0
  29. package/dist/backfill/derive.js.map +1 -1
  30. package/dist/cli.d.ts.map +1 -1
  31. package/dist/cli.js +24 -0
  32. package/dist/cli.js.map +1 -1
  33. package/dist/consolidate/index.d.ts.map +1 -1
  34. package/dist/consolidate/index.js +10 -12
  35. package/dist/consolidate/index.js.map +1 -1
  36. package/dist/court/precedent.d.ts.map +1 -1
  37. package/dist/court/precedent.js +6 -1
  38. package/dist/court/precedent.js.map +1 -1
  39. package/dist/curation/consumes.d.ts +24 -0
  40. package/dist/curation/consumes.d.ts.map +1 -0
  41. package/dist/curation/consumes.js +122 -0
  42. package/dist/curation/consumes.js.map +1 -0
  43. package/dist/curation/edge-staleness.d.ts +47 -0
  44. package/dist/curation/edge-staleness.d.ts.map +1 -0
  45. package/dist/curation/edge-staleness.js +258 -0
  46. package/dist/curation/edge-staleness.js.map +1 -0
  47. package/dist/curation/edges.d.ts.map +1 -1
  48. package/dist/curation/edges.js +190 -17
  49. package/dist/curation/edges.js.map +1 -1
  50. package/dist/curation/lint.d.ts +6 -1
  51. package/dist/curation/lint.d.ts.map +1 -1
  52. package/dist/curation/lint.js +87 -24
  53. package/dist/curation/lint.js.map +1 -1
  54. package/dist/curation/provenance.d.ts +2 -0
  55. package/dist/curation/provenance.d.ts.map +1 -1
  56. package/dist/curation/provenance.js +2 -0
  57. package/dist/curation/provenance.js.map +1 -1
  58. package/dist/curation/read-log.d.ts +19 -0
  59. package/dist/curation/read-log.d.ts.map +1 -0
  60. package/dist/curation/read-log.js +120 -0
  61. package/dist/curation/read-log.js.map +1 -0
  62. package/dist/curation/review-throughput.d.ts +24 -0
  63. package/dist/curation/review-throughput.d.ts.map +1 -0
  64. package/dist/curation/review-throughput.js +102 -0
  65. package/dist/curation/review-throughput.js.map +1 -0
  66. package/dist/curation/shadow.d.ts +1 -0
  67. package/dist/curation/shadow.d.ts.map +1 -1
  68. package/dist/curation/shadow.js +17 -11
  69. package/dist/curation/shadow.js.map +1 -1
  70. package/dist/curation/staged-actions.d.ts +12 -1
  71. package/dist/curation/staged-actions.d.ts.map +1 -1
  72. package/dist/curation/staged-actions.js +123 -48
  73. package/dist/curation/staged-actions.js.map +1 -1
  74. package/dist/curation/structural.d.ts +16 -0
  75. package/dist/curation/structural.d.ts.map +1 -0
  76. package/dist/curation/structural.js +64 -0
  77. package/dist/curation/structural.js.map +1 -0
  78. package/dist/curation/tension-blast.d.ts +4 -0
  79. package/dist/curation/tension-blast.d.ts.map +1 -1
  80. package/dist/curation/tension-blast.js +9 -0
  81. package/dist/curation/tension-blast.js.map +1 -1
  82. package/dist/curation/tension.d.ts +5 -2
  83. package/dist/curation/tension.d.ts.map +1 -1
  84. package/dist/curation/tension.js +68 -25
  85. package/dist/curation/tension.js.map +1 -1
  86. package/dist/curation/tier0.d.ts +27 -0
  87. package/dist/curation/tier0.d.ts.map +1 -0
  88. package/dist/curation/tier0.js +196 -0
  89. package/dist/curation/tier0.js.map +1 -0
  90. package/dist/curation/tier1.d.ts +30 -0
  91. package/dist/curation/tier1.d.ts.map +1 -0
  92. package/dist/curation/tier1.js +142 -0
  93. package/dist/curation/tier1.js.map +1 -0
  94. package/dist/curation/tier2.d.ts +43 -0
  95. package/dist/curation/tier2.d.ts.map +1 -0
  96. package/dist/curation/tier2.js +182 -0
  97. package/dist/curation/tier2.js.map +1 -0
  98. package/dist/curation/vault-docs.d.ts +5 -1
  99. package/dist/curation/vault-docs.d.ts.map +1 -1
  100. package/dist/curation/vault-docs.js +14 -0
  101. package/dist/curation/vault-docs.js.map +1 -1
  102. package/dist/eval/generate.d.ts.map +1 -1
  103. package/dist/eval/generate.js +38 -5
  104. package/dist/eval/generate.js.map +1 -1
  105. package/dist/eval/index.d.ts +1 -0
  106. package/dist/eval/index.d.ts.map +1 -1
  107. package/dist/eval/index.js +249 -50
  108. package/dist/eval/index.js.map +1 -1
  109. package/dist/eval/llm-openrouter.d.ts.map +1 -1
  110. package/dist/eval/llm-openrouter.js +158 -65
  111. package/dist/eval/llm-openrouter.js.map +1 -1
  112. package/dist/eval/llm.js +1 -1
  113. package/dist/eval/llm.js.map +1 -1
  114. package/dist/eval/prune.d.ts +24 -0
  115. package/dist/eval/prune.d.ts.map +1 -0
  116. package/dist/eval/prune.js +83 -0
  117. package/dist/eval/prune.js.map +1 -0
  118. package/dist/eval/storage.d.ts +3 -0
  119. package/dist/eval/storage.d.ts.map +1 -1
  120. package/dist/eval/storage.js +14 -0
  121. package/dist/eval/storage.js.map +1 -1
  122. package/dist/frontmatter/schema.d.ts.map +1 -1
  123. package/dist/frontmatter/schema.js +19 -1
  124. package/dist/frontmatter/schema.js.map +1 -1
  125. package/dist/frontmatter/types.d.ts +4 -1
  126. package/dist/frontmatter/types.d.ts.map +1 -1
  127. package/dist/frontmatter/types.js +8 -0
  128. package/dist/frontmatter/types.js.map +1 -1
  129. package/dist/import/index.d.ts.map +1 -1
  130. package/dist/import/index.js +44 -9
  131. package/dist/import/index.js.map +1 -1
  132. package/dist/import/langgraph-store.d.ts +53 -0
  133. package/dist/import/langgraph-store.d.ts.map +1 -0
  134. package/dist/import/langgraph-store.js +292 -0
  135. package/dist/import/langgraph-store.js.map +1 -0
  136. package/dist/index.d.ts +5 -0
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +56 -18
  139. package/dist/index.js.map +1 -1
  140. package/dist/interview/index.d.ts +7 -0
  141. package/dist/interview/index.d.ts.map +1 -0
  142. package/dist/interview/index.js +219 -0
  143. package/dist/interview/index.js.map +1 -0
  144. package/dist/interview/questions.d.ts +18 -0
  145. package/dist/interview/questions.d.ts.map +1 -0
  146. package/dist/interview/questions.js +169 -0
  147. package/dist/interview/questions.js.map +1 -0
  148. package/dist/interview/transcript.d.ts +23 -0
  149. package/dist/interview/transcript.d.ts.map +1 -0
  150. package/dist/interview/transcript.js +155 -0
  151. package/dist/interview/transcript.js.map +1 -0
  152. package/dist/lifecycle/lock.d.ts +9 -1
  153. package/dist/lifecycle/lock.d.ts.map +1 -1
  154. package/dist/lifecycle/lock.js +34 -9
  155. package/dist/lifecycle/lock.js.map +1 -1
  156. package/dist/okf/export.d.ts +12 -0
  157. package/dist/okf/export.d.ts.map +1 -0
  158. package/dist/okf/export.js +117 -0
  159. package/dist/okf/export.js.map +1 -0
  160. package/dist/okf/import.d.ts +24 -0
  161. package/dist/okf/import.d.ts.map +1 -0
  162. package/dist/okf/import.js +115 -0
  163. package/dist/okf/import.js.map +1 -0
  164. package/dist/okf/index.d.ts +2 -0
  165. package/dist/okf/index.d.ts.map +1 -0
  166. package/dist/okf/index.js +159 -0
  167. package/dist/okf/index.js.map +1 -0
  168. package/dist/okf/map.d.ts +27 -0
  169. package/dist/okf/map.d.ts.map +1 -0
  170. package/dist/okf/map.js +327 -0
  171. package/dist/okf/map.js.map +1 -0
  172. package/dist/okf/types.d.ts +13 -0
  173. package/dist/okf/types.d.ts.map +1 -0
  174. package/dist/okf/types.js +82 -0
  175. package/dist/okf/types.js.map +1 -0
  176. package/dist/search/coverage.d.ts.map +1 -1
  177. package/dist/search/coverage.js +1 -1
  178. package/dist/search/coverage.js.map +1 -1
  179. package/dist/search/hybrid.d.ts +19 -0
  180. package/dist/search/hybrid.d.ts.map +1 -1
  181. package/dist/search/hybrid.js +60 -15
  182. package/dist/search/hybrid.js.map +1 -1
  183. package/dist/search/reindex.d.ts +4 -0
  184. package/dist/search/reindex.d.ts.map +1 -1
  185. package/dist/search/reindex.js +64 -14
  186. package/dist/search/reindex.js.map +1 -1
  187. package/dist/search/watcher.d.ts +2 -0
  188. package/dist/search/watcher.d.ts.map +1 -1
  189. package/dist/search/watcher.js +29 -27
  190. package/dist/search/watcher.js.map +1 -1
  191. package/dist/serve/index.d.ts +36 -0
  192. package/dist/serve/index.d.ts.map +1 -0
  193. package/dist/serve/index.js +507 -0
  194. package/dist/serve/index.js.map +1 -0
  195. package/dist/server.d.ts +10 -1
  196. package/dist/server.d.ts.map +1 -1
  197. package/dist/server.js +89 -14
  198. package/dist/server.js.map +1 -1
  199. package/dist/sleep/index.d.ts +2 -0
  200. package/dist/sleep/index.d.ts.map +1 -1
  201. package/dist/sleep/index.js +212 -21
  202. package/dist/sleep/index.js.map +1 -1
  203. package/dist/sleep/report.d.ts +3 -0
  204. package/dist/sleep/report.d.ts.map +1 -1
  205. package/dist/sleep/report.js +52 -0
  206. package/dist/sleep/report.js.map +1 -1
  207. package/dist/sleep/tension-scan-state.d.ts +19 -0
  208. package/dist/sleep/tension-scan-state.d.ts.map +1 -0
  209. package/dist/sleep/tension-scan-state.js +0 -0
  210. package/dist/sleep/tension-scan-state.js.map +1 -0
  211. package/dist/sleep/tension-scan.d.ts +44 -0
  212. package/dist/sleep/tension-scan.d.ts.map +1 -0
  213. package/dist/sleep/tension-scan.js +0 -0
  214. package/dist/sleep/tension-scan.js.map +1 -0
  215. package/dist/storage/backend.d.ts +12 -0
  216. package/dist/storage/backend.d.ts.map +1 -0
  217. package/dist/storage/backend.js +231 -0
  218. package/dist/storage/backend.js.map +1 -0
  219. package/dist/storage/backends/fs.d.ts +4 -0
  220. package/dist/storage/backends/fs.d.ts.map +1 -0
  221. package/dist/storage/backends/fs.js +99 -0
  222. package/dist/storage/backends/fs.js.map +1 -0
  223. package/dist/storage/fs-walk.d.ts +5 -0
  224. package/dist/storage/fs-walk.d.ts.map +1 -0
  225. package/dist/storage/fs-walk.js +28 -0
  226. package/dist/storage/fs-walk.js.map +1 -0
  227. package/dist/storage/index-db.d.ts +16 -0
  228. package/dist/storage/index-db.d.ts.map +1 -1
  229. package/dist/storage/index-db.js +95 -5
  230. package/dist/storage/index-db.js.map +1 -1
  231. package/dist/storage/local.d.ts +1 -0
  232. package/dist/storage/local.d.ts.map +1 -1
  233. package/dist/storage/local.js +12 -0
  234. package/dist/storage/local.js.map +1 -1
  235. package/dist/storage/sync.d.ts +25 -0
  236. package/dist/storage/sync.d.ts.map +1 -0
  237. package/dist/storage/sync.js +308 -0
  238. package/dist/storage/sync.js.map +1 -0
  239. package/dist/sync/index.d.ts +2 -0
  240. package/dist/sync/index.d.ts.map +1 -0
  241. package/dist/sync/index.js +136 -0
  242. package/dist/sync/index.js.map +1 -0
  243. package/dist/themes/clustering.d.ts +6 -11
  244. package/dist/themes/clustering.d.ts.map +1 -1
  245. package/dist/themes/clustering.js +76 -84
  246. package/dist/themes/clustering.js.map +1 -1
  247. package/dist/tools/consumes.d.ts +14 -0
  248. package/dist/tools/consumes.d.ts.map +1 -0
  249. package/dist/tools/consumes.js +99 -0
  250. package/dist/tools/consumes.js.map +1 -0
  251. package/dist/tools/curation.d.ts +2 -0
  252. package/dist/tools/curation.d.ts.map +1 -1
  253. package/dist/tools/curation.js +53 -15
  254. package/dist/tools/curation.js.map +1 -1
  255. package/dist/tools/edge-staleness.d.ts +28 -0
  256. package/dist/tools/edge-staleness.d.ts.map +1 -0
  257. package/dist/tools/edge-staleness.js +205 -0
  258. package/dist/tools/edge-staleness.js.map +1 -0
  259. package/dist/tools/edges.d.ts.map +1 -1
  260. package/dist/tools/edges.js +27 -21
  261. package/dist/tools/edges.js.map +1 -1
  262. package/dist/tools/read.d.ts +15 -1
  263. package/dist/tools/read.d.ts.map +1 -1
  264. package/dist/tools/read.js +211 -76
  265. package/dist/tools/read.js.map +1 -1
  266. package/dist/tools/receipt.d.ts.map +1 -1
  267. package/dist/tools/receipt.js +16 -7
  268. package/dist/tools/receipt.js.map +1 -1
  269. package/dist/tools/search.d.ts +1 -0
  270. package/dist/tools/search.d.ts.map +1 -1
  271. package/dist/tools/search.js +147 -5
  272. package/dist/tools/search.js.map +1 -1
  273. package/dist/tools/staged-actions.d.ts +3 -0
  274. package/dist/tools/staged-actions.d.ts.map +1 -1
  275. package/dist/tools/staged-actions.js +225 -22
  276. package/dist/tools/staged-actions.js.map +1 -1
  277. package/dist/tools/themes.d.ts +8 -0
  278. package/dist/tools/themes.d.ts.map +1 -1
  279. package/dist/tools/themes.js +208 -122
  280. package/dist/tools/themes.js.map +1 -1
  281. package/dist/tools/tier1.d.ts +14 -0
  282. package/dist/tools/tier1.d.ts.map +1 -0
  283. package/dist/tools/tier1.js +169 -0
  284. package/dist/tools/tier1.js.map +1 -0
  285. package/dist/tools/tier2.d.ts +27 -0
  286. package/dist/tools/tier2.d.ts.map +1 -0
  287. package/dist/tools/tier2.js +344 -0
  288. package/dist/tools/tier2.js.map +1 -0
  289. package/dist/tools/write.d.ts +9 -1
  290. package/dist/tools/write.d.ts.map +1 -1
  291. package/dist/tools/write.js +596 -174
  292. package/dist/tools/write.js.map +1 -1
  293. package/dist/utils/config.d.ts +52 -0
  294. package/dist/utils/config.d.ts.map +1 -1
  295. package/dist/utils/config.js +394 -24
  296. package/dist/utils/config.js.map +1 -1
  297. package/dist/utils/dates.d.ts +1 -0
  298. package/dist/utils/dates.d.ts.map +1 -1
  299. package/dist/utils/dates.js +5 -0
  300. package/dist/utils/dates.js.map +1 -1
  301. package/dist/utils/run-id.d.ts +3 -0
  302. package/dist/utils/run-id.d.ts.map +1 -0
  303. package/dist/utils/run-id.js +19 -0
  304. package/dist/utils/run-id.js.map +1 -0
  305. package/dist/utils/vault-gitignore.d.ts +1 -1
  306. package/dist/utils/vault-gitignore.d.ts.map +1 -1
  307. package/dist/utils/vault-gitignore.js +4 -1
  308. package/dist/utils/vault-gitignore.js.map +1 -1
  309. package/package.json +21 -1
  310. package/templates/config.yaml +8 -0
@@ -2,6 +2,7 @@ import { type AccessContext } from "../access/rbac.js";
2
2
  import type { CoverageEquitySummary } from "../curation/coverage.js";
3
3
  import { type LintCheckName, type LintFinding, type StagedActionLintItem, type TensionHealth } from "../curation/lint.js";
4
4
  import { type ProvenanceEntry } from "../curation/provenance.js";
5
+ import type { ReviewThroughputSummary } from "../curation/review-throughput.js";
5
6
  import type { ShadowLintSummary } from "../curation/shadow.js";
6
7
  import { type TensionEntry } from "../curation/tension.js";
7
8
  import { type TensionBlastResult } from "../curation/tension-blast.js";
@@ -21,6 +22,7 @@ export interface VaultLintResult {
21
22
  stagedActions: StagedActionLintItem[];
22
23
  shadowActions: ShadowLintSummary;
23
24
  coverageEquity: CoverageEquitySummary;
25
+ reviewThroughput: ReviewThroughputSummary;
24
26
  }
25
27
  export declare function vaultLint(vaultRoot: string, args?: Record<string, unknown>, access?: AccessContext): Promise<Result<VaultLintResult, Error>>;
26
28
  export interface VaultProvenanceResult {
@@ -1 +1 @@
1
- {"version":3,"file":"curation.d.ts","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curation.d.ts","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"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"}
@@ -15,12 +15,12 @@ import { readProvenanceLog } from "../curation/provenance.js";
15
15
  import { sweepExpiredActions } from "../curation/staged-actions.js";
16
16
  import { addTension, LOGGABLE_TENSION_KINDS, listTensions, RESOLUTION_KINDS, resolveTension, } from "../curation/tension.js";
17
17
  import { canSeeTension, sourceReadable, visibleTensions } from "../curation/tension-access.js";
18
- import { computeTensionBlast } from "../curation/tension-blast.js";
18
+ import { bucketHiddenDownstream, computeTensionBlast, } from "../curation/tension-blast.js";
19
19
  import { loadTensionClusters } from "../curation/tension-clusters.js";
20
20
  import { parseDocument } from "../frontmatter/parser.js";
21
21
  import { err, ok } from "../frontmatter/types.js";
22
22
  import { readFile, resolveVaultPath } from "../storage/local.js";
23
- import { openIndexForActiveProvider } from "./search.js";
23
+ import { openIndexForAccessOrNull } from "./search.js";
24
24
  // Curation tools are open to any role with at least one read grant. A guest
25
25
  // (or any role with no read access) is denied.
26
26
  function requireReadAccess(tool, access) {
@@ -32,15 +32,6 @@ function requireReadAccess(tool, access) {
32
32
  }
33
33
  return ok(undefined);
34
34
  }
35
- // Read-only index handle for collection lookups. openIndexForActiveProvider
36
- // ONLY — never ensureIndexReady, which reindexes on an empty index; these
37
- // tools must never reindex. Open failure degrades to null: visibility then
38
- // gates on the pure first-segment rule (fail-closed), and the tool call
39
- // itself never fails for RBAC-lookup reasons.
40
- function openIndexForAccessOrNull(vaultRoot) {
41
- const opened = openIndexForActiveProvider(vaultRoot);
42
- return opened.ok ? opened.value : null;
43
- }
44
35
  // ---------------------------------------------------------------------------
45
36
  // vault_tension_log
46
37
  // ---------------------------------------------------------------------------
@@ -254,7 +245,34 @@ export async function vaultTensionBlast(vaultRoot, args, access) {
254
245
  if (document !== undefined && access && !sourceReadable(db, access, document)) {
255
246
  return err(new Error(`access denied: role '${access.roleName}' cannot blast from '${document}'`));
256
247
  }
257
- return await computeTensionBlast(vaultRoot, { document, cluster_id }, (entries) => visibleTensions(db, entries, access));
248
+ const result = await computeTensionBlast(vaultRoot, { document, cluster_id }, (entries) => visibleTensions(db, entries, access));
249
+ if (!result.ok || !access)
250
+ return result;
251
+ // #217 (B′): the downstream list omits docs the role cannot read; the
252
+ // visible counts and depth are recomputed over what remains, and the
253
+ // hidden remainder surfaces only as a coarsened bucket — an exact delta
254
+ // would disclose linked existence (small-cell class).
255
+ const kept = result.value.downstream.filter((e) => sourceReadable(db, access, e.path));
256
+ const hidden = result.value.downstream.length - kept.length;
257
+ let primary_blast = 0;
258
+ let advisory_blast = 0;
259
+ let max_depth = 0;
260
+ for (const e of kept) {
261
+ if (e.dependency_type === "source")
262
+ primary_blast += 1;
263
+ else
264
+ advisory_blast += 1;
265
+ if (e.distance > max_depth)
266
+ max_depth = e.distance;
267
+ }
268
+ return ok({
269
+ ...result.value,
270
+ downstream: kept,
271
+ primary_blast,
272
+ advisory_blast,
273
+ max_depth,
274
+ hidden_downstream: bucketHiddenDownstream(hidden),
275
+ });
258
276
  }
259
277
  finally {
260
278
  db?.close();
@@ -283,7 +301,17 @@ export async function vaultLint(vaultRoot, args = {}, access) {
283
301
  const swept = await sweepExpiredActions(vaultRoot);
284
302
  if (!swept.ok)
285
303
  return swept;
286
- const report = await runLint(vaultRoot);
304
+ // #217: findings compute from the caller's vantage — runLint drops
305
+ // invisible docs before any check runs (see LintOptions.pathVisible).
306
+ // tensionHealth stays vault-global by design.
307
+ const db = access ? openIndexForAccessOrNull(vaultRoot) : null;
308
+ let report;
309
+ try {
310
+ report = await runLint(vaultRoot, access ? { pathVisible: (p) => sourceReadable(db, access, p) } : {});
311
+ }
312
+ finally {
313
+ db?.close();
314
+ }
287
315
  if (!report.ok)
288
316
  return report;
289
317
  if (filter) {
@@ -297,6 +325,7 @@ export async function vaultLint(vaultRoot, args = {}, access) {
297
325
  stagedActions: report.value.stagedActions,
298
326
  shadowActions: report.value.shadowActions,
299
327
  coverageEquity: report.value.coverageEquity,
328
+ reviewThroughput: report.value.reviewThroughput,
300
329
  });
301
330
  }
302
331
  return ok({
@@ -308,6 +337,7 @@ export async function vaultLint(vaultRoot, args = {}, access) {
308
337
  stagedActions: report.value.stagedActions,
309
338
  shadowActions: report.value.shadowActions,
310
339
  coverageEquity: report.value.coverageEquity,
340
+ reviewThroughput: report.value.reviewThroughput,
311
341
  });
312
342
  }
313
343
  // Returns the write history of a single document, oldest entry first, read
@@ -479,7 +509,11 @@ export const curationTools = [
479
509
  "counts as primary. 'superseded_by' is not a blast edge: the doc that " +
480
510
  "supersedes a contested doc is the replacement, not an inheritor. The " +
481
511
  "response identifies the containing cluster (if any) so the agent sees " +
482
- "the broader region without a second call. Read-only.",
512
+ "the broader region without a second call. Under RBAC the downstream " +
513
+ "list and counts cover only documents the role can read; " +
514
+ "'hidden_downstream' (none | some | many) coarsely signals unreadable " +
515
+ "downstream docs — treat 'some' or 'many' as 'the real blast exceeds " +
516
+ "what you can see' when weighing a resolution. Read-only.",
483
517
  inputSchema: {
484
518
  type: "object",
485
519
  properties: {
@@ -507,9 +541,13 @@ export const curationTools = [
507
541
  "TTL, orphan files with no inbound links, old drafts, stagnant " +
508
542
  "low-confidence files, deprecated files still linked from canonical " +
509
543
  "ones, and questions raised but unanswered anywhere in the vault. " +
544
+ "Under RBAC, findings compute from the caller's vantage: documents in " +
545
+ "unreadable collections are neither named nor counted as linkers. " +
510
546
  "Also reports tension health (counts by kind and resolution kind, " +
511
547
  "stable acknowledged persistent disagreements, and legacy unspecified " +
512
- "entries), lists pending staged actions awaiting ratification, and " +
548
+ "entries) tension-health counts are deliberately VAULT-GLOBAL, not " +
549
+ "RBAC-filtered: counts only, no paths, so vault health reads the same " +
550
+ "for every role. Lists pending staged actions awaiting ratification, and — " +
513
551
  "when the vault has run shadow_mode — summarizes shadow-logged writes " +
514
552
  "with the ones the trust budget would have gated. " +
515
553
  "Never auto-fixes vault content; it does, as housekeeping, expire " +
@@ -1 +1 @@
1
- {"version":3,"file":"curation.js","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"curation.js","sourceRoot":"","sources":["../../src/tools/curation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type AccessContext } from "../access/rbac.js";
2
+ import { type UpstreamStaleness, type UpstreamStalenessSummary } from "../curation/edge-staleness.js";
3
+ import type { HiddenDownstream } from "../curation/tension-blast.js";
4
+ import { type Result } from "../frontmatter/types.js";
5
+ import type { ToolDefinition } from "./read.js";
6
+ export interface ArtifactStalenessResult {
7
+ mode: "artifact";
8
+ artifact: string;
9
+ edges: UpstreamStaleness[];
10
+ hidden_pending: HiddenDownstream;
11
+ summary: UpstreamStalenessSummary;
12
+ }
13
+ export interface BrokenReadToolSlice {
14
+ serves: number;
15
+ broken_serves: number;
16
+ }
17
+ export interface BrokenReadReport {
18
+ mode: "report";
19
+ window_days: number;
20
+ serves: number;
21
+ broken_serves: number;
22
+ broken_read_rate: number | null;
23
+ by_tool: Record<string, BrokenReadToolSlice>;
24
+ uninstrumented: number;
25
+ }
26
+ export declare function vaultStaleness(vaultRoot: string, args: Record<string, unknown>, access?: AccessContext): Promise<Result<ArtifactStalenessResult | BrokenReadReport, Error>>;
27
+ export declare const edgeStalenessTools: ToolDefinition[];
28
+ //# sourceMappingURL=edge-staleness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-staleness.d.ts","sourceRoot":"","sources":["../../src/tools/edge-staleness.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAE9B,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,cAAc,EAAE,gBAAgB,CAAC;IAGjC,OAAO,EAAE,wBAAwB,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IAIpB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAI7C,cAAc,EAAE,MAAM,CAAC;CACxB;AAyHD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,uBAAuB,GAAG,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAuBpE;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAoC9C,CAAC"}
@@ -0,0 +1,205 @@
1
+ // vault_staleness — the query surface over edge staleness (#234).
2
+ //
3
+ // Two modes:
4
+ //
5
+ // { artifact } — the full three-class upstream report for one document:
6
+ // every compiled / declared / earned edge classified against its own
7
+ // baseline (current / pending-compatible / pending-broken /
8
+ // pending-unchecked), by running tier-1 dispatch at query time — the
9
+ // tier-1 layer stores no verdicts, so it can never go stale. Recorded
10
+ // tier-2 SEMANTIC verdicts (#232, the one judgment that must be stored
11
+ // because it cannot be recomputed) refine the pending-unchecked
12
+ // residual, and only while they cover the unit's current change.
13
+ //
14
+ // { days? } — the vault-global broken-read report over the read log: what
15
+ // fraction of served reads (vault_read and vault_search hits) carried at
16
+ // least one pending-broken compiled upstream at serve time. This is the
17
+ // #234 acceptance query — one scan, no joins. Vault-global aggregates
18
+ // stay unfiltered by design (the lint rule); the per-artifact mode is
19
+ // the filtered surface.
20
+ //
21
+ // RBAC (#217, same rule as vault_consumes/vault_tier1): any-read gate; the
22
+ // per-artifact report lists only edges whose upstream unit the caller can
23
+ // read — pending edges to unreadable units are coarsened into a
24
+ // none/some/many bucket, never an exact count. An unreadable anchor yields
25
+ // the empty report, indistinguishable from a nonexistent one.
26
+ import { hasAnyRead } from "../access/rbac.js";
27
+ import { listConsumesEdges } from "../curation/consumes.js";
28
+ import { splitUpstreamVisibility, summarizeUpstream, upstreamStaleness, } from "../curation/edge-staleness.js";
29
+ import { listEdges } from "../curation/edges.js";
30
+ import { readProvenanceLog } from "../curation/provenance.js";
31
+ import { readReadLog } from "../curation/read-log.js";
32
+ import { sourceReadable } from "../curation/tension-access.js";
33
+ import { readTier2Verdicts } from "../curation/tier2.js";
34
+ import { parseDocument } from "../frontmatter/parser.js";
35
+ import { err, ok } from "../frontmatter/types.js";
36
+ import { canonicalVaultRelPath, readFile, resolveVaultPath } from "../storage/local.js";
37
+ import { openIndexForAccessOrNull } from "./search.js";
38
+ async function artifactReport(vaultRoot, artifactRaw, access) {
39
+ const artifact = canonicalVaultRelPath(vaultRoot, artifactRaw);
40
+ if (!artifact.ok)
41
+ return artifact;
42
+ const empty = () => ({
43
+ mode: "artifact",
44
+ artifact: artifact.value,
45
+ edges: [],
46
+ hidden_pending: "none",
47
+ summary: summarizeUpstream([]),
48
+ });
49
+ const db = access ? openIndexForAccessOrNull(vaultRoot) : null;
50
+ try {
51
+ // Unreadable anchor: the empty report, byte-identical to a document with
52
+ // no upstream edges — nothing below is computed, so the response cannot
53
+ // depend on what the hidden document's history looks like.
54
+ if (access && !sourceReadable(db, access, artifact.value))
55
+ return ok(empty());
56
+ const consumes = await listConsumesEdges(vaultRoot);
57
+ if (!consumes.ok)
58
+ return consumes;
59
+ const provenance = await readProvenanceLog(vaultRoot);
60
+ if (!provenance.ok)
61
+ return provenance;
62
+ // Declared units come from the artifact's own frontmatter. A missing or
63
+ // unparsable document simply declares nothing — its compiled/earned
64
+ // history (if any) still reports.
65
+ let declaredUnits = [];
66
+ const resolved = resolveVaultPath(vaultRoot, artifact.value);
67
+ if (resolved.ok) {
68
+ const file = await readFile(resolved.value.absPath);
69
+ if (file.ok) {
70
+ const parsed = parseDocument(file.value);
71
+ if (parsed.ok)
72
+ declaredUnits = parsed.value.frontmatter.sources;
73
+ }
74
+ }
75
+ const earnedEdges = await listEdges(vaultRoot, { fromPath: artifact.value });
76
+ if (!earnedEdges.ok)
77
+ return earnedEdges;
78
+ const earned = earnedEdges.value
79
+ .filter((e) => e.status !== "revoked")
80
+ .map((e) => ({ unit: e.toPath, lastRederived: e.lastRederived }));
81
+ // Tier-2 verdicts refine the pending-unchecked residual (#232): a
82
+ // covered pair reports the judged class instead of re-queueing.
83
+ const verdicts = await readTier2Verdicts(vaultRoot);
84
+ if (!verdicts.ok)
85
+ return verdicts;
86
+ const rows = upstreamStaleness({
87
+ artifact: artifact.value,
88
+ consumes: consumes.value,
89
+ provenance: provenance.value,
90
+ declaredUnits,
91
+ earned,
92
+ verdicts: verdicts.value,
93
+ });
94
+ const { visible, hiddenPending } = access
95
+ ? splitUpstreamVisibility(rows, (unit) => sourceReadable(db, access, unit))
96
+ : { visible: rows, hiddenPending: "none" };
97
+ return ok({
98
+ mode: "artifact",
99
+ artifact: artifact.value,
100
+ edges: visible,
101
+ hidden_pending: hiddenPending,
102
+ summary: summarizeUpstream(visible),
103
+ });
104
+ }
105
+ finally {
106
+ db?.close();
107
+ }
108
+ }
109
+ async function brokenReadReport(vaultRoot, windowDays) {
110
+ const log = await readReadLog(vaultRoot);
111
+ if (!log.ok)
112
+ return log;
113
+ const cutoff = new Date(Date.now() - windowDays * 24 * 60 * 60 * 1000).toISOString();
114
+ let serves = 0;
115
+ let brokenServes = 0;
116
+ let uninstrumented = 0;
117
+ const byTool = {};
118
+ for (const e of log.value) {
119
+ if (e.timestamp < cutoff)
120
+ continue;
121
+ if (e.broken_upstream === undefined) {
122
+ uninstrumented += 1;
123
+ continue;
124
+ }
125
+ serves += 1;
126
+ let slice = byTool[e.tool];
127
+ if (!slice) {
128
+ slice = { serves: 0, broken_serves: 0 };
129
+ byTool[e.tool] = slice;
130
+ }
131
+ slice.serves += 1;
132
+ if (e.broken_upstream > 0) {
133
+ brokenServes += 1;
134
+ slice.broken_serves += 1;
135
+ }
136
+ }
137
+ return ok({
138
+ mode: "report",
139
+ window_days: windowDays,
140
+ serves,
141
+ broken_serves: brokenServes,
142
+ broken_read_rate: serves > 0 ? brokenServes / serves : null,
143
+ by_tool: byTool,
144
+ uninstrumented,
145
+ });
146
+ }
147
+ export async function vaultStaleness(vaultRoot, args, access) {
148
+ if (access && !hasAnyRead(access.role)) {
149
+ return err(new Error(`access denied: role '${access.roleName}' cannot use vault_staleness`));
150
+ }
151
+ if (args.artifact !== undefined && args.artifact !== null) {
152
+ if (typeof args.artifact !== "string" || args.artifact.trim().length === 0) {
153
+ return err(new Error("vault_staleness 'artifact' must be a non-empty string"));
154
+ }
155
+ if (args.days !== undefined && args.days !== null) {
156
+ return err(new Error("vault_staleness takes 'days' only without 'artifact'"));
157
+ }
158
+ return artifactReport(vaultRoot, args.artifact, access);
159
+ }
160
+ let days = 30;
161
+ if (args.days !== undefined && args.days !== null) {
162
+ if (typeof args.days !== "number" || !Number.isFinite(args.days) || args.days <= 0) {
163
+ return err(new Error("vault_staleness 'days' must be a positive number"));
164
+ }
165
+ days = args.days;
166
+ }
167
+ return brokenReadReport(vaultRoot, days);
168
+ }
169
+ export const edgeStalenessTools = [
170
+ {
171
+ name: "vault_staleness",
172
+ title: "Edge staleness — pending upstream changes and the broken-read rate",
173
+ annotations: { readOnlyHint: true },
174
+ description: "Edge staleness (#234): is a document stale WITH RESPECT TO its " +
175
+ "upstream inputs, and does it matter? Pass 'artifact' for the " +
176
+ "per-document report: every compiled/declared/earned upstream edge " +
177
+ "classified by running tier-1 dispatch (#232) against the change " +
178
+ "since that edge's baseline — current, pending-compatible (change " +
179
+ "certifiably misses), pending-broken (compiled input changed; the " +
180
+ "document serves pre-change context — the only incident class), or " +
181
+ "pending-unchecked (structure cannot decide; the tier-2 residual). " +
182
+ "Without 'artifact': the vault-global broken-read report over the " +
183
+ "read log — what fraction of served reads (vault_read + search hits, " +
184
+ "last 'days' days, default 30) carried at least one pending-broken " +
185
+ "upstream at serve time. Distinct from TTL decay (doc age) and audit " +
186
+ "staleness (link mtime ordering): this is per-edge compatibility, " +
187
+ "advisory, derived at query time.",
188
+ inputSchema: {
189
+ type: "object",
190
+ properties: {
191
+ artifact: {
192
+ type: "string",
193
+ description: "Vault-relative path — report this document's upstream staleness",
194
+ },
195
+ days: {
196
+ type: "number",
197
+ description: "Report window in days for the vault-global broken-read rate (default 30)",
198
+ },
199
+ },
200
+ additionalProperties: false,
201
+ },
202
+ handler: (vaultRoot, args, access) => vaultStaleness(vaultRoot, args, access),
203
+ },
204
+ ];
205
+ //# sourceMappingURL=edge-staleness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-staleness.js","sourceRoot":"","sources":["../../src/tools/edge-staleness.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,aAAa;AACb,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,gEAAgE;AAChE,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,oEAAoE;AACpE,qEAAqE;AACrE,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,0EAA0E;AAC1E,4BAA4B;AAC5B,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,gEAAgE;AAChE,2EAA2E;AAC3E,8DAA8D;AAE9D,OAAO,EAAsB,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EAGjB,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAiCvD,KAAK,UAAU,cAAc,CAC3B,SAAiB,EACjB,WAAmB,EACnB,MAAsB;IAEtB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAElC,MAAM,KAAK,GAAG,GAA4B,EAAE,CAAC,CAAC;QAC5C,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,QAAQ,CAAC,KAAK;QACxB,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,MAAM;QACtB,OAAO,EAAE,iBAAiB,CAAC,EAAE,CAAC;KAC/B,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,IAAI,CAAC;QACH,yEAAyE;QACzE,wEAAwE;QACxE,2DAA2D;QAC3D,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAE9E,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO,UAAU,CAAC;QAEtC,wEAAwE;QACxE,oEAAoE;QACpE,kCAAkC;QAClC,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzC,IAAI,MAAM,CAAC,EAAE;oBAAE,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;YAClE,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7E,IAAI,CAAC,WAAW,CAAC,EAAE;YAAE,OAAO,WAAW,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAEpE,kEAAkE;QAClE,gEAAgE;QAChE,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,QAAQ,CAAC;QAElC,MAAM,IAAI,GAAG,iBAAiB,CAAC;YAC7B,QAAQ,EAAE,QAAQ,CAAC,KAAK;YACxB,QAAQ,EAAE,QAAQ,CAAC,KAAK;YACxB,UAAU,EAAE,UAAU,CAAC,KAAK;YAC5B,aAAa;YACb,MAAM;YACN,QAAQ,EAAE,QAAQ,CAAC,KAAK;SACzB,CAAC,CAAC;QAEH,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM;YACvC,CAAC,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YAC3E,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAe,EAAE,CAAC;QAEtD,OAAO,EAAE,CAAC;YACR,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,QAAQ,CAAC,KAAK;YACxB,KAAK,EAAE,OAAO;YACd,cAAc,EAAE,aAAa;YAC7B,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,EAAE,EAAE,KAAK,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,SAAiB,EACjB,UAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;IAExB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACrF,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,MAAM,GAAwC,EAAE,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM;YAAE,SAAS;QACnC,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACpC,cAAc,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YAC1B,YAAY,IAAI,CAAC,CAAC;YAClB,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,UAAU;QACvB,MAAM;QACN,aAAa,EAAE,YAAY;QAC3B,gBAAgB,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI;QAC3D,OAAO,EAAE,MAAM;QACf,cAAc;KACf,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,IAA6B,EAC7B,MAAsB;IAEtB,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,QAAQ,8BAA8B,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC1D,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAClD,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAClD,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;YACnF,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAClD;QACE,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,oEAAoE;QAC3E,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;QACnC,WAAW,EACT,iEAAiE;YACjE,+DAA+D;YAC/D,oEAAoE;YACpE,kEAAkE;YAClE,mEAAmE;YACnE,mEAAmE;YACnE,oEAAoE;YACpE,oEAAoE;YACpE,mEAAmE;YACnE,sEAAsE;YACtE,oEAAoE;YACpE,sEAAsE;YACtE,mEAAmE;YACnE,kCAAkC;QACpC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iEAAiE;iBAC/E;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0EAA0E;iBACxF;aACF;YACD,oBAAoB,EAAE,KAAK;SAC5B;QACD,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC;KAC9E;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/tools/edges.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,KAAK,aAAa,EAAyB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAEL,KAAK,eAAe,EAQrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAsDhD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CA2DzC;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAkFvC;AAMD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CA+BrC;AAMD,eAAO,MAAM,SAAS,EAAE,cAAc,EAoHrC,CAAC"}
1
+ {"version":3,"file":"edges.d.ts","sourceRoot":"","sources":["../../src/tools/edges.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,aAAa,EAAyB,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAEL,KAAK,eAAe,EAQrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA2ChD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CA2DzC;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAkFvC;AAMD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAiDrC;AAMD,eAAO,MAAM,SAAS,EAAE,cAAc,EAqHrC,CAAC"}
@@ -17,24 +17,13 @@
17
17
  // posture (matching vault_tension_log / vault_stage_action). Contest gates on
18
18
  // the `ratify` grant (§11.6) — it revokes trigger-bearing edges, the same
19
19
  // curation-verdict tier as vault_ratify.
20
- import { relative, resolve } from "node:path";
21
20
  import { canRatify, hasAnyRead } from "../access/rbac.js";
22
21
  import { contestEdge, EDGE_AXES, EDGE_STATUSES, getEdge, listEdges, observeEdge, } from "../curation/edges.js";
23
22
  import { addTension, listTensions } from "../curation/tension.js";
23
+ import { sourceReadable } from "../curation/tension-access.js";
24
24
  import { err, ok } from "../frontmatter/types.js";
25
- import { readFile, resolveVaultPath } from "../storage/local.js";
26
- // Canonical vault-relative form of a caller-supplied path: trimmed, resolved
27
- // against the vault root (rejecting traversal out of it), re-relativized. The
28
- // edge store keys edges by raw string, so `./a.md`, `b/../a.md`, and `a.md`
29
- // must all collapse to one key here — otherwise aliased inputs would split an
30
- // edge's votes across phantom twins and slip past the self-edge guard (the
31
- // same aliasing class vault_merge guards against).
32
- function canonicalRelPath(vaultRoot, relPath) {
33
- const resolved = resolveVaultPath(vaultRoot, relPath.trim());
34
- if (!resolved.ok)
35
- return resolved;
36
- return ok(relative(resolve(vaultRoot), resolved.value.absPath));
37
- }
25
+ import { canonicalVaultRelPath, readFile, resolveVaultPath } from "../storage/local.js";
26
+ import { openIndexForAccessOrNull } from "./search.js";
38
27
  function requireReadAccess(tool, access) {
39
28
  if (access && !hasAnyRead(access.role)) {
40
29
  return err(new Error(`access denied: role '${access.roleName}' cannot use ${tool}`));
@@ -97,10 +86,10 @@ export async function vaultEdgeObserve(vaultRoot, args, access) {
97
86
  if (trimmed.length > 0)
98
87
  note = trimmed;
99
88
  }
100
- const canonFrom = canonicalRelPath(vaultRoot, fromPath.value);
89
+ const canonFrom = canonicalVaultRelPath(vaultRoot, fromPath.value);
101
90
  if (!canonFrom.ok)
102
91
  return canonFrom;
103
- const canonTo = canonicalRelPath(vaultRoot, toPath.value);
92
+ const canonTo = canonicalVaultRelPath(vaultRoot, toPath.value);
104
93
  if (!canonTo.ok)
105
94
  return canonTo;
106
95
  // Self-edge check on the CANONICAL paths, so `a.md` vs `b/../a.md` cannot
@@ -146,10 +135,10 @@ export async function vaultEdgeContest(vaultRoot, args, access) {
146
135
  // Canonicalize like observe does, so a contest addresses the same key the
147
136
  // observation wrote. No doc-existence check here — an edge whose endpoint
148
137
  // doc was since deleted is still contestable.
149
- const canonFrom = canonicalRelPath(vaultRoot, fromPath.value);
138
+ const canonFrom = canonicalVaultRelPath(vaultRoot, fromPath.value);
150
139
  if (!canonFrom.ok)
151
140
  return canonFrom;
152
- const canonTo = canonicalRelPath(vaultRoot, toPath.value);
141
+ const canonTo = canonicalVaultRelPath(vaultRoot, toPath.value);
153
142
  if (!canonTo.ok)
154
143
  return canonTo;
155
144
  // Validate the edge is contestable BEFORE writing the tension, so a contest
@@ -217,7 +206,7 @@ export async function vaultEdges(vaultRoot, args, access) {
217
206
  if (typeof v !== "string" || v.trim().length === 0) {
218
207
  return err(new Error(`vault_edges '${argName}' must be a non-empty string`));
219
208
  }
220
- const canon = canonicalRelPath(vaultRoot, v);
209
+ const canon = canonicalVaultRelPath(vaultRoot, v);
221
210
  if (!canon.ok)
222
211
  return canon;
223
212
  filter[key] = canon.value;
@@ -232,7 +221,23 @@ export async function vaultEdges(vaultRoot, args, access) {
232
221
  const edges = await listEdges(vaultRoot, filter);
233
222
  if (!edges.ok)
234
223
  return edges;
235
- return ok({ edges: edges.value, total: edges.value.length });
224
+ // #217: an edge names two documents; seeing it reveals both. With an
225
+ // access context an edge is listed only when the role can read BOTH
226
+ // endpoints' collections — invisible edges are omitted entirely (also from
227
+ // `total`), never redacted, matching the tension both-sides rule. A filter
228
+ // on an unreadable from_path/to_path simply returns an empty listing, the
229
+ // same as a nonexistent path — no existence confirmation either way.
230
+ let listed = edges.value;
231
+ if (access) {
232
+ const db = openIndexForAccessOrNull(vaultRoot);
233
+ try {
234
+ listed = edges.value.filter((e) => sourceReadable(db, access, e.fromPath) && sourceReadable(db, access, e.toPath));
235
+ }
236
+ finally {
237
+ db?.close();
238
+ }
239
+ }
240
+ return ok({ edges: listed, total: listed.length });
236
241
  }
237
242
  // ---------------------------------------------------------------------------
238
243
  // MCP tool definitions
@@ -325,7 +330,8 @@ export const edgeTools = [
325
330
  "first. Strength = independent-vote count decayed by time since the " +
326
331
  "last qualifying re-derivation; an edge is trigger-bearing while its " +
327
332
  "aged strength stays above the floor. Filter by endpoint or status " +
328
- "(candidate | trigger-bearing | revoked).",
333
+ "(candidate | trigger-bearing | revoked). Under RBAC only edges whose " +
334
+ "BOTH endpoints are in readable collections are listed and counted.",
329
335
  inputSchema: {
330
336
  type: "object",
331
337
  properties: {