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.
- package/README.md +28 -8
- package/dist/api/artifact-outline.d.ts +64 -0
- package/dist/api/artifact-outline.d.ts.map +1 -0
- package/dist/api/artifact-outline.js +254 -0
- package/dist/api/artifact-outline.js.map +1 -0
- package/dist/api/beneath.d.ts +76 -0
- package/dist/api/beneath.d.ts.map +1 -0
- package/dist/api/beneath.js +214 -0
- package/dist/api/beneath.js.map +1 -0
- package/dist/api/capture.d.ts +2 -2
- package/dist/api/chat-citations.d.ts +25 -1
- package/dist/api/chat-citations.d.ts.map +1 -1
- package/dist/api/chat-citations.js +186 -61
- package/dist/api/chat-citations.js.map +1 -1
- package/dist/api/chat-context.d.ts +236 -0
- package/dist/api/chat-context.d.ts.map +1 -0
- package/dist/api/chat-context.js +808 -0
- package/dist/api/chat-context.js.map +1 -0
- package/dist/api/chat-history.d.ts +20 -0
- package/dist/api/chat-history.d.ts.map +1 -1
- package/dist/api/chat-history.js +46 -1
- package/dist/api/chat-history.js.map +1 -1
- package/dist/api/chat-proposals.d.ts +534 -0
- package/dist/api/chat-proposals.d.ts.map +1 -0
- package/dist/api/chat-proposals.js +1562 -0
- package/dist/api/chat-proposals.js.map +1 -0
- package/dist/api/chat-scope.d.ts +41 -0
- package/dist/api/chat-scope.d.ts.map +1 -1
- package/dist/api/chat-scope.js +87 -15
- package/dist/api/chat-scope.js.map +1 -1
- package/dist/api/chat-transcripts.d.ts +27 -2
- package/dist/api/chat-transcripts.d.ts.map +1 -1
- package/dist/api/chat-transcripts.js +105 -4
- package/dist/api/chat-transcripts.js.map +1 -1
- package/dist/api/diagnostics.d.ts +15 -0
- package/dist/api/diagnostics.d.ts.map +1 -1
- package/dist/api/diagnostics.js +56 -0
- package/dist/api/diagnostics.js.map +1 -1
- package/dist/api/elicitation-cache.d.ts +13 -0
- package/dist/api/elicitation-cache.d.ts.map +1 -1
- package/dist/api/elicitation-cache.js +12 -0
- package/dist/api/elicitation-cache.js.map +1 -1
- package/dist/api/eval-sample.d.ts +12 -12
- package/dist/api/frame-guard.d.ts +62 -0
- package/dist/api/frame-guard.d.ts.map +1 -0
- package/dist/api/frame-guard.js +97 -0
- package/dist/api/frame-guard.js.map +1 -0
- package/dist/api/governance-steering.d.ts +4 -4
- package/dist/api/multiscope.d.ts +3 -0
- package/dist/api/multiscope.d.ts.map +1 -1
- package/dist/api/multiscope.js +13 -0
- package/dist/api/multiscope.js.map +1 -1
- package/dist/api/needs.d.ts +6 -0
- package/dist/api/needs.d.ts.map +1 -1
- package/dist/api/needs.js +31 -4
- package/dist/api/needs.js.map +1 -1
- package/dist/api/product.d.ts.map +1 -1
- package/dist/api/product.js +13 -2
- package/dist/api/product.js.map +1 -1
- package/dist/api/project-aggregates.d.ts +6 -6
- package/dist/api/project-aggregates.d.ts.map +1 -1
- package/dist/api/project-aggregates.js +16 -24
- package/dist/api/project-aggregates.js.map +1 -1
- package/dist/api/requirements.d.ts +261 -6
- package/dist/api/requirements.d.ts.map +1 -1
- package/dist/api/requirements.js +344 -64
- package/dist/api/requirements.js.map +1 -1
- package/dist/api/routes.d.ts +156 -4
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +851 -78
- package/dist/api/routes.js.map +1 -1
- package/dist/api/run-brief.d.ts +78 -0
- package/dist/api/run-brief.d.ts.map +1 -0
- package/dist/api/run-brief.js +318 -0
- package/dist/api/run-brief.js.map +1 -0
- package/dist/api/run-files.d.ts.map +1 -1
- package/dist/api/run-files.js +5 -1
- package/dist/api/run-files.js.map +1 -1
- package/dist/api/run-timing-index.d.ts +27 -0
- package/dist/api/run-timing-index.d.ts.map +1 -1
- package/dist/api/run-timing-index.js +65 -0
- package/dist/api/run-timing-index.js.map +1 -1
- package/dist/api/seat-images.d.ts +102 -0
- package/dist/api/seat-images.d.ts.map +1 -0
- package/dist/api/seat-images.js +333 -0
- package/dist/api/seat-images.js.map +1 -0
- package/dist/api/server.d.ts +3 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +265 -2
- package/dist/api/server.js.map +1 -1
- package/dist/api/steering-landing.d.ts +48 -1
- package/dist/api/steering-landing.d.ts.map +1 -1
- package/dist/api/steering-landing.js +116 -42
- package/dist/api/steering-landing.js.map +1 -1
- package/dist/api/system-snapshot.d.ts +51 -2
- package/dist/api/system-snapshot.d.ts.map +1 -1
- package/dist/api/system-snapshot.js +151 -15
- package/dist/api/system-snapshot.js.map +1 -1
- package/dist/api/testing.d.ts +4 -4
- package/dist/api/testing.js +2 -2
- package/dist/api/testing.js.map +1 -1
- package/dist/apps/spec.d.ts +3009 -0
- package/dist/apps/spec.d.ts.map +1 -0
- package/dist/apps/spec.js +870 -0
- package/dist/apps/spec.js.map +1 -0
- package/dist/campaigns/routes.js +1 -1
- package/dist/campaigns/routes.js.map +1 -1
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adapter.d.ts +12 -0
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +36 -1
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/deliver-text.d.ts.map +1 -1
- package/dist/core/deliver-text.js +22 -10
- package/dist/core/deliver-text.js.map +1 -1
- package/dist/core/estate-mcp-client.d.ts +7 -1
- package/dist/core/estate-mcp-client.d.ts.map +1 -1
- package/dist/core/estate-mcp-client.js +10 -2
- package/dist/core/estate-mcp-client.js.map +1 -1
- package/dist/core/exec.d.ts +12 -0
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +23 -0
- package/dist/core/exec.js.map +1 -1
- package/dist/core/reassign-refusal.d.ts.map +1 -1
- package/dist/core/reassign-refusal.js +23 -3
- package/dist/core/reassign-refusal.js.map +1 -1
- package/dist/core/repoPaths.d.ts +32 -7
- package/dist/core/repoPaths.d.ts.map +1 -1
- package/dist/core/repoPaths.js +56 -9
- package/dist/core/repoPaths.js.map +1 -1
- package/dist/core/requirements-graph-setting.d.ts +32 -0
- package/dist/core/requirements-graph-setting.d.ts.map +1 -0
- package/dist/core/requirements-graph-setting.js +84 -0
- package/dist/core/requirements-graph-setting.js.map +1 -0
- package/dist/core/run-boot-resume.d.ts +4 -1
- package/dist/core/run-boot-resume.d.ts.map +1 -1
- package/dist/core/run-boot-resume.js +6 -1
- package/dist/core/run-boot-resume.js.map +1 -1
- package/dist/core/run-identity.d.ts.map +1 -1
- package/dist/core/run-identity.js +6 -0
- package/dist/core/run-identity.js.map +1 -1
- package/dist/core/types.d.ts +14 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/decisions/chat-recorder.d.ts +14 -3
- package/dist/decisions/chat-recorder.d.ts.map +1 -1
- package/dist/decisions/chat-recorder.js +54 -9
- package/dist/decisions/chat-recorder.js.map +1 -1
- package/dist/editors/csp.d.ts +24 -4
- package/dist/editors/csp.d.ts.map +1 -1
- package/dist/editors/csp.js +35 -8
- package/dist/editors/csp.js.map +1 -1
- package/dist/editors/registry.d.ts +46 -21
- package/dist/editors/registry.d.ts.map +1 -1
- package/dist/editors/registry.js +13 -2
- package/dist/editors/registry.js.map +1 -1
- package/dist/editors/routes.d.ts +4 -1
- package/dist/editors/routes.d.ts.map +1 -1
- package/dist/editors/routes.js +30 -3
- package/dist/editors/routes.js.map +1 -1
- package/dist/editors/visuals.d.ts +51 -0
- package/dist/editors/visuals.d.ts.map +1 -0
- package/dist/editors/visuals.js +164 -0
- package/dist/editors/visuals.js.map +1 -0
- package/dist/editors/webrtc-guard.d.ts +94 -0
- package/dist/editors/webrtc-guard.d.ts.map +1 -0
- package/dist/editors/webrtc-guard.js +506 -0
- package/dist/editors/webrtc-guard.js.map +1 -0
- package/dist/inspect/reading.d.ts +110 -0
- package/dist/inspect/reading.d.ts.map +1 -0
- package/dist/inspect/reading.js +325 -0
- package/dist/inspect/reading.js.map +1 -0
- package/dist/inspect/routes.d.ts +14 -0
- package/dist/inspect/routes.d.ts.map +1 -0
- package/dist/inspect/routes.js +44 -0
- package/dist/inspect/routes.js.map +1 -0
- package/dist/inspect/service.d.ts +161 -0
- package/dist/inspect/service.d.ts.map +1 -0
- package/dist/inspect/service.js +466 -0
- package/dist/inspect/service.js.map +1 -0
- package/dist/interactive/bridge-pool.d.ts +11 -2
- package/dist/interactive/bridge-pool.d.ts.map +1 -1
- package/dist/interactive/bridge-pool.js +10 -1
- package/dist/interactive/bridge-pool.js.map +1 -1
- package/dist/interactive/doc-binding.d.ts +156 -0
- package/dist/interactive/doc-binding.d.ts.map +1 -0
- package/dist/interactive/doc-binding.js +277 -0
- package/dist/interactive/doc-binding.js.map +1 -0
- package/dist/interactive/doc-delete-routes.d.ts +3 -0
- package/dist/interactive/doc-delete-routes.d.ts.map +1 -1
- package/dist/interactive/doc-delete-routes.js +4 -0
- package/dist/interactive/doc-delete-routes.js.map +1 -1
- package/dist/interactive/draft-events.d.ts +89 -3
- package/dist/interactive/draft-events.d.ts.map +1 -1
- package/dist/interactive/draft-events.js +441 -30
- package/dist/interactive/draft-events.js.map +1 -1
- package/dist/interactive/draft-skill.d.ts +7 -0
- package/dist/interactive/draft-skill.d.ts.map +1 -1
- package/dist/interactive/draft-skill.js +10 -3
- package/dist/interactive/draft-skill.js.map +1 -1
- package/dist/interactive/edit-events.d.ts +2 -0
- package/dist/interactive/edit-events.d.ts.map +1 -1
- package/dist/interactive/edit-events.js +11 -0
- package/dist/interactive/edit-events.js.map +1 -1
- package/dist/interactive/proposal-create.d.ts +143 -0
- package/dist/interactive/proposal-create.d.ts.map +1 -0
- package/dist/interactive/proposal-create.js +318 -0
- package/dist/interactive/proposal-create.js.map +1 -0
- package/dist/interactive/proxy-routes.d.ts +60 -3
- package/dist/interactive/proxy-routes.d.ts.map +1 -1
- package/dist/interactive/proxy-routes.js +217 -3
- package/dist/interactive/proxy-routes.js.map +1 -1
- package/dist/interactive/source-packet.d.ts +126 -0
- package/dist/interactive/source-packet.d.ts.map +1 -0
- package/dist/interactive/source-packet.js +482 -0
- package/dist/interactive/source-packet.js.map +1 -0
- package/dist/learnings/estate.d.ts +16 -0
- package/dist/learnings/estate.d.ts.map +1 -0
- package/dist/learnings/estate.js +68 -0
- package/dist/learnings/estate.js.map +1 -0
- package/dist/learnings/extract.d.ts +56 -0
- package/dist/learnings/extract.d.ts.map +1 -0
- package/dist/learnings/extract.js +252 -0
- package/dist/learnings/extract.js.map +1 -0
- package/dist/learnings/recall.d.ts +43 -0
- package/dist/learnings/recall.d.ts.map +1 -0
- package/dist/learnings/recall.js +104 -0
- package/dist/learnings/recall.js.map +1 -0
- package/dist/learnings/service.d.ts +183 -0
- package/dist/learnings/service.d.ts.map +1 -0
- package/dist/learnings/service.js +571 -0
- package/dist/learnings/service.js.map +1 -0
- package/dist/mcp/ask-server.d.ts.map +1 -1
- package/dist/mcp/ask-server.js +37 -4
- package/dist/mcp/ask-server.js.map +1 -1
- package/dist/mcp/broker.d.ts +12 -1
- package/dist/mcp/broker.d.ts.map +1 -1
- package/dist/mcp/broker.js +24 -5
- package/dist/mcp/broker.js.map +1 -1
- package/dist/mcp/invoke.d.ts +26 -2
- package/dist/mcp/invoke.d.ts.map +1 -1
- package/dist/mcp/invoke.js +51 -5
- package/dist/mcp/invoke.js.map +1 -1
- package/dist/persona/routes.d.ts +92 -0
- package/dist/persona/routes.d.ts.map +1 -0
- package/dist/persona/routes.js +69 -0
- package/dist/persona/routes.js.map +1 -0
- package/dist/persona/store.d.ts +104 -0
- package/dist/persona/store.d.ts.map +1 -0
- package/dist/persona/store.js +176 -0
- package/dist/persona/store.js.map +1 -0
- package/dist/persona/voice.d.ts +4 -0
- package/dist/persona/voice.d.ts.map +1 -0
- package/dist/persona/voice.js +58 -0
- package/dist/persona/voice.js.map +1 -0
- package/dist/projects/routes.d.ts +2 -2
- package/dist/setup/known.d.ts +56 -0
- package/dist/setup/known.d.ts.map +1 -0
- package/dist/setup/known.js +159 -0
- package/dist/setup/known.js.map +1 -0
- package/dist/setup/routes.d.ts +13 -0
- package/dist/setup/routes.d.ts.map +1 -0
- package/dist/setup/routes.js +20 -0
- package/dist/setup/routes.js.map +1 -0
- package/dist/standing-orders/history.d.ts +2 -0
- package/dist/standing-orders/history.d.ts.map +1 -1
- package/dist/standing-orders/history.js +1 -0
- package/dist/standing-orders/history.js.map +1 -1
- package/dist/studio/assets/WickedSans-Regular-fb698rcD.woff2 +0 -0
- package/dist/studio/assets/WickedSans-SemiBold-CD53n1AC.woff2 +0 -0
- package/dist/studio/assets/WickedScript-Regular-CY5juO6I.woff2 +0 -0
- package/dist/studio/assets/WickedSerif-Regular-mdPEjaVZ.woff2 +0 -0
- package/dist/studio/assets/index-BUZ_-Syk.css +32 -0
- package/dist/studio/assets/index-u4O_7N-b.js +986 -0
- package/dist/studio/editors/wicked-deck/editor.json +6 -1
- package/dist/studio/editors/wicked-deck/icon.svg +1 -0
- package/dist/studio/editors/wicked-deck/index.html +1 -1
- package/dist/studio/editors/wicked-doc/editor.json +6 -1
- package/dist/studio/editors/wicked-doc/icon.svg +1 -0
- package/dist/studio/editors/wicked-doc/index.html +1 -1
- package/dist/studio/editors/wicked-insights/editor.json +6 -1
- package/dist/studio/editors/wicked-insights/icon.svg +1 -0
- package/dist/studio/editors/wicked-insights/index.html +1 -1
- package/dist/studio/editors/wicked-page/editor.json +6 -1
- package/dist/studio/editors/wicked-page/icon.svg +1 -0
- package/dist/studio/editors/wicked-page/index.html +1 -1
- package/dist/studio/editors/wicked-video/editor.json +6 -1
- package/dist/studio/editors/wicked-video/icon.svg +1 -0
- package/dist/studio/editors/wicked-video/index.html +1 -1
- package/dist/studio/index.html +2 -2
- package/dist/studio/testid-inventory.json +5155 -2707
- package/dist/voice/dashboard.d.ts +376 -0
- package/dist/voice/dashboard.d.ts.map +1 -0
- package/dist/voice/dashboard.js +92 -0
- package/dist/voice/dashboard.js.map +1 -0
- package/dist/voice/inject-input.d.ts +51 -0
- package/dist/voice/inject-input.d.ts.map +1 -0
- package/dist/voice/inject-input.js +126 -0
- package/dist/voice/inject-input.js.map +1 -0
- package/dist/voice/routes.d.ts +41 -0
- package/dist/voice/routes.d.ts.map +1 -0
- package/dist/voice/routes.js +116 -0
- package/dist/voice/routes.js.map +1 -0
- package/dist/voice/service.d.ts +177 -0
- package/dist/voice/service.d.ts.map +1 -0
- package/dist/voice/service.js +400 -0
- package/dist/voice/service.js.map +1 -0
- package/dist/workflow-catalog/build.d.ts +35 -0
- package/dist/workflow-catalog/build.d.ts.map +1 -0
- package/dist/workflow-catalog/build.js +229 -0
- package/dist/workflow-catalog/build.js.map +1 -0
- package/dist/workflow-catalog/catalog-data.d.ts +36 -0
- package/dist/workflow-catalog/catalog-data.d.ts.map +1 -0
- package/dist/workflow-catalog/catalog-data.js +430 -0
- package/dist/workflow-catalog/catalog-data.js.map +1 -0
- package/dist/working-doc/event-lines.d.ts +76 -0
- package/dist/working-doc/event-lines.d.ts.map +1 -0
- package/dist/working-doc/event-lines.js +247 -0
- package/dist/working-doc/event-lines.js.map +1 -0
- package/dist/working-doc/routes.d.ts +1 -1
- package/dist/working-doc/routes.d.ts.map +1 -1
- package/dist/working-doc/routes.js +2 -1
- package/dist/working-doc/routes.js.map +1 -1
- package/dist/working-doc/sections.d.ts +3 -1
- package/dist/working-doc/sections.d.ts.map +1 -1
- package/dist/working-doc/sections.js +4 -2
- package/dist/working-doc/sections.js.map +1 -1
- package/dist/working-doc/service.d.ts +66 -1
- package/dist/working-doc/service.d.ts.map +1 -1
- package/dist/working-doc/service.js +298 -22
- package/dist/working-doc/service.js.map +1 -1
- package/dist/working-doc/store.d.ts +8 -2
- package/dist/working-doc/store.d.ts.map +1 -1
- package/dist/working-doc/store.js.map +1 -1
- package/endpoint-manifest.json +205 -2
- package/package.json +5 -4
- package/workflows/distill-learnings.json +27 -0
- package/workflows/inspect-unit.json +27 -0
- package/dist/studio/assets/index-B-f_VEL2.css +0 -32
- package/dist/studio/assets/index-DhkxIK-0.js +0 -845
package/dist/api/requirements.js
CHANGED
|
@@ -1,53 +1,229 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* REQUIREMENTS SERVICE — server-side search + operator overrides over
|
|
3
|
-
*
|
|
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
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
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
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
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
|
|
31
|
-
*
|
|
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 {
|
|
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
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
87
|
-
* sidecar changes
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
//
|
|
109
|
-
//
|
|
110
|
-
const
|
|
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
|
|
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:
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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: '
|
|
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
|
-
|
|
231
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AA6BhF;;;4CAG4C;AAC5C,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,IAAI,kDAAkD,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC;IACxF,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,aAAa,CAAC;IACtF,OAAO,YAAY,CAAC;AACtB,CAAC;AA6CD,kGAAkG;AAClG,SAAS,sBAAsB,CAC7B,SAA8C,EAC9C,KAA8B;IAE9B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,QAAQ,IAAI,CAAC,CAAC;IAC7E,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,+FAA+F;AAC/F,+FAA+F;AAC/F,kFAAkF;AAElF,KAAK,UAAU,OAAO,CAAC,IAAY;IACjC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAe;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAClD,CAAC,CAAE,MAA8C;YACjD,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;AAC3C,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf;2FAC2F;AAC3F,KAAK,UAAU,UAAU,CAAC,IAAe;IACvC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5C,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;KACrC,CAAC,CAAC;IACH,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,+CAA+C;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,gBAAgB,KAAK,OAAO,EAAE,CAAC;QACvF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiD,CAAC;IAC9E,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;YAClE,MAAM,GAAG,GAAG,GAAG,MAAM,KAAK,KAAK,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC1B,6EAA6E;YAC7E,kFAAkF;YAClF,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,MAAM,IAAI,GAAG,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzD,MAAM,UAAU,GACd,EAAE,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,MAAM,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;YAC9C,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;iBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,EAAE,GAAI,CAA6B,CAAC,SAAS,CAAC;gBACpD,OAAO,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7B,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAEzE,CAAC;YACd,MAAM,OAAO,GAAuB;gBAClC,GAAG;gBACH,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,QAAQ,EAAE,UAAU,CAAC,cAAc,IAAI,EAAE,CAAC;gBAC1C,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE;gBAC9B,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;gBAC5C,IAAI;gBACJ,UAAU;gBACV,MAAM,EAAE,EAAE,KAAK,SAAS;aACzB,CAAC;YACF,wEAAwE;YACxE,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;YACjI,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAc;QACvB,OAAO;QACP,KAAK;QACL,aAAa,EAAE,QAAQ;QACvB,gBAAgB,EAAE,OAAO;QACzB,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,iBAAiB,EAAE,sBAAsB,CAAC,SAAS,EAAE,KAAK,CAAC;KAC5D,CAAC;IACF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAgCD,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAe,EACf,KAAwB;IAExB,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;SAC1B,WAAW,EAAE;SACb,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IACjD,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;YAAE,SAAS;QACpF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI;YAAE,SAAS;QACvD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI;YAAE,SAAS;QACzD,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,SAAS;QACnG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,MAAM,EAAE,KAAK,CAAC,KAAK;QACnB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;QAC9D,MAAM,EAAE,UAAU;QAClB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAe,EACf,GAAW;IAEX,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACzB,OAAO;QACL,GAAG,KAAK,CAAC,OAAO;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;QAClC,KAAK,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;QACtB,WAAW,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK;QAC7C,SAAS,EAAE,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,MAAM;QAC5C,cAAc,EAAE,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,MAAM;QACpD,eAAe,EAAE,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM;QAC/C,cAAc,EAAE,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM;QAC9C,aAAa,EAAE,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACtD,gBAAgB,EAAE,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAe,EACf,GAAW,EACX,KAA0B;IAE1B,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAwB,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IACxD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACxD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACrD,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtB,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,6EAA6E;IAC7E,0DAA0D;IAC1D,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC;IACrD,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,4CAA4C;IAC1E,OAAO,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/api/requirements.ts"],"names":[],"mappings":"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"}
|