wicked-crew 0.16.11 → 0.16.13

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 (341) hide show
  1. package/README.md +28 -8
  2. package/dist/api/artifact-outline.d.ts +64 -0
  3. package/dist/api/artifact-outline.d.ts.map +1 -0
  4. package/dist/api/artifact-outline.js +254 -0
  5. package/dist/api/artifact-outline.js.map +1 -0
  6. package/dist/api/beneath.d.ts +76 -0
  7. package/dist/api/beneath.d.ts.map +1 -0
  8. package/dist/api/beneath.js +214 -0
  9. package/dist/api/beneath.js.map +1 -0
  10. package/dist/api/capture.d.ts +2 -2
  11. package/dist/api/chat-citations.d.ts +25 -1
  12. package/dist/api/chat-citations.d.ts.map +1 -1
  13. package/dist/api/chat-citations.js +186 -61
  14. package/dist/api/chat-citations.js.map +1 -1
  15. package/dist/api/chat-context.d.ts +236 -0
  16. package/dist/api/chat-context.d.ts.map +1 -0
  17. package/dist/api/chat-context.js +808 -0
  18. package/dist/api/chat-context.js.map +1 -0
  19. package/dist/api/chat-history.d.ts +20 -0
  20. package/dist/api/chat-history.d.ts.map +1 -1
  21. package/dist/api/chat-history.js +46 -1
  22. package/dist/api/chat-history.js.map +1 -1
  23. package/dist/api/chat-proposals.d.ts +534 -0
  24. package/dist/api/chat-proposals.d.ts.map +1 -0
  25. package/dist/api/chat-proposals.js +1562 -0
  26. package/dist/api/chat-proposals.js.map +1 -0
  27. package/dist/api/chat-scope.d.ts +41 -0
  28. package/dist/api/chat-scope.d.ts.map +1 -1
  29. package/dist/api/chat-scope.js +87 -15
  30. package/dist/api/chat-scope.js.map +1 -1
  31. package/dist/api/chat-transcripts.d.ts +27 -2
  32. package/dist/api/chat-transcripts.d.ts.map +1 -1
  33. package/dist/api/chat-transcripts.js +105 -4
  34. package/dist/api/chat-transcripts.js.map +1 -1
  35. package/dist/api/diagnostics.d.ts +15 -0
  36. package/dist/api/diagnostics.d.ts.map +1 -1
  37. package/dist/api/diagnostics.js +56 -0
  38. package/dist/api/diagnostics.js.map +1 -1
  39. package/dist/api/elicitation-cache.d.ts +13 -0
  40. package/dist/api/elicitation-cache.d.ts.map +1 -1
  41. package/dist/api/elicitation-cache.js +12 -0
  42. package/dist/api/elicitation-cache.js.map +1 -1
  43. package/dist/api/eval-sample.d.ts +12 -12
  44. package/dist/api/frame-guard.d.ts +62 -0
  45. package/dist/api/frame-guard.d.ts.map +1 -0
  46. package/dist/api/frame-guard.js +97 -0
  47. package/dist/api/frame-guard.js.map +1 -0
  48. package/dist/api/governance-steering.d.ts +4 -4
  49. package/dist/api/multiscope.d.ts +3 -0
  50. package/dist/api/multiscope.d.ts.map +1 -1
  51. package/dist/api/multiscope.js +13 -0
  52. package/dist/api/multiscope.js.map +1 -1
  53. package/dist/api/needs.d.ts +6 -0
  54. package/dist/api/needs.d.ts.map +1 -1
  55. package/dist/api/needs.js +31 -4
  56. package/dist/api/needs.js.map +1 -1
  57. package/dist/api/product.d.ts.map +1 -1
  58. package/dist/api/product.js +13 -2
  59. package/dist/api/product.js.map +1 -1
  60. package/dist/api/project-aggregates.d.ts +6 -6
  61. package/dist/api/project-aggregates.d.ts.map +1 -1
  62. package/dist/api/project-aggregates.js +16 -24
  63. package/dist/api/project-aggregates.js.map +1 -1
  64. package/dist/api/requirements.d.ts +261 -6
  65. package/dist/api/requirements.d.ts.map +1 -1
  66. package/dist/api/requirements.js +344 -64
  67. package/dist/api/requirements.js.map +1 -1
  68. package/dist/api/routes.d.ts +156 -4
  69. package/dist/api/routes.d.ts.map +1 -1
  70. package/dist/api/routes.js +851 -78
  71. package/dist/api/routes.js.map +1 -1
  72. package/dist/api/run-brief.d.ts +78 -0
  73. package/dist/api/run-brief.d.ts.map +1 -0
  74. package/dist/api/run-brief.js +318 -0
  75. package/dist/api/run-brief.js.map +1 -0
  76. package/dist/api/run-files.d.ts.map +1 -1
  77. package/dist/api/run-files.js +5 -1
  78. package/dist/api/run-files.js.map +1 -1
  79. package/dist/api/run-timing-index.d.ts +27 -0
  80. package/dist/api/run-timing-index.d.ts.map +1 -1
  81. package/dist/api/run-timing-index.js +65 -0
  82. package/dist/api/run-timing-index.js.map +1 -1
  83. package/dist/api/seat-images.d.ts +102 -0
  84. package/dist/api/seat-images.d.ts.map +1 -0
  85. package/dist/api/seat-images.js +333 -0
  86. package/dist/api/seat-images.js.map +1 -0
  87. package/dist/api/server.d.ts +3 -0
  88. package/dist/api/server.d.ts.map +1 -1
  89. package/dist/api/server.js +265 -2
  90. package/dist/api/server.js.map +1 -1
  91. package/dist/api/steering-landing.d.ts +48 -1
  92. package/dist/api/steering-landing.d.ts.map +1 -1
  93. package/dist/api/steering-landing.js +116 -42
  94. package/dist/api/steering-landing.js.map +1 -1
  95. package/dist/api/system-snapshot.d.ts +51 -2
  96. package/dist/api/system-snapshot.d.ts.map +1 -1
  97. package/dist/api/system-snapshot.js +151 -15
  98. package/dist/api/system-snapshot.js.map +1 -1
  99. package/dist/api/testing.d.ts +4 -4
  100. package/dist/api/testing.js +2 -2
  101. package/dist/api/testing.js.map +1 -1
  102. package/dist/apps/spec.d.ts +3009 -0
  103. package/dist/apps/spec.d.ts.map +1 -0
  104. package/dist/apps/spec.js +870 -0
  105. package/dist/apps/spec.js.map +1 -0
  106. package/dist/campaigns/routes.js +1 -1
  107. package/dist/campaigns/routes.js.map +1 -1
  108. package/dist/cli/index.js +3 -3
  109. package/dist/cli/index.js.map +1 -1
  110. package/dist/core/adapter.d.ts +12 -0
  111. package/dist/core/adapter.d.ts.map +1 -1
  112. package/dist/core/adapter.js +36 -1
  113. package/dist/core/adapter.js.map +1 -1
  114. package/dist/core/deliver-text.d.ts.map +1 -1
  115. package/dist/core/deliver-text.js +22 -10
  116. package/dist/core/deliver-text.js.map +1 -1
  117. package/dist/core/estate-mcp-client.d.ts +7 -1
  118. package/dist/core/estate-mcp-client.d.ts.map +1 -1
  119. package/dist/core/estate-mcp-client.js +10 -2
  120. package/dist/core/estate-mcp-client.js.map +1 -1
  121. package/dist/core/exec.d.ts +12 -0
  122. package/dist/core/exec.d.ts.map +1 -1
  123. package/dist/core/exec.js +23 -0
  124. package/dist/core/exec.js.map +1 -1
  125. package/dist/core/reassign-refusal.d.ts.map +1 -1
  126. package/dist/core/reassign-refusal.js +23 -3
  127. package/dist/core/reassign-refusal.js.map +1 -1
  128. package/dist/core/repoPaths.d.ts +32 -7
  129. package/dist/core/repoPaths.d.ts.map +1 -1
  130. package/dist/core/repoPaths.js +56 -9
  131. package/dist/core/repoPaths.js.map +1 -1
  132. package/dist/core/requirements-graph-setting.d.ts +32 -0
  133. package/dist/core/requirements-graph-setting.d.ts.map +1 -0
  134. package/dist/core/requirements-graph-setting.js +84 -0
  135. package/dist/core/requirements-graph-setting.js.map +1 -0
  136. package/dist/core/run-boot-resume.d.ts +4 -1
  137. package/dist/core/run-boot-resume.d.ts.map +1 -1
  138. package/dist/core/run-boot-resume.js +6 -1
  139. package/dist/core/run-boot-resume.js.map +1 -1
  140. package/dist/core/run-identity.d.ts.map +1 -1
  141. package/dist/core/run-identity.js +6 -0
  142. package/dist/core/run-identity.js.map +1 -1
  143. package/dist/core/types.d.ts +14 -0
  144. package/dist/core/types.d.ts.map +1 -1
  145. package/dist/core/types.js.map +1 -1
  146. package/dist/decisions/chat-recorder.d.ts +14 -3
  147. package/dist/decisions/chat-recorder.d.ts.map +1 -1
  148. package/dist/decisions/chat-recorder.js +54 -9
  149. package/dist/decisions/chat-recorder.js.map +1 -1
  150. package/dist/editors/csp.d.ts +24 -4
  151. package/dist/editors/csp.d.ts.map +1 -1
  152. package/dist/editors/csp.js +35 -8
  153. package/dist/editors/csp.js.map +1 -1
  154. package/dist/editors/registry.d.ts +46 -21
  155. package/dist/editors/registry.d.ts.map +1 -1
  156. package/dist/editors/registry.js +13 -2
  157. package/dist/editors/registry.js.map +1 -1
  158. package/dist/editors/routes.d.ts +4 -1
  159. package/dist/editors/routes.d.ts.map +1 -1
  160. package/dist/editors/routes.js +30 -3
  161. package/dist/editors/routes.js.map +1 -1
  162. package/dist/editors/visuals.d.ts +51 -0
  163. package/dist/editors/visuals.d.ts.map +1 -0
  164. package/dist/editors/visuals.js +164 -0
  165. package/dist/editors/visuals.js.map +1 -0
  166. package/dist/editors/webrtc-guard.d.ts +94 -0
  167. package/dist/editors/webrtc-guard.d.ts.map +1 -0
  168. package/dist/editors/webrtc-guard.js +506 -0
  169. package/dist/editors/webrtc-guard.js.map +1 -0
  170. package/dist/inspect/reading.d.ts +110 -0
  171. package/dist/inspect/reading.d.ts.map +1 -0
  172. package/dist/inspect/reading.js +325 -0
  173. package/dist/inspect/reading.js.map +1 -0
  174. package/dist/inspect/routes.d.ts +14 -0
  175. package/dist/inspect/routes.d.ts.map +1 -0
  176. package/dist/inspect/routes.js +44 -0
  177. package/dist/inspect/routes.js.map +1 -0
  178. package/dist/inspect/service.d.ts +161 -0
  179. package/dist/inspect/service.d.ts.map +1 -0
  180. package/dist/inspect/service.js +466 -0
  181. package/dist/inspect/service.js.map +1 -0
  182. package/dist/interactive/bridge-pool.d.ts +11 -2
  183. package/dist/interactive/bridge-pool.d.ts.map +1 -1
  184. package/dist/interactive/bridge-pool.js +10 -1
  185. package/dist/interactive/bridge-pool.js.map +1 -1
  186. package/dist/interactive/doc-binding.d.ts +156 -0
  187. package/dist/interactive/doc-binding.d.ts.map +1 -0
  188. package/dist/interactive/doc-binding.js +277 -0
  189. package/dist/interactive/doc-binding.js.map +1 -0
  190. package/dist/interactive/doc-delete-routes.d.ts +3 -0
  191. package/dist/interactive/doc-delete-routes.d.ts.map +1 -1
  192. package/dist/interactive/doc-delete-routes.js +4 -0
  193. package/dist/interactive/doc-delete-routes.js.map +1 -1
  194. package/dist/interactive/draft-events.d.ts +89 -3
  195. package/dist/interactive/draft-events.d.ts.map +1 -1
  196. package/dist/interactive/draft-events.js +441 -30
  197. package/dist/interactive/draft-events.js.map +1 -1
  198. package/dist/interactive/draft-skill.d.ts +7 -0
  199. package/dist/interactive/draft-skill.d.ts.map +1 -1
  200. package/dist/interactive/draft-skill.js +10 -3
  201. package/dist/interactive/draft-skill.js.map +1 -1
  202. package/dist/interactive/edit-events.d.ts +2 -0
  203. package/dist/interactive/edit-events.d.ts.map +1 -1
  204. package/dist/interactive/edit-events.js +11 -0
  205. package/dist/interactive/edit-events.js.map +1 -1
  206. package/dist/interactive/proposal-create.d.ts +143 -0
  207. package/dist/interactive/proposal-create.d.ts.map +1 -0
  208. package/dist/interactive/proposal-create.js +318 -0
  209. package/dist/interactive/proposal-create.js.map +1 -0
  210. package/dist/interactive/proxy-routes.d.ts +60 -3
  211. package/dist/interactive/proxy-routes.d.ts.map +1 -1
  212. package/dist/interactive/proxy-routes.js +217 -3
  213. package/dist/interactive/proxy-routes.js.map +1 -1
  214. package/dist/interactive/source-packet.d.ts +126 -0
  215. package/dist/interactive/source-packet.d.ts.map +1 -0
  216. package/dist/interactive/source-packet.js +482 -0
  217. package/dist/interactive/source-packet.js.map +1 -0
  218. package/dist/learnings/estate.d.ts +16 -0
  219. package/dist/learnings/estate.d.ts.map +1 -0
  220. package/dist/learnings/estate.js +68 -0
  221. package/dist/learnings/estate.js.map +1 -0
  222. package/dist/learnings/extract.d.ts +56 -0
  223. package/dist/learnings/extract.d.ts.map +1 -0
  224. package/dist/learnings/extract.js +252 -0
  225. package/dist/learnings/extract.js.map +1 -0
  226. package/dist/learnings/recall.d.ts +43 -0
  227. package/dist/learnings/recall.d.ts.map +1 -0
  228. package/dist/learnings/recall.js +104 -0
  229. package/dist/learnings/recall.js.map +1 -0
  230. package/dist/learnings/service.d.ts +183 -0
  231. package/dist/learnings/service.d.ts.map +1 -0
  232. package/dist/learnings/service.js +571 -0
  233. package/dist/learnings/service.js.map +1 -0
  234. package/dist/mcp/ask-server.d.ts.map +1 -1
  235. package/dist/mcp/ask-server.js +37 -4
  236. package/dist/mcp/ask-server.js.map +1 -1
  237. package/dist/mcp/broker.d.ts +12 -1
  238. package/dist/mcp/broker.d.ts.map +1 -1
  239. package/dist/mcp/broker.js +24 -5
  240. package/dist/mcp/broker.js.map +1 -1
  241. package/dist/mcp/invoke.d.ts +26 -2
  242. package/dist/mcp/invoke.d.ts.map +1 -1
  243. package/dist/mcp/invoke.js +51 -5
  244. package/dist/mcp/invoke.js.map +1 -1
  245. package/dist/persona/routes.d.ts +92 -0
  246. package/dist/persona/routes.d.ts.map +1 -0
  247. package/dist/persona/routes.js +69 -0
  248. package/dist/persona/routes.js.map +1 -0
  249. package/dist/persona/store.d.ts +104 -0
  250. package/dist/persona/store.d.ts.map +1 -0
  251. package/dist/persona/store.js +176 -0
  252. package/dist/persona/store.js.map +1 -0
  253. package/dist/persona/voice.d.ts +4 -0
  254. package/dist/persona/voice.d.ts.map +1 -0
  255. package/dist/persona/voice.js +58 -0
  256. package/dist/persona/voice.js.map +1 -0
  257. package/dist/projects/routes.d.ts +2 -2
  258. package/dist/setup/known.d.ts +56 -0
  259. package/dist/setup/known.d.ts.map +1 -0
  260. package/dist/setup/known.js +159 -0
  261. package/dist/setup/known.js.map +1 -0
  262. package/dist/setup/routes.d.ts +13 -0
  263. package/dist/setup/routes.d.ts.map +1 -0
  264. package/dist/setup/routes.js +20 -0
  265. package/dist/setup/routes.js.map +1 -0
  266. package/dist/standing-orders/history.d.ts +2 -0
  267. package/dist/standing-orders/history.d.ts.map +1 -1
  268. package/dist/standing-orders/history.js +1 -0
  269. package/dist/standing-orders/history.js.map +1 -1
  270. package/dist/studio/assets/WickedSans-Regular-fb698rcD.woff2 +0 -0
  271. package/dist/studio/assets/WickedSans-SemiBold-CD53n1AC.woff2 +0 -0
  272. package/dist/studio/assets/WickedScript-Regular-CY5juO6I.woff2 +0 -0
  273. package/dist/studio/assets/WickedSerif-Regular-mdPEjaVZ.woff2 +0 -0
  274. package/dist/studio/assets/index-BUZ_-Syk.css +32 -0
  275. package/dist/studio/assets/index-u4O_7N-b.js +986 -0
  276. package/dist/studio/editors/wicked-deck/editor.json +6 -1
  277. package/dist/studio/editors/wicked-deck/icon.svg +1 -0
  278. package/dist/studio/editors/wicked-deck/index.html +1 -1
  279. package/dist/studio/editors/wicked-doc/editor.json +6 -1
  280. package/dist/studio/editors/wicked-doc/icon.svg +1 -0
  281. package/dist/studio/editors/wicked-doc/index.html +1 -1
  282. package/dist/studio/editors/wicked-insights/editor.json +6 -1
  283. package/dist/studio/editors/wicked-insights/icon.svg +1 -0
  284. package/dist/studio/editors/wicked-insights/index.html +1 -1
  285. package/dist/studio/editors/wicked-page/editor.json +6 -1
  286. package/dist/studio/editors/wicked-page/icon.svg +1 -0
  287. package/dist/studio/editors/wicked-page/index.html +1 -1
  288. package/dist/studio/editors/wicked-video/editor.json +6 -1
  289. package/dist/studio/editors/wicked-video/icon.svg +1 -0
  290. package/dist/studio/editors/wicked-video/index.html +1 -1
  291. package/dist/studio/index.html +2 -2
  292. package/dist/studio/testid-inventory.json +5155 -2707
  293. package/dist/voice/dashboard.d.ts +376 -0
  294. package/dist/voice/dashboard.d.ts.map +1 -0
  295. package/dist/voice/dashboard.js +92 -0
  296. package/dist/voice/dashboard.js.map +1 -0
  297. package/dist/voice/inject-input.d.ts +51 -0
  298. package/dist/voice/inject-input.d.ts.map +1 -0
  299. package/dist/voice/inject-input.js +126 -0
  300. package/dist/voice/inject-input.js.map +1 -0
  301. package/dist/voice/routes.d.ts +41 -0
  302. package/dist/voice/routes.d.ts.map +1 -0
  303. package/dist/voice/routes.js +116 -0
  304. package/dist/voice/routes.js.map +1 -0
  305. package/dist/voice/service.d.ts +177 -0
  306. package/dist/voice/service.d.ts.map +1 -0
  307. package/dist/voice/service.js +400 -0
  308. package/dist/voice/service.js.map +1 -0
  309. package/dist/workflow-catalog/build.d.ts +35 -0
  310. package/dist/workflow-catalog/build.d.ts.map +1 -0
  311. package/dist/workflow-catalog/build.js +229 -0
  312. package/dist/workflow-catalog/build.js.map +1 -0
  313. package/dist/workflow-catalog/catalog-data.d.ts +36 -0
  314. package/dist/workflow-catalog/catalog-data.d.ts.map +1 -0
  315. package/dist/workflow-catalog/catalog-data.js +430 -0
  316. package/dist/workflow-catalog/catalog-data.js.map +1 -0
  317. package/dist/working-doc/event-lines.d.ts +76 -0
  318. package/dist/working-doc/event-lines.d.ts.map +1 -0
  319. package/dist/working-doc/event-lines.js +247 -0
  320. package/dist/working-doc/event-lines.js.map +1 -0
  321. package/dist/working-doc/routes.d.ts +1 -1
  322. package/dist/working-doc/routes.d.ts.map +1 -1
  323. package/dist/working-doc/routes.js +2 -1
  324. package/dist/working-doc/routes.js.map +1 -1
  325. package/dist/working-doc/sections.d.ts +3 -1
  326. package/dist/working-doc/sections.d.ts.map +1 -1
  327. package/dist/working-doc/sections.js +4 -2
  328. package/dist/working-doc/sections.js.map +1 -1
  329. package/dist/working-doc/service.d.ts +66 -1
  330. package/dist/working-doc/service.d.ts.map +1 -1
  331. package/dist/working-doc/service.js +298 -22
  332. package/dist/working-doc/service.js.map +1 -1
  333. package/dist/working-doc/store.d.ts +8 -2
  334. package/dist/working-doc/store.d.ts.map +1 -1
  335. package/dist/working-doc/store.js.map +1 -1
  336. package/endpoint-manifest.json +205 -2
  337. package/package.json +5 -4
  338. package/workflows/distill-learnings.json +27 -0
  339. package/workflows/inspect-unit.json +27 -0
  340. package/dist/studio/assets/index-B-f_VEL2.css +0 -32
  341. package/dist/studio/assets/index-DhkxIK-0.js +0 -845
@@ -1,53 +1,229 @@
1
1
  /**
2
- * REQUIREMENTS SERVICE — server-side search + operator overrides over the evidence-gated
3
- * `requirements_graph.json` artifact.
2
+ * REQUIREMENTS SERVICE — server-side search + operator overrides over a repository's requirements
3
+ * graph, read from the repository's ESTATE store (operator ruling 2026-10-31: the graph is saved to
4
+ * estate, never a JSON file in the repo). `wicked-core domain-graph` saves it there
5
+ * (`persist_domain_model`); the engine reads it back READ-ONLY through core-ts
6
+ * (`getRequirementsGraphForRepo`, the same one-library path as `getCoverageReportForRepo`), with
7
+ * the coverage label recomputed from the store's own counts at read time.
4
8
  *
5
- * ONE source (crew#548, F-RC1-041 — FIX-IT-ALL L10-3): until 0.7.35 this module ALSO opened the
6
- * repo's code-graph store through a second SQLite library (`node:sqlite`, read-only, per request)
7
- * and served the live `nodes.requirement` rows first, falling back to the artifact. The engine
8
- * holds the same file open in-process through its own rusqlite (`getCoverageReportForRepo`), and
9
- * a second library on one SQLite file in one process is the F-E2E-021 class that corrupted the
10
- * bus db (one library per db file per process — crew#541). The store path is DELETED: the
11
- * artifact `wicked-core domain-graph` regenerates when its coverage bar passes is the only
12
- * source, and `RequirementsPage.source` always reads `'artifact'`. Named loss: a repo whose
13
- * domain-graph never passed its coverage bar answers the existing 404 ("requirements_graph.json
14
- * not generated") where the live store used to answer — the observed lag the old header cited as
15
- * the reason the store went primary; not on any RC2 journey (register BC-64). Live freshness, if
16
- * wanted later, is ONE additive core-ts read (`requirementsIndexJson`), never a second library.
9
+ * HISTORY: until crew 0.16 this module read the `<repo>/.wicked-estate/requirements/
10
+ * requirements_graph.json` artifact, and before 0.7.35 it ALSO opened the code-graph store through
11
+ * a second SQLite library (`node:sqlite`) — the F-E2E-021 class that corrupted the bus db (one
12
+ * library per db file per process — crew#541, crew#548). That rule still holds: the store is read
13
+ * ONLY by the engine, through core-ts.
17
14
  *
18
- * Why server-side: 15k+ requirements — shipping them to the browser for JS-side
19
- * filtering is not search. The daemon builds a flat index (cached, invalidated on
20
- * artifact/overrides mtime), and queries run here: tokenized AND-match over
21
- * id/domain/title/statements, risk + domain filters, offset/limit pagination.
15
+ * Why server-side: 15k+ requirements — shipping them to the browser for JS-side filtering is not
16
+ * search. The daemon builds a flat index and queries run here: tokenized AND-match over
17
+ * id/domain/title/statements, risk + domain filters, offset/limit pagination. One engine read
18
+ * serves a repository for `REQUIREMENTS_READ_TTL_MS`; the index is rebuilt when the read's content
19
+ * (graph + coverage label) or the overrides sidecar's mtime changes.
22
20
  *
23
- * Why an OVERRIDES sidecar: the artifact is DERIVED (regenerated from the estate
24
- * store), so operator edits written into it would be clobbered on the next
25
- * `domain-graph` run. Edits live in `requirements_overrides.json` beside the artifact,
26
- * keyed `domain::reqId`, and are merged at read time — the overlay survives
27
- * regeneration and keeps provenance honest (`riskSource: operator` vs `data`).
21
+ * Why an OVERRIDES sidecar: the graph is DERIVED (rebuilt into the estate store by each
22
+ * `domain-graph` run), so operator edits written into it would be clobbered on the next build.
23
+ * Edits live in `requirements_overrides.json` (repoPaths), keyed `domain::reqId`, and are merged
24
+ * at read time — the overlay survives a rebuild (the engine keeps each requirement's id across
25
+ * builds) and keeps provenance honest (`riskSource: operator` vs `data`).
28
26
  *
29
27
  * ORPHANED OVERRIDES: an override key matches by exact string, so a key the corpus no
30
- * longer mints simply stops matching — silently. That happens on an artifact regeneration
31
- * that renames a domain or reqId. The index therefore COUNTS the keys that matched no row
28
+ * longer mints simply stops matching — silently. That happens on a rebuild that regroups a
29
+ * domain or retires a requirement. The index therefore COUNTS the keys that matched no row
32
30
  * and surfaces the count as `orphanedOverrides` on every page, so the edits' existence is
33
31
  * never invisible. It does NOT re-key them: guessing the mapping here would attach an
34
32
  * operator's risk note to the wrong requirement.
35
33
  */
34
+ import { createHash } from 'node:crypto';
35
+ import { existsSync } from 'node:fs';
36
36
  import { readFile, writeFile, rename, mkdir, stat } from 'node:fs/promises';
37
37
  import { dirname } from 'node:path';
38
- import { requirementsGraph, requirementsOverrides } from '../core/repoPaths.js';
38
+ import { codeGraphDb, requirementsOverrides } from '../core/repoPaths.js';
39
+ /** How long one engine read of a repository's graph serves later reads. A request that reads the
40
+ * same repository several times (product compose over many requirements, the project aggregates'
41
+ * two passes, PATCH then re-read) costs ONE read — the engine recomputes coverage over the whole
42
+ * store on each. A build that lands is visible within this window. */
43
+ export const REQUIREMENTS_READ_TTL_MS = 5_000;
44
+ const reads = new Map();
45
+ /** One key for everything cached about a repository: its id AND where it is registered. */
46
+ function repoKey(repo) {
47
+ return `${repo.id}\0${repo.root_path}`;
48
+ }
49
+ /** Forget what was read for `repo` (or everything): the next read asks the engine again. */
50
+ export function forgetRequirementsReads(repo) {
51
+ if (repo === undefined) {
52
+ reads.clear();
53
+ cache.clear();
54
+ return;
55
+ }
56
+ reads.delete(repoKey(repo));
57
+ cache.delete(repoKey(repo));
58
+ }
59
+ /** The repository's requirements graph from estate. Reads of one repository within
60
+ * {@link REQUIREMENTS_READ_TTL_MS} — concurrent or not — share one engine call; a failed read is
61
+ * never kept. A repo whose daemon resolved no graph root throws `CodeGraphRootUnresolvableError`
62
+ * (the routes' 503); a repo not indexed yet has nothing to read (`graph: null`, the 404) and costs
63
+ * no engine call. */
64
+ export async function readRequirementsGraph(repo, reader) {
65
+ const key = repoKey(repo);
66
+ if (!existsSync(codeGraphDb(repo))) {
67
+ forgetRequirementsReads(repo);
68
+ return { graph: null, coverage: null };
69
+ }
70
+ const hit = reads.get(key);
71
+ if (hit && Date.now() - hit.at < REQUIREMENTS_READ_TTL_MS)
72
+ return hit.read;
73
+ const read = reader.getRequirementsGraphForRepo(repo.id);
74
+ reads.set(key, { at: Date.now(), read });
75
+ read.catch(() => {
76
+ if (reads.get(key)?.read === read)
77
+ reads.delete(key);
78
+ });
79
+ return read;
80
+ }
81
+ /** The counts that say what the store held; `minPct` is a setting, not a count, and `realPct` follows them. */
82
+ const BUILD_COUNTS = ['behaviorBearing', 'real', 'placeholders', 'unmapped', 'notProduct'];
83
+ /**
84
+ * Which build the list is, from the engine's `build` and the engine's LIVE label (`read.coverage`, never the
85
+ * graph's own): `null` when the engine does not say (an older engine), sent no usable generation, or sent no
86
+ * usable live label. With nothing to compare, no claim either way (codex + agy on #1255). `rows`, when the engine
87
+ * judged every listed row, is what those verdicts add up to among the counted rows: the list is behind too when
88
+ * they are not the header's real and placeholders, whatever the labels say (a unit removed and another mapped since
89
+ * the build leave every count equal; codex r3 on #1257).
90
+ */
91
+ export function graphBuildOf(raw, live, rows = null) {
92
+ if (raw === undefined || raw === null || typeof raw !== 'object' || live === null)
93
+ return null;
94
+ const generation = count(raw.generation);
95
+ if (generation === null)
96
+ return null;
97
+ const built = coverageOf(raw.coverage ?? undefined);
98
+ const behind = built === null ||
99
+ BUILD_COUNTS.some((k) => built[k] !== live[k]) ||
100
+ (rows !== null && (rows.real !== live.real || rows.placeholders !== live.placeholders));
101
+ return { generation, coverage: built, behind };
102
+ }
103
+ /** A count as the artifact must carry it: a finite, non-negative integer — else `null`. */
104
+ const count = (v) => (typeof v === 'number' && Number.isInteger(v) && v >= 0 ? v : null);
105
+ /** At or above this many independent sources an item is validated (core's `VALIDATED_MIN_SOURCES`). */
106
+ const VALIDATED_MIN_SOURCES = 2;
107
+ /**
108
+ * The artifact's corroboration in wire shape, or `null` when absent or malformed — never invented
109
+ * and never defaulted: every count must be present, `sources` must be their sum, the status must
110
+ * agree with it, and an unconfirmed item must say why (a non-empty code and sentence). A record
111
+ * that fails any of those is not shown as a mark at all, rather than as a mark it does not support.
112
+ */
113
+ export function corroborationOf(raw) {
114
+ if (raw === undefined || raw === null || typeof raw !== 'object')
115
+ return null;
116
+ if (raw.status !== 'validated' && raw.status !== 'unconfirmed')
117
+ return null;
118
+ const sources = count(raw.sources);
119
+ const callSites = count(raw.call_sites);
120
+ const tests = count(raw.tests);
121
+ const docs = count(raw.docs);
122
+ const extraExtractors = count(raw.extra_extractors);
123
+ if (sources === null || callSites === null || tests === null || docs === null || extraExtractors === null)
124
+ return null;
125
+ if (sources !== callSites + tests + docs + extraExtractors)
126
+ return null;
127
+ if ((raw.status === 'validated') !== (sources >= VALIDATED_MIN_SOURCES))
128
+ return null;
129
+ const out = { status: raw.status, sources, callSites, tests, docs, extraExtractors };
130
+ if (raw.status === 'unconfirmed') {
131
+ const why = raw.why;
132
+ if (!why || typeof why.code !== 'string' || typeof why.text !== 'string')
133
+ return null;
134
+ if (why.code.trim() === '' || why.text.trim() === '')
135
+ return null;
136
+ out.why = { code: why.code, text: why.text };
137
+ }
138
+ return out;
139
+ }
140
+ /**
141
+ * The engine's coverage label in wire shape, or `null` when absent or not the bundle-1.3.0 shape (an
142
+ * older engine's `mapped_pct` label counted placeholders as mapped, so it is never shown as the real
143
+ * share).
144
+ */
145
+ export function coverageOf(raw) {
146
+ if (raw === undefined || raw === null || typeof raw !== 'object')
147
+ return null;
148
+ const out = {
149
+ realPct: count(raw.real_pct),
150
+ minPct: count(raw.min_pct),
151
+ behaviorBearing: count(raw.behavior_bearing),
152
+ real: count(raw.real),
153
+ placeholders: count(raw.placeholders),
154
+ unmapped: count(raw.unmapped),
155
+ notProduct: count(raw.not_product),
156
+ };
157
+ // Every field present and an integer, percentages in range, the buckets summing to the
158
+ // denominator and the share the engine's own floor of them (100 on an empty denominator) — or no
159
+ // label at all: a label whose share its counts do not support is never shown (codex on #1252).
160
+ if (Object.values(out).some((v) => v === null))
161
+ return null;
162
+ const c = out;
163
+ if (c.realPct > 100 || c.minPct < 1 || c.minPct > 100)
164
+ return null;
165
+ if (c.real + c.placeholders + c.unmapped !== c.behaviorBearing)
166
+ return null;
167
+ const share = c.behaviorBearing === 0 ? 100 : Math.floor((c.real * 100) / c.behaviorBearing);
168
+ if (c.realPct !== share)
169
+ return null;
170
+ return c;
171
+ }
39
172
  /** Product-functional requirements come from CODE; statements extracted from
40
173
  * lockfiles, manifests, data fixtures, and docs are honest observations about
41
174
  * those assets but are NOT product behavior — they class as config-data so the
42
175
  * default view can focus on the product. */
43
176
  export function categoryOf(file) {
177
+ // A component names a symbol in its file ("package.json#devDependencies"): classify by the FILE, or every
178
+ // manifest field reads as product code (studio 2026-11-01: Functional opened on package.json's fields).
179
+ // The engine writes `file#name` (wicked-core domain_model node_ref), and both halves may hold "#" (a
180
+ // source directory "src/c#/", a doc heading "C# support"), so any "#" may be the separator. Config and
181
+ // data only when EVERY reading names a config file: real product code never leaves Functional
182
+ // ("src/cache.json#v2/main.ts#run" stays functional). A doc heading holding "#" errs to functional.
44
183
  const f = file.toLowerCase();
184
+ const parts = f.split('#');
185
+ const readings = parts.length === 1 ? [f] : parts.slice(1).map((_, i) => parts.slice(0, i + 1).join('#'));
186
+ // The whole string is no reading: the engine always writes `file#name` (wicked-core domain_model
187
+ // `node_ref`, persisted as is), so the true file is one of the prefixes, and a name may hold "/" (a scoped
188
+ // package "package.json#@types/node", Copilot on #1254). Residual: a bare path holding "#" after a config
189
+ // extension, which no engine writes, classes as config.
190
+ return readings.every(isConfigFile) ? 'config-data' : 'functional';
191
+ }
192
+ const SOURCE_FILE = /\.(?:[cm]?[jt]sx?|vue|svelte|py|rs|go|java|kts?|cs|fs|rb|php|swift|scala|c|cc|cpp|h|hpp|m|mm|sh|ps1|sql|lua|dart|exs?|erl|clj|hs|ml|r|pl|groovy)$/u;
193
+ /** A requirement is config and data only when every component it names is: one naming product code keeps
194
+ * it functional (an older document can list several). None at all reads as functional. */
195
+ export function categoryOfComponents(components) {
196
+ return components.length > 0 && components.every((c) => categoryOf(c) === 'config-data')
197
+ ? 'config-data'
198
+ : 'functional';
199
+ }
200
+ function isConfigFile(f) {
45
201
  const base = f.slice(f.lastIndexOf('/') + 1);
46
202
  if (/\.(json|ya?ml|lock|toml|ini|env|md|mdx|txt|csv)$/.test(base))
47
- return 'config-data';
48
- if (base.includes('pnpm-lock') || base.includes('package-lock'))
49
- return 'config-data';
50
- return 'functional';
203
+ return true;
204
+ // a lockfile by name, never a source file named after one ("src/package-lock-parser.ts#parse")
205
+ return !SOURCE_FILE.test(base) && (base.includes('pnpm-lock') || base.includes('package-lock'));
206
+ }
207
+ const UNCOUNTED = new Set(['structural', 'not_product', 'unindexed']);
208
+ /** The engine's verdict on one row, or `null` when it sent none (an older engine, a build before `code_symbol`) or
209
+ * nothing readable: then the row is judged from the document ({@link isRealRequirement}) and counted. */
210
+ export function engineRowOf(rows, domain, reqId) {
211
+ if (rows === undefined || rows === null || typeof rows !== 'object')
212
+ return null;
213
+ const reqs = Object.hasOwn(rows, domain) ? rows[domain] : undefined;
214
+ if (reqs === undefined || reqs === null || typeof reqs !== 'object')
215
+ return null;
216
+ const v = Object.hasOwn(reqs, reqId) ? reqs[reqId] : undefined;
217
+ if (v === undefined || v === null || typeof v !== 'object')
218
+ return null;
219
+ const { real, uncounted } = v;
220
+ if (typeof real !== 'boolean')
221
+ return null;
222
+ if (uncounted === null)
223
+ return { real, uncounted: null };
224
+ return typeof uncounted === 'string' && UNCOUNTED.has(uncounted)
225
+ ? { real, uncounted: uncounted }
226
+ : null;
51
227
  }
52
228
  /** Keys in the overrides sidecar that no corpus row claimed — counted, never dropped silently. */
53
229
  function countOrphanedOverrides(overrides, byKey) {
@@ -57,7 +233,6 @@ function countOrphanedOverrides(overrides, byKey) {
57
233
  orphaned += 1;
58
234
  return orphaned;
59
235
  }
60
- const RISK_RE = /risk/i;
61
236
  // Paths come from `repoPaths` — this module used to spell the code-graph path itself, which is
62
237
  // one of the five copies FINDING-069 was made of. It takes the whole `RepoEntry` rather than a
63
238
  // root path for exactly that reason: a bare string is an invitation to re-derive.
@@ -83,21 +258,35 @@ async function readOverrides(repo) {
83
258
  }
84
259
  const cache = new Map();
85
260
  let tmpSeq = 0;
86
- /** The artifact-built index for `repo` — cached, rebuilt when the artifact or the overrides
87
- * sidecar changes mtime; `null` when the artifact does not exist yet (the route's 404). */
88
- async function buildIndex(repo) {
89
- const [artMtime, ovMtime] = await Promise.all([
90
- mtimeMs(requirementsGraph(repo)),
261
+ /** The index for `repo`, built from its graph in estate — cached, rebuilt when the graph read back
262
+ * from estate or the overrides sidecar changes; `null` when no graph has been built yet (the
263
+ * route's 404). */
264
+ async function buildIndex(repo, reader) {
265
+ return (await buildIndexRead(repo, reader)).index;
266
+ }
267
+ /** {@link buildIndex}, with the coverage of the very read it was built from: what a page that
268
+ * finds no graph says about the share mapped so far (domain-graph-3; codex r1/r2 on #1250 — never
269
+ * a second read, never another request's). */
270
+ async function buildIndexRead(repo, reader) {
271
+ const [read, ovMtime] = await Promise.all([
272
+ readRequirementsGraph(repo, reader),
91
273
  mtimeMs(requirementsOverrides(repo)),
92
274
  ]);
93
- if (artMtime < 0)
94
- return null; // no artifact — requirements not generated yet
95
- const cached = cache.get(repo.root_path);
96
- if (cached && cached.sourceMtimeMs === artMtime && cached.overridesMtimeMs === ovMtime) {
97
- return cached;
275
+ const graph = read.graph;
276
+ if (graph === null || typeof graph !== 'object') {
277
+ cache.delete(repoKey(repo)); // nothing built (any more): no stale index survives
278
+ return { index: null, coverage: coverageOf(read.coverage ?? undefined) };
279
+ }
280
+ const token = createHash('sha1')
281
+ .update(JSON.stringify(graph))
282
+ .update(JSON.stringify(read.coverage ?? null))
283
+ .update(JSON.stringify(read.build ?? null))
284
+ .update(JSON.stringify(read.rows ?? null))
285
+ .digest('hex');
286
+ const cached = cache.get(repoKey(repo));
287
+ if (cached && cached.sourceToken === token && cached.overridesMtimeMs === ovMtime) {
288
+ return { index: cached, coverage: cached.coverage };
98
289
  }
99
- const raw = await readFile(requirementsGraph(repo), 'utf8');
100
- const graph = JSON.parse(raw);
101
290
  const overrides = await readOverrides(repo);
102
291
  const entries = [];
103
292
  const byKey = new Map();
@@ -105,9 +294,15 @@ async function buildIndex(repo) {
105
294
  for (const [reqId, req] of Object.entries(dom.requirements ?? {})) {
106
295
  const key = `${domain}::${reqId}`;
107
296
  const ov = overrides[key];
108
- // Data-derived risk: any business rule whose serialized form names risk (the
109
- // extraction harness's RESOLVED-or-RISK floor surfaces here at current fidelity).
110
- const dataRisk = (req.business_rules ?? []).some((r) => RISK_RE.test(JSON.stringify(r)));
297
+ // The engine's verdict when it gives one (the document alone cannot tell a risk note's fallback rule from a
298
+ // stated rule); the document's reading otherwise.
299
+ const verdict = engineRowOf(read.rows, domain, reqId);
300
+ const real = verdict === null ? isRealRequirement(req) : verdict.real;
301
+ const uncounted = verdict?.uncounted ?? null;
302
+ // Data-derived risk is the engine's: an accounted behaviour it does not resolve is "risk flagged", which is
303
+ // what a placeholder is. (It was a /risk/i match over each rule's JSON, which also flagged real rules that
304
+ // merely say "risk": 16 on wicked-crew, so the "No risk" filter was not the real rows.)
305
+ const dataRisk = !real;
111
306
  const risk = ov?.risk !== undefined ? ov.risk : dataRisk;
112
307
  const riskSource = ov?.risk !== undefined ? 'operator' : dataRisk ? 'data' : null;
113
308
  const title = ov?.title ?? req.title ?? reqId;
@@ -117,43 +312,118 @@ async function buildIndex(repo) {
117
312
  return typeof st === 'string' ? st.trim() : '';
118
313
  })
119
314
  .filter((st) => st !== '');
120
- const firstComponent = (req.legacy_components ?? []).find((c) => typeof c === 'string');
315
+ const components = (req.legacy_components ?? []).filter((c) => typeof c === 'string');
121
316
  const summary = {
122
317
  key,
123
318
  domain,
124
319
  reqId,
125
320
  title,
126
- category: categoryOf(firstComponent ?? ''),
321
+ category: categoryOfComponents(components),
127
322
  statement: statements[0] ?? '',
128
323
  status: ov?.status ?? req.status ?? 'active',
129
324
  risk,
130
325
  riskSource,
131
326
  edited: ov !== undefined,
327
+ corroboration: uncounted === null ? corroborationOf(req.corroboration) : null,
328
+ placeholder: !real,
329
+ uncounted,
132
330
  };
133
331
  // Statements are part of the haystack: searching the requirements means
134
332
  // searching the actual rule text, not just titles and ids.
135
333
  const haystack = `${reqId} ${domain} ${title} ${req.description ?? ''} ${statements.join(' ')} ${ov?.notes ?? ''}`.toLowerCase();
136
- const entry = { summary, haystack, source: req };
334
+ const entry = { summary, haystack, source: req, real, judged: verdict !== null };
137
335
  entries.push(entry);
138
336
  byKey.set(key, entry);
139
337
  }
140
338
  }
339
+ // The label from the store's own counts at read time (a later run that maps more shows up
340
+ // without a rebuild); the build's own label only when an engine sent none.
341
+ const coverage = coverageOf(read.coverage ?? graph.metadata?.coverage);
342
+ // Only when the engine judged EVERY row: an older engine's silence, or a row it gave no verdict on (a build
343
+ // before `code_symbol`, a malformed entry), is read off the document, so the page claims nothing about it
344
+ // (codex r2 on #1257: a partial map must not read as a reconciled list).
345
+ const judgedAll = typeof read.rows === 'object' && read.rows !== null && entries.every((e) => e.judged);
346
+ const counted = (real) => entries.filter((e) => e.summary.uncounted === null && e.real === real).length;
347
+ const left = (real) => entries.filter((e) => e.summary.uncounted !== null && e.real === real).length;
141
348
  const index = {
142
349
  entries,
143
350
  byKey,
144
- sourceMtimeMs: artMtime,
351
+ sourceToken: token,
145
352
  overridesMtimeMs: ovMtime,
146
353
  total: entries.length,
147
354
  orphanedOverrides: countOrphanedOverrides(overrides, byKey),
355
+ coverage,
356
+ // The live label only: the graph's own fallback label would compare a build with itself.
357
+ graphBuild: graphBuildOf(read.build, coverageOf(read.coverage ?? undefined), judgedAll ? { real: counted(true), placeholders: counted(false) } : null),
358
+ validated: entries.filter((e) => e.summary.corroboration?.status === 'validated').length,
359
+ unconfirmed: entries.filter((e) => e.summary.corroboration?.status === 'unconfirmed').length,
360
+ uncounted: judgedAll ? { stated: left(true), placeholders: left(false) } : null,
361
+ categories: {
362
+ functional: entries.filter((e) => e.summary.category === 'functional').length,
363
+ configData: entries.filter((e) => e.summary.category === 'config-data').length,
364
+ },
148
365
  };
149
- cache.set(repo.root_path, index);
150
- return index;
366
+ cache.set(repoKey(repo), index);
367
+ return { index, coverage: index.coverage };
151
368
  }
369
+ /**
370
+ * The answer for a repository whose `requirements_graph.json` has not been generated: a 404 with a
371
+ * typed `code`, never a bare sentence a client can only show as a refusal. It is a state, not an
372
+ * error. `workflow` names the preset whose last step (`wicked-core domain-graph`) writes the graph,
373
+ * so a client can offer to start it. Wire shape: `RequirementsNotGenerated` (api-types 0.154.0).
374
+ */
375
+ export const REQUIREMENTS_NOT_GENERATED = {
376
+ error: 'No requirements graph yet for this repository',
377
+ code: 'notGenerated',
378
+ workflow: 'domain-extraction',
379
+ };
152
380
  /** Tokenized AND-match: every whitespace-separated term must appear in the haystack. */
153
- export async function listRequirements(repo, query) {
154
- const index = await buildIndex(repo);
381
+ export async function listRequirements(repo, query, reader) {
382
+ return (await listRequirementsRead(repo, query, reader)).page;
383
+ }
384
+ /** {@link listRequirements}, with the share mapped so far when there is no graph yet: both from one
385
+ * engine read (the route's notGenerated answer carries it). */
386
+ export async function listRequirementsRead(repo, query, reader) {
387
+ const { index, coverage } = await buildIndexRead(repo, reader);
155
388
  if (index === null)
156
- return null;
389
+ return { page: null, coverage };
390
+ return { page: pageOf(index, query), coverage };
391
+ }
392
+ /**
393
+ * A listed requirement that is a placeholder, not a real requirement: its statement is the engine's risk floor
394
+ * ("[RISK] <title>: empty statement (model could not state a rule)", or a statement below the confidence threshold).
395
+ */
396
+ export function isPlaceholderStatement(statement) {
397
+ return /^\[RISK\]/u.test(statement.trim());
398
+ }
399
+ /** wicked-core's `DEFAULT_RESOLVE_THRESHOLD`: a business rule at or above it resolves its behaviour. */
400
+ const RESOLVE_THRESHOLD = 0.75;
401
+ /**
402
+ * Whether the engine counts this requirement REAL (wicked-core `classify_node`, as far as the document
403
+ * shows it): a validated requirement (`status: active`, whatever fallback rule the builder kept beside it),
404
+ * or a business rule at or above the resolve threshold whose statement is not the risk floor. A plain
405
+ * rule under the threshold, a risk-floor statement or no statement at all is a placeholder. A rule with
406
+ * no numeric confidence (an older document) is judged on its statement.
407
+ */
408
+ export function isRealRequirement(req) {
409
+ const stated = (req.business_rules ?? []).flatMap((r) => {
410
+ const { statement, confidence } = (r ?? {});
411
+ return typeof statement === 'string' && statement.trim() !== '' && !isPlaceholderStatement(statement)
412
+ ? [typeof confidence === 'number' ? confidence : null]
413
+ : [];
414
+ });
415
+ if (req.status === 'active')
416
+ return true;
417
+ return stated.some((c) => c === null || c >= RESOLVE_THRESHOLD);
418
+ }
419
+ /** The list's order: real requirements first, then placeholders, then the rows the share does not count (stated, then
420
+ * placeholders), then config and data; the graph's order within each. */
421
+ function listRank(e) {
422
+ if (e.summary.category === 'config-data')
423
+ return 4;
424
+ return (e.summary.uncounted === null ? 0 : 2) + (e.real ? 0 : 1);
425
+ }
426
+ function pageOf(index, query) {
157
427
  const terms = (query.q ?? '')
158
428
  .toLowerCase()
159
429
  .split(/\s+/)
@@ -171,20 +441,29 @@ export async function listRequirements(repo, query) {
171
441
  continue;
172
442
  if (terms.length > 0 && !terms.every((t) => e.haystack.includes(t)))
173
443
  continue;
174
- matched.push(e.summary);
444
+ matched.push(e);
175
445
  }
446
+ // Stable: Array.prototype.sort keeps the graph's order within a rank. A count-only read (limit 0, the
447
+ // project aggregates' first pass over every member repository) returns no items: nothing to order.
448
+ if (query.limit > 0)
449
+ matched.sort((a, b) => listRank(a) - listRank(b));
176
450
  return {
177
451
  total: matched.length,
178
452
  corpus: index.total,
179
453
  offset: query.offset,
180
454
  limit: query.limit,
181
- items: matched.slice(query.offset, query.offset + query.limit),
182
- source: 'artifact',
455
+ items: matched.slice(query.offset, query.offset + query.limit).map((e) => e.summary),
456
+ source: 'store',
183
457
  orphanedOverrides: index.orphanedOverrides,
458
+ coverage: index.coverage,
459
+ graphBuild: index.graphBuild,
460
+ corroboration: { validated: index.validated, unconfirmed: index.unconfirmed },
461
+ uncounted: index.uncounted,
462
+ categories: index.categories,
184
463
  };
185
464
  }
186
- export async function getRequirement(repo, key) {
187
- const index = await buildIndex(repo);
465
+ export async function getRequirement(repo, key, reader) {
466
+ const index = await buildIndex(repo, reader);
188
467
  const entry = index?.byKey.get(key);
189
468
  if (index === null || entry === undefined)
190
469
  return null;
@@ -205,8 +484,8 @@ export async function getRequirement(repo, key) {
205
484
  };
206
485
  }
207
486
  /** Merge a patch into the overrides sidecar (atomic write) and return the fresh detail. */
208
- export async function patchRequirement(repo, key, patch) {
209
- const index = await buildIndex(repo);
487
+ export async function patchRequirement(repo, key, patch, reader) {
488
+ const index = await buildIndex(repo, reader);
210
489
  if (index === null || !index.byKey.has(key))
211
490
  return null;
212
491
  const overrides = await readOverrides(repo);
@@ -227,7 +506,8 @@ export async function patchRequirement(repo, key, patch) {
227
506
  const tmp = `${path}.tmp-${process.pid}-${++tmpSeq}`;
228
507
  await writeFile(tmp, JSON.stringify(overrides, null, 2), 'utf8');
229
508
  await rename(tmp, path);
230
- cache.delete(repo.root_path); // next read rebuilds with the new overrides
231
- return getRequirement(repo, key);
509
+ // The overrides changed, the graph did not: the index rebuilds from the read already in hand.
510
+ cache.delete(repoKey(repo));
511
+ return getRequirement(repo, key, reader);
232
512
  }
233
513
  //# sourceMappingURL=requirements.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/api/requirements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/api/requirements.ts"],"names":[],"mappings":"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"}