wicked-crew 0.7.0 → 0.7.2

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 (90) hide show
  1. package/README.md +103 -0
  2. package/dist/api/delivery-index.d.ts +61 -0
  3. package/dist/api/delivery-index.d.ts.map +1 -0
  4. package/dist/api/delivery-index.js +87 -0
  5. package/dist/api/delivery-index.js.map +1 -0
  6. package/dist/api/endpoint-manifest-live.d.ts +29 -0
  7. package/dist/api/endpoint-manifest-live.d.ts.map +1 -0
  8. package/dist/api/endpoint-manifest-live.js +72 -0
  9. package/dist/api/endpoint-manifest-live.js.map +1 -0
  10. package/dist/api/endpoint-manifest.d.ts +107 -0
  11. package/dist/api/endpoint-manifest.d.ts.map +1 -0
  12. package/dist/api/endpoint-manifest.js +108 -0
  13. package/dist/api/endpoint-manifest.js.map +1 -0
  14. package/dist/api/governance-wiki.d.ts +28 -0
  15. package/dist/api/governance-wiki.d.ts.map +1 -0
  16. package/dist/api/governance-wiki.js +97 -0
  17. package/dist/api/governance-wiki.js.map +1 -0
  18. package/dist/api/requirements.d.ts +7 -0
  19. package/dist/api/requirements.d.ts.map +1 -1
  20. package/dist/api/requirements.js +23 -2
  21. package/dist/api/requirements.js.map +1 -1
  22. package/dist/api/routes.d.ts +21 -16
  23. package/dist/api/routes.d.ts.map +1 -1
  24. package/dist/api/routes.js +129 -12
  25. package/dist/api/routes.js.map +1 -1
  26. package/dist/api/server.d.ts.map +1 -1
  27. package/dist/api/server.js +106 -5
  28. package/dist/api/server.js.map +1 -1
  29. package/dist/campaign/supervision.d.ts +296 -0
  30. package/dist/campaign/supervision.d.ts.map +1 -0
  31. package/dist/campaign/supervision.js +515 -0
  32. package/dist/campaign/supervision.js.map +1 -0
  33. package/dist/campaigns/plan.d.ts +64 -0
  34. package/dist/campaigns/plan.d.ts.map +1 -0
  35. package/dist/campaigns/plan.js +201 -0
  36. package/dist/campaigns/plan.js.map +1 -0
  37. package/dist/campaigns/routes.d.ts +28 -0
  38. package/dist/campaigns/routes.d.ts.map +1 -0
  39. package/dist/campaigns/routes.js +177 -0
  40. package/dist/campaigns/routes.js.map +1 -0
  41. package/dist/cli/index.js +13 -4
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/core/adapter.d.ts +84 -1
  44. package/dist/core/adapter.d.ts.map +1 -1
  45. package/dist/core/adapter.js +204 -6
  46. package/dist/core/adapter.js.map +1 -1
  47. package/dist/core/deliverable-floor.d.ts +65 -13
  48. package/dist/core/deliverable-floor.d.ts.map +1 -1
  49. package/dist/core/deliverable-floor.js +96 -21
  50. package/dist/core/deliverable-floor.js.map +1 -1
  51. package/dist/interactive/bridge-pool.d.ts +24 -0
  52. package/dist/interactive/bridge-pool.d.ts.map +1 -1
  53. package/dist/interactive/bridge-pool.js +26 -2
  54. package/dist/interactive/bridge-pool.js.map +1 -1
  55. package/dist/interactive/edit-events.d.ts +3 -2
  56. package/dist/interactive/edit-events.d.ts.map +1 -1
  57. package/dist/interactive/edit-events.js +15 -7
  58. package/dist/interactive/edit-events.js.map +1 -1
  59. package/dist/projects/graph-paths.d.ts +32 -2
  60. package/dist/projects/graph-paths.d.ts.map +1 -1
  61. package/dist/projects/graph-paths.js +49 -4
  62. package/dist/projects/graph-paths.js.map +1 -1
  63. package/dist/projects/graph.d.ts +13 -1
  64. package/dist/projects/graph.d.ts.map +1 -1
  65. package/dist/projects/graph.js +73 -19
  66. package/dist/projects/graph.js.map +1 -1
  67. package/dist/projects/routes.d.ts +12 -2
  68. package/dist/projects/routes.d.ts.map +1 -1
  69. package/dist/projects/routes.js +18 -1
  70. package/dist/projects/routes.js.map +1 -1
  71. package/dist/qe/acceptance.d.ts +20 -1
  72. package/dist/qe/acceptance.d.ts.map +1 -1
  73. package/dist/qe/acceptance.js +32 -0
  74. package/dist/qe/acceptance.js.map +1 -1
  75. package/dist/qe/conformance.d.ts +158 -0
  76. package/dist/qe/conformance.d.ts.map +1 -0
  77. package/dist/qe/conformance.js +244 -0
  78. package/dist/qe/conformance.js.map +1 -0
  79. package/dist/qe/ledger.d.ts +3 -2
  80. package/dist/qe/ledger.d.ts.map +1 -1
  81. package/dist/qe/ledger.js +5 -4
  82. package/dist/qe/ledger.js.map +1 -1
  83. package/dist/studio/assets/index-C8rx24F1.js +530 -0
  84. package/dist/studio/assets/index-CwmIj-f2.css +32 -0
  85. package/dist/studio/index.html +2 -2
  86. package/dist/studio/testid-inventory.json +3924 -0
  87. package/endpoint-manifest.json +704 -0
  88. package/package.json +8 -5
  89. package/dist/studio/assets/index-8p8uwCxG.js +0 -530
  90. package/dist/studio/assets/index-D6S9zUtO.css +0 -32
@@ -0,0 +1,97 @@
1
+ /**
2
+ * The `/api/v1/governance/wiki/*` surface (wiki-mgmt) — the management wire for the graph-backed
3
+ * architecture wiki, so the wiki is VISIBLE (not just queryable): a scoreboard that tells a
4
+ * populated wiki from an ingested-once-and-decaying one, and a meta probe cheap enough for the
5
+ * UI to call on mount so an empty store shows an honest "nothing seeded — here's the runbook"
6
+ * instead of a blank table.
7
+ *
8
+ * Thin by design, like `campaigns/routes.ts`: the scoreboard is computed by wicked-core's
9
+ * governance layer (`wicked-governance::scoreboard`, read-only `open_store_ro` — safe beside the
10
+ * live single-writer daemon); the daemon keeps no shadow wiki state. Error posture mirrors the
11
+ * campaign surface: a build whose engine addon lacks the `governanceScoreboard` binding answers
12
+ * 501 (`GovernanceScoreboardUnsupportedError` — "upgrade the engine"), never 400 ("fix your
13
+ * request").
14
+ *
15
+ * Rule/ruleset BROWSE and RETIRE deliberately live elsewhere — this module adds no second door:
16
+ * `GET /governance/rules` (facet-filterable, retired rows flagged) is the browse surface and
17
+ * `DELETE /governance/rules/:id` (retire-not-delete, FINDING-038) is the kill switch, both in
18
+ * `api/routes.ts`.
19
+ */
20
+ import { GovernanceScoreboardUnsupportedError } from '../core/adapter.js';
21
+ import { API_PREFIX } from './api-prefix.js';
22
+ const V = API_PREFIX;
23
+ /**
24
+ * The authoring guide the honest empty state points at: the AW-13 seed runbook — frontmatter
25
+ * conventions, the `seed_wiki.py` driver, and the `wicked-core rules` ingest/fanout/relink CLIs.
26
+ */
27
+ export const WIKI_AUTHORING_DOC = 'https://github.com/mikeparcewski/wicked-core/blob/main/crates/wicked-governance/seed/README.md';
28
+ function message(err) {
29
+ return err instanceof Error ? err.message : String(err);
30
+ }
31
+ export function registerGovernanceWikiRoutes(app, adapter) {
32
+ // The AW-23 population/connection scoreboard. `?docsRoot=` is the OPTIONAL docs root the
33
+ // typing half needs (the same directory `rules ingest --dir` consumed — enforcement_class
34
+ // lives in doc frontmatter, never on the rule node); omitted, the scoreboard still answers
35
+ // 200 with `typing.available: false` and the reason in-band — a wiki with no local docs
36
+ // checkout is a normal deployment, not an error.
37
+ app.get(`${V}/governance/wiki/scoreboard`, {
38
+ config: {
39
+ manifest: {
40
+ responseType: '{ scoreboard: GovernanceScoreboard }',
41
+ // 501: the installed engine addon predates the governanceScoreboard binding
42
+ // (wicked-core-ts < 0.7.4) — upgrade the engine, the request was already correct.
43
+ statusCodes: [200, 500, 501],
44
+ },
45
+ },
46
+ }, async (req, reply) => {
47
+ // Fastify parses a repeated `?docsRoot=a&docsRoot=b` into an array — take the first, and
48
+ // TRIM so a whitespace-only value means "no docs root" rather than a doomed doc scan.
49
+ const raw = req.query.docsRoot;
50
+ const first = Array.isArray(raw) ? raw[0] : raw;
51
+ const docsRoot = first?.trim() || undefined;
52
+ try {
53
+ const scoreboard = await adapter.governanceScoreboard(docsRoot);
54
+ return { scoreboard };
55
+ }
56
+ catch (err) {
57
+ if (err instanceof GovernanceScoreboardUnsupportedError) {
58
+ return reply.code(501).send({ error: err.message });
59
+ }
60
+ // An engine/store failure is OURS, not the caller's — there is nothing to fix in a
61
+ // bare GET, so nothing here maps to 400.
62
+ return reply.code(500).send({ error: message(err) });
63
+ }
64
+ });
65
+ // The wiki's honest empty-state signal. Works on EVERY addon (listConformanceRules is a
66
+ // required binding since crew#40), so the UI can always distinguish "nothing seeded — run the
67
+ // seed runbook" from "the engine can't tell me": `ruleset_count` is `null` (never a fabricated
68
+ // 0) on a build without the listRuleSets binding, and `scoreboard_available` says up front
69
+ // whether the scoreboard route will answer 200 here.
70
+ app.get(`${V}/governance/wiki/meta`, {
71
+ config: {
72
+ manifest: {
73
+ responseType: '{ meta: GovernanceWikiMeta }',
74
+ statusCodes: [200],
75
+ },
76
+ },
77
+ },
78
+ // Wrapped per crew house style — campaigns/rules/scoreboard all wrap, and studio's
79
+ // Wiki page reads `body.meta` (a bare seeded:false would read as "cannot tell").
80
+ async () => {
81
+ // NOTE: pre-0.7.4 addons funnel listConformanceRules through recall, which skips retired
82
+ // rows — so `rule_count` counts the LISTABLE rules. That is the right number for "is
83
+ // anything here": a store holding only retired rules has nothing recallable to show.
84
+ const rules = await adapter.listConformanceRules();
85
+ const rulesetCount = await adapter.countRuleSets();
86
+ return {
87
+ meta: {
88
+ seeded: rules.length > 0 || (rulesetCount ?? 0) > 0,
89
+ ruleset_count: rulesetCount,
90
+ rule_count: rules.length,
91
+ scoreboard_available: adapter.wikiScoreboardSupported(),
92
+ doc: WIKI_AUTHORING_DOC,
93
+ },
94
+ };
95
+ });
96
+ }
97
+ //# sourceMappingURL=governance-wiki.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governance-wiki.js","sourceRoot":"","sources":["../../src/api/governance-wiki.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,13 @@ export interface RequirementsPage {
57
57
  * this the caller cannot tell which one it is looking at. (FINDING-065)
58
58
  */
59
59
  source: 'store' | 'artifact';
60
+ /**
61
+ * Override keys that matched no requirement in this corpus — operator edits stranded by an
62
+ * estate id-scheme migration (method/field SymbolIds re-mint on a full re-extract) or by an
63
+ * artifact regeneration that renamed their domain/reqId. Counted so the edits' existence is
64
+ * never silent; deliberately NOT re-keyed (module header says why).
65
+ */
66
+ orphanedOverrides: number;
60
67
  }
61
68
  /** Tokenized AND-match: every whitespace-separated term must appear in the haystack. */
62
69
  export declare function listRequirements(repo: RepoEntry, query: RequirementsQuery): Promise<RequirementsPage | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/api/requirements.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAmBlD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,aAAa,CAAC;AAE/D;;;4CAG4C;AAC5C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAM5D;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,gBAAgB,EAAE,OAAO,EAAE,CAAC;CAC7B;AAoQD,MAAM,WAAW,iBAAiB;IAChC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;;;;;;OAMG;IACH,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;CAC9B;AAED,wFAAwF;AACxF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAyBlC;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmBnC;AAED,2FAA2F;AAC3F,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmBnC"}
1
+ {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/api/requirements.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAmBlD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,aAAa,CAAC;AAE/D;;;4CAG4C;AAC5C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAM5D;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,0FAA0F;IAC1F,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,EAAE,CAAC;IACzB,gBAAgB,EAAE,OAAO,EAAE,CAAC;CAC7B;AAkRD,MAAM,WAAW,iBAAiB;IAChC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;;;;;;OAMG;IACH,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7B;;;;;OAKG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wFAAwF;AACxF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA0BlC;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmBnC;AAED,2FAA2F;AAC3F,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmBnC"}
@@ -19,8 +19,18 @@
19
19
  * Why an OVERRIDES sidecar: the artifact is DERIVED (regenerated from the estate
20
20
  * store), so operator edits written into it would be clobbered on the next
21
21
  * `domain-graph` run. Edits live in `requirements_overrides.json` beside the artifact,
22
- * keyed `domain::reqId`, and are merged at read time — the overlay survives
23
- * regeneration and keeps provenance honest (`riskSource: operator` vs `data`).
22
+ * keyed `domain::reqId` (store-built indexes key by the estate SymbolId), and are
23
+ * merged at read time — the overlay survives regeneration and keeps provenance honest
24
+ * (`riskSource: operator` vs `data`).
25
+ *
26
+ * ORPHANED OVERRIDES: an override key matches by exact string, so a key the corpus no
27
+ * longer mints simply stops matching — silently. That happens on an estate id-scheme
28
+ * migration (a full re-extract re-keys method/field SymbolIds; module-level ids
29
+ * survive) and on artifact regeneration that renames a domain or reqId. The index
30
+ * therefore COUNTS the keys that matched no row and surfaces the count as
31
+ * `orphanedOverrides` on every page, so the edits' existence is never invisible. It
32
+ * does NOT re-key them: the old→new mapping is estate's to define, and guessing it
33
+ * here would attach an operator's risk note to the wrong symbol.
24
34
  */
25
35
  import { readFile, writeFile, rename, mkdir, stat } from 'node:fs/promises';
26
36
  import { dirname } from 'node:path';
@@ -38,6 +48,14 @@ export function categoryOf(file) {
38
48
  return 'config-data';
39
49
  return 'functional';
40
50
  }
51
+ /** Keys in the overrides sidecar that no corpus row claimed — counted, never dropped silently. */
52
+ function countOrphanedOverrides(overrides, byKey) {
53
+ let orphaned = 0;
54
+ for (const key of Object.keys(overrides))
55
+ if (!byKey.has(key))
56
+ orphaned += 1;
57
+ return orphaned;
58
+ }
41
59
  const RISK_RE = /risk/i;
42
60
  const RISK_PREFIX = '[RISK]';
43
61
  /** WAL churn during extraction touches the db every few seconds — don't rebuild a
@@ -158,6 +176,7 @@ async function buildStoreIndex(repo, sourceMtime, ovMtime) {
158
176
  overridesMtimeMs: ovMtime,
159
177
  builtAtMs: Date.now(),
160
178
  total: entries.length,
179
+ orphanedOverrides: countOrphanedOverrides(overrides, byKey),
161
180
  };
162
181
  }
163
182
  async function buildIndex(repo) {
@@ -241,6 +260,7 @@ async function buildIndex(repo) {
241
260
  overridesMtimeMs: ovMtime,
242
261
  builtAtMs: Date.now(),
243
262
  total: entries.length,
263
+ orphanedOverrides: countOrphanedOverrides(overrides, byKey),
244
264
  };
245
265
  cache.set(repo.root_path, index);
246
266
  return index;
@@ -276,6 +296,7 @@ export async function listRequirements(repo, query) {
276
296
  limit: query.limit,
277
297
  items: matched.slice(query.offset, query.offset + query.limit),
278
298
  source: index.fromStore ? 'store' : 'artifact',
299
+ orphanedOverrides: index.orphanedOverrides,
279
300
  };
280
301
  }
281
302
  export async function getRequirement(repo, key) {
@@ -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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"}
@@ -10,6 +10,7 @@ import { InteractiveBridgePool } from '../interactive/bridge-pool.js';
10
10
  import { AuditLog } from './audit.js';
11
11
  import { RetryIndex } from './retry-index.js';
12
12
  import { GuidanceIndex } from './guidance-index.js';
13
+ import { DeliveryIndex } from './delivery-index.js';
13
14
  import { type AuthMode } from './auth.js';
14
15
  export { API_PREFIX } from './api-prefix.js';
15
16
  /**
@@ -46,48 +47,48 @@ export declare const LaunchSchema: z.ZodEffects<z.ZodObject<{
46
47
  retryOf: z.ZodOptional<z.ZodString>;
47
48
  }, "strict", z.ZodTypeAny, {
48
49
  problem: string;
49
- retryOf?: string | undefined;
50
50
  deliver?: "pr" | undefined;
51
51
  projectId?: string | undefined;
52
- sessionId?: string | undefined;
52
+ workflow?: string | undefined;
53
+ repoRef?: string | undefined;
53
54
  clisJson?: string | undefined;
55
+ retryOf?: string | undefined;
56
+ sessionId?: string | undefined;
54
57
  entityMode?: "shared" | "isolated" | undefined;
55
58
  humanConfirm?: string | undefined;
56
- repoRef?: string | undefined;
57
- workflow?: string | undefined;
58
59
  }, {
59
60
  problem: string;
60
- retryOf?: string | undefined;
61
61
  deliver?: "pr" | undefined;
62
62
  projectId?: string | undefined;
63
- sessionId?: string | undefined;
63
+ workflow?: string | undefined;
64
+ repoRef?: string | undefined;
64
65
  clisJson?: string | undefined;
66
+ retryOf?: string | undefined;
67
+ sessionId?: string | undefined;
65
68
  entityMode?: "shared" | "isolated" | undefined;
66
69
  humanConfirm?: string | undefined;
67
- repoRef?: string | undefined;
68
- workflow?: string | undefined;
69
70
  }>, {
70
71
  problem: string;
71
- retryOf?: string | undefined;
72
72
  deliver?: "pr" | undefined;
73
73
  projectId?: string | undefined;
74
- sessionId?: string | undefined;
74
+ workflow?: string | undefined;
75
+ repoRef?: string | undefined;
75
76
  clisJson?: string | undefined;
77
+ retryOf?: string | undefined;
78
+ sessionId?: string | undefined;
76
79
  entityMode?: "shared" | "isolated" | undefined;
77
80
  humanConfirm?: string | undefined;
78
- repoRef?: string | undefined;
79
- workflow?: string | undefined;
80
81
  }, {
81
82
  problem: string;
82
- retryOf?: string | undefined;
83
83
  deliver?: "pr" | undefined;
84
84
  projectId?: string | undefined;
85
- sessionId?: string | undefined;
85
+ workflow?: string | undefined;
86
+ repoRef?: string | undefined;
86
87
  clisJson?: string | undefined;
88
+ retryOf?: string | undefined;
89
+ sessionId?: string | undefined;
87
90
  entityMode?: "shared" | "isolated" | undefined;
88
91
  humanConfirm?: string | undefined;
89
- repoRef?: string | undefined;
90
- workflow?: string | undefined;
91
92
  }>;
92
93
  export declare const GateSchema: z.ZodObject<{
93
94
  approve: z.ZodBoolean;
@@ -157,6 +158,10 @@ export interface RuntimeDeps {
157
158
  /** Run→operator-guidance index (CREW-UX-7) — `createServer` hydrates one from the audit trail
158
159
  * so a restarted daemon still echoes `guidance`; a directly-driven route set gets a fresh one. */
159
160
  guidanceIndex?: GuidanceIndex;
161
+ /** Run→delivered-PR index (CREW-UX-8, crew#321) — `createServer` hydrates one from the audit
162
+ * trail so a restarted daemon still echoes `delivery`; a directly-driven route set gets a
163
+ * fresh one. */
164
+ deliveryIndex?: DeliveryIndex;
160
165
  openWithOs?: (target: string) => Promise<void>;
161
166
  /** Seat sign-in presence probe (seat sign-in) — injectable so route tests never read the
162
167
  * developer's real dotfiles. Defaults to the file/env heuristic in seat-signin.ts. */
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAwB,WAAW,EAAkD,MAAM,oBAAoB,CAAC;AAEvH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAWrD,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,OAAO,EAAe,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAInF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAyF7C;;;;;;;;;;;;GAYG;AAIH,eAAO,MAAM,YAAY;;;;;;;;IAQvB;+FAC2F;;IAE3F;;wFAEoF;;IAEpF;;0FAEsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKtF,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;EAGZ,CAAC;AAEZ;;yEAEyE;AACzE,eAAO,MAAM,cAAc;;;;;;EAEhB,CAAC;AAUZ,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAQpB,CAAC;AAOZ,4FAA4F;AAC5F,eAAO,MAAM,cAAc;;;;;;;;;EAGhB,CAAC;AAwBZ,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;oGACgG;IAChG,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;uGACmG;IACnG,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;2FACuF;IACvF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IAC1E;;0DAEsD;IACtD,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;CAC5C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAIlC,YAAY,GAAE,WAA+B,EAG7C,QAAQ,GAAE,iBAAqF,EAK/F,QAAQ,GAAE,YAA0D,EAGpE,OAAO,GAAE,WAAgB,GACxB,IAAI,CAqtDN"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,EAAwB,WAAW,EAAkD,MAAM,oBAAoB,CAAC;AAEvH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAWrD,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAItF,OAAO,EAAe,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAInF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAgG7C;;;;;;;;;;;;GAYG;AAIH,eAAO,MAAM,YAAY;;;;;;;;IAQvB;+FAC2F;;IAE3F;;wFAEoF;;IAEpF;;0FAEsF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKtF,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;EAGZ,CAAC;AAEZ;;yEAEyE;AACzE,eAAO,MAAM,cAAc;;;;;;EAEhB,CAAC;AAUZ,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAQpB,CAAC;AAOZ,4FAA4F;AAC5F,eAAO,MAAM,cAAc;;;;;;;;;EAGhB,CAAC;AAwBZ,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B;oGACgG;IAChG,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;uGACmG;IACnG,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;qBAEiB;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C;2FACuF;IACvF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;IAC1E;;0DAEsD;IACtD,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;CAC5C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,EAIlC,YAAY,GAAE,WAA+B,EAG7C,QAAQ,GAAE,iBAAqF,EAK/F,QAAQ,GAAE,YAA0D,EAGpE,OAAO,GAAE,WAAgB,GACxB,IAAI,CA41DN"}
@@ -18,6 +18,8 @@ import { allowedRootsFor, isInsideRoot, openWithSystemDefault } from './open-pat
18
18
  import { InvalidDiffBaseError, NotARegularFileError, UnresolvableDiffBaseError, readFileCapped, worktreeDiff, } from './run-files.js';
19
19
  import { resolveProjectGraphBinding } from '../projects/graph.js';
20
20
  import { registerProjectRoutes } from '../projects/routes.js';
21
+ import { registerCampaignRoutes } from '../campaigns/routes.js';
22
+ import { registerGovernanceWikiRoutes } from './governance-wiki.js';
21
23
  import { ProjectSettingsStore } from '../projects/settings.js';
22
24
  import { boundOrigin, InteractiveBridgePool } from '../interactive/bridge-pool.js';
23
25
  import { registerInteractiveProxy } from '../interactive/proxy-routes.js';
@@ -26,6 +28,7 @@ import { MEMBERSHIP_ATTACHED, membershipAttachedKey } from '../projects/events.j
26
28
  import { AuditLog } from './audit.js';
27
29
  import { RetryIndex } from './retry-index.js';
28
30
  import { GuidanceIndex } from './guidance-index.js';
31
+ import { DeliveryIndex } from './delivery-index.js';
29
32
  import { LOCAL_ACTOR } from './auth.js';
30
33
  // Re-exported so existing `import { API_PREFIX } from './routes.js'` callers keep working; the
31
34
  // value lives in the leaf module api-prefix.ts to keep unit-output.ts out of this file's cycle.
@@ -73,6 +76,12 @@ function invalidBody(err, what) {
73
76
  : what;
74
77
  return { error, details: err.issues };
75
78
  }
79
+ // Closed facet vocabularies for the `GET /governance/rules` browse filters (wiki-mgmt) — the
80
+ // wire contract's `RuleBrowseQuery`. Sets, not zod: the query is otherwise free-form and only
81
+ // these three facets have a vocabulary to enforce.
82
+ const RULE_SEVERITIES = new Set(['info', 'warn', 'error', 'critical']);
83
+ const RULE_TYPES = new Set(['pattern', 'policy']);
84
+ const RULE_STATUSES = new Set(['active', 'retired', 'all']);
76
85
  // Repo names become directory components under ~/.wicked/repos/ — reject anything
77
86
  // that would allow path traversal (slashes, dots-only segments, control chars).
78
87
  const SAFE_REPO_NAME = /^[a-zA-Z0-9][a-zA-Z0-9._-]*$/;
@@ -217,10 +226,12 @@ runtime = {}) {
217
226
  const signedIn = runtime.signedIn ?? signedInHeuristic;
218
227
  const retryIndex = runtime.retryIndex ?? new RetryIndex();
219
228
  const guidanceIndex = runtime.guidanceIndex ?? new GuidanceIndex();
229
+ const deliveryIndex = runtime.deliveryIndex ?? new DeliveryIndex();
220
230
  // The run-DTO joins (DES-UX-001 §8.2/§8.3, DES-UX-002 §7.2): `project_id` from the membership
221
231
  // record — `null` = genuinely unfiled, so the field is ALWAYS present on served runs —
222
- // `retry_of` from the lineage index, and `guidance` from the guidance index, each set only
223
- // when known (absent, never null, spells "not a retry" / "no note").
232
+ // `retry_of` from the lineage index, `guidance` from the guidance index, and `delivery`
233
+ // from the delivery index (CREW-UX-8, crew#321), each set only when known (absent, never
234
+ // null, spells "not a retry" / "no note" / "delivered nothing").
224
235
  // Applied at DTO assembly on exactly the two endpoints that serve the run DTO
225
236
  // (GET /runs + GET /runs/:id); the internal sessionsDetail() consumers are untouched.
226
237
  const decorateRun = (view) => {
@@ -231,6 +242,9 @@ runtime = {}) {
231
242
  const guidance = guidanceIndex.guidanceFor(view.session.id);
232
243
  if (guidance !== undefined)
233
244
  view.session.guidance = guidance;
245
+ const delivery = deliveryIndex.deliveryFor(view.session.id);
246
+ if (delivery !== undefined)
247
+ view.session.delivery = delivery;
234
248
  return view;
235
249
  };
236
250
  // Resolved ONCE and shared by the project routes (which read/write `interactiveRoot`) and the
@@ -242,7 +256,12 @@ runtime = {}) {
242
256
  // still gets the ONE actor shape via this accessor.
243
257
  const actorOf = (req) => req.actor ?? LOCAL_ACTOR;
244
258
  // Liveness — also proves the actor + event pump are up.
245
- app.get(`${V}/health`, async () => {
259
+ // `config.manifest` on the routes below (TH-11): the declaration channel the endpoint manifest
260
+ // reads — type names bind to `wicked-crew-api-types` exports where one exists, structural
261
+ // spellings where the contract has no name, statusCodes list every code the route answers on
262
+ // purpose. Declared on the highest-traffic run-lifecycle routes first; the manifest records
263
+ // null / [] for the rest ("where declared", never invented). See src/api/endpoint-manifest.ts.
264
+ app.get(`${V}/health`, { config: { manifest: { statusCodes: [200] } } }, async () => {
246
265
  const ping = await adapter.ping();
247
266
  return { status: 'ok', version: PKG_VERSION, ping };
248
267
  });
@@ -542,7 +561,17 @@ runtime = {}) {
542
561
  });
543
562
  // Launch a run (replaces POST /sessions). `clisJson` defaults to the roster;
544
563
  // `sessionId` is minted if the client omits it.
545
- app.post(`${V}/runs`, async (req, reply) => {
564
+ app.post(`${V}/runs`, {
565
+ config: {
566
+ manifest: {
567
+ requestType: 'LaunchRunBody',
568
+ responseType: '{ runId: string }',
569
+ // 404/409: unknown project / archived-or-synthesized project + busy engine (see the
570
+ // catch below); 400: zod reject or a retryOf naming no existing run.
571
+ statusCodes: [201, 400, 404, 409],
572
+ },
573
+ },
574
+ }, async (req, reply) => {
546
575
  const parsed = LaunchSchema.safeParse(req.body);
547
576
  if (!parsed.success) {
548
577
  return reply.code(400).send(invalidBody(parsed.error, 'Invalid request body'));
@@ -636,7 +665,7 @@ runtime = {}) {
636
665
  });
637
666
  // Run list (replaces GET /sessions). Actionable-first; reconciles the gate and elicitation caches
638
667
  // so that terminal-run entries are pruned even when their terminal CoreEvent was missed.
639
- app.get(`${V}/runs`, async (req) => {
668
+ app.get(`${V}/runs`, { config: { manifest: { responseType: '{ runs: SessionView[] }', statusCodes: [200] } } }, async (req) => {
640
669
  const views = await adapter.sessionsDetail();
641
670
  gateCache.reconcile(views);
642
671
  elicitationCache.reconcile(views);
@@ -705,7 +734,7 @@ runtime = {}) {
705
734
  return { results, archived: results.filter((r) => r.ok).length };
706
735
  });
707
736
  // One run's detail.
708
- app.get(`${V}/runs/:id`, async (req, reply) => {
737
+ app.get(`${V}/runs/:id`, { config: { manifest: { responseType: '{ run: SessionView }', statusCodes: [200, 404] } } }, async (req, reply) => {
709
738
  const { id } = req.params;
710
739
  const views = await adapter.sessionsDetail();
711
740
  const run = views.find((v) => v.session.id === id);
@@ -724,7 +753,15 @@ runtime = {}) {
724
753
  // operator-visible context only; the amend text at gate decision (`POST /runs/:id/gate`)
725
754
  // stays the ONE injection point. The studio pre-populates its steer textarea from this note,
726
755
  // and injection still happens only through the governed amend.
727
- app.put(`${V}/runs/:id/guidance`, async (req, reply) => {
756
+ app.put(`${V}/runs/:id/guidance`, {
757
+ config: {
758
+ manifest: {
759
+ requestType: 'SetGuidanceBody',
760
+ responseType: 'SetGuidanceResult',
761
+ statusCodes: [200, 400, 404],
762
+ },
763
+ },
764
+ }, async (req, reply) => {
728
765
  const { id } = req.params;
729
766
  const parsed = GuidanceSchema.safeParse(req.body);
730
767
  if (!parsed.success) {
@@ -954,10 +991,25 @@ runtime = {}) {
954
991
  workflow,
955
992
  gateEvents: qeGateEvents,
956
993
  ...(qeRunId !== undefined && qeRunId !== '' ? { qeRunId } : {}),
994
+ // AW-14 (arch-R13a + R16): the conformance section reads the same wires the standalone
995
+ // `/governance/claims` and `/runs/:id/events` routes serve, but run-scoped and resolved
996
+ // deny-dominates BESIDE the QE gate — so a wiki-rule violation and an unenforced governed
997
+ // unit both appear on the page humans actually look at.
998
+ claims: () => adapter.listConformanceClaims(),
999
+ events: (rid) => adapter.runEvents(rid),
957
1000
  });
958
1001
  });
959
1002
  // The steering gate (§11.1). approve+amend = approve-with-steer; approve:false = reject (cancels).
960
- app.post(`${V}/runs/:id/gate`, async (req, reply) => {
1003
+ app.post(`${V}/runs/:id/gate`, {
1004
+ config: {
1005
+ manifest: {
1006
+ requestType: 'GateDecision',
1007
+ responseType: '{ status: SessionStatus }',
1008
+ // 409 twice over: a run not awaiting a human gate, and an engine refusal at confirm.
1009
+ statusCodes: [200, 400, 404, 409],
1010
+ },
1011
+ },
1012
+ }, async (req, reply) => {
961
1013
  const { id } = req.params;
962
1014
  const parsed = GateSchema.safeParse(req.body);
963
1015
  if (!parsed.success) {
@@ -1284,8 +1336,53 @@ runtime = {}) {
1284
1336
  const policies = await adapter.listPolicies();
1285
1337
  return { policies };
1286
1338
  });
1287
- app.get(`${V}/governance/rules`, async () => {
1288
- const rules = await adapter.listConformanceRules();
1339
+ // The wiki BROWSE surface (wiki-mgmt): facet filters over the listed rows. EXACT matches by
1340
+ // design — unlike `/governance/rules/preview`, whose recall semantics treat an absent rule
1341
+ // facet as a wildcard (enforcement's question: "which rules apply HERE"), browse answers
1342
+ // "show me the rules TAGGED `layer=api`", and a wildcard rule flooding every layer filter
1343
+ // would bury the tagged ones. `?status=` keeps the AW-24 kill switch visible: every row keeps
1344
+ // its `retired` flag, and `retired`/`active` narrow to one side. Default is `all` — the
1345
+ // route's historical behavior, though pre-0.7.4 addons funnel the listing through recall and
1346
+ // return active rows only (the engine's fact to fix, not this filter's to mask).
1347
+ app.get(`${V}/governance/rules`, {
1348
+ config: {
1349
+ manifest: {
1350
+ responseType: '{ rules: ConformanceRule[] }',
1351
+ statusCodes: [200, 400],
1352
+ },
1353
+ },
1354
+ }, async (req, reply) => {
1355
+ const q = req.query;
1356
+ // Same normalization as `repoParam` below: first value of a repeated param, trimmed, and
1357
+ // an empty/whitespace value means "facet not given" rather than a filter matching nothing.
1358
+ const facet = (k) => {
1359
+ const raw = q[k];
1360
+ const first = Array.isArray(raw) ? raw[0] : raw;
1361
+ const trimmed = first?.trim();
1362
+ return trimmed ? trimmed : undefined;
1363
+ };
1364
+ // Closed vocabularies reject loudly (400 names the valid set): `?severity=hihg` silently
1365
+ // matching nothing would read as "no critical rules" — an empty answer to a question the
1366
+ // caller didn't ask.
1367
+ const invalid = (name, got, valid) => reply.code(400).send({ error: `${name} must be one of ${valid} (got \`${got}\`)` });
1368
+ const severity = facet('severity');
1369
+ if (severity !== undefined && !RULE_SEVERITIES.has(severity)) {
1370
+ return invalid('severity', severity, 'info|warn|error|critical');
1371
+ }
1372
+ const ruleType = facet('rule_type');
1373
+ if (ruleType !== undefined && !RULE_TYPES.has(ruleType)) {
1374
+ return invalid('rule_type', ruleType, 'pattern|policy');
1375
+ }
1376
+ const status = facet('status') ?? 'all';
1377
+ if (!RULE_STATUSES.has(status)) {
1378
+ return invalid('status', status, 'active|retired|all');
1379
+ }
1380
+ const layer = facet('layer');
1381
+ const rules = (await adapter.listConformanceRules()).filter((r) => (severity === undefined || r.severity === severity) &&
1382
+ (ruleType === undefined || r.rule_type === ruleType) &&
1383
+ (layer === undefined || r.targets.layer === layer) &&
1384
+ // `retired` is absent on rows written before the field existed, which read as active.
1385
+ (status === 'all' || (status === 'retired') === (r.retired === true)));
1289
1386
  return { rules };
1290
1387
  });
1291
1388
  app.get(`${V}/governance/claims`, async () => {
@@ -1544,6 +1641,12 @@ runtime = {}) {
1544
1641
  if (page === null) {
1545
1642
  return reply.code(404).send({ error: 'requirements_graph.json not generated for this repo yet' });
1546
1643
  }
1644
+ // Overrides keyed by ids the corpus no longer mints (an estate id-scheme migration re-keys
1645
+ // method/field SymbolIds) would otherwise vanish without a trace — the count is on the page
1646
+ // AND in the log, because the operator who edited them is not the one reading the response.
1647
+ if ((page.orphanedOverrides ?? 0) > 0) {
1648
+ req.log.warn({ repo: id, orphanedOverrides: page.orphanedOverrides }, 'requirements_overrides.json holds keys matching no requirement — stale after a re-index/migration; re-run the annotation workflow, then re-apply or delete them');
1649
+ }
1547
1650
  return page;
1548
1651
  });
1549
1652
  app.get(`${V}/repos/:id/requirements/:key`, async (req, reply) => {
@@ -1642,8 +1745,10 @@ runtime = {}) {
1642
1745
  });
1643
1746
  // ── Git history (last 20 commits via git log) ─────────────────────────────
1644
1747
  // ── Blast radius for a symbol (via wicked-estate blast-radius --json).
1645
- // Carries the honesty contract through: dependents PLUS the unresolved-call
1646
- // count — an empty dependents list must never read as "safe to change".
1748
+ // Carries the honesty contract through: dependents PLUS the count of references
1749
+ // no resolver bound (ENGINE-CONTRACT §2.1 — repeat sites of an already-bound
1750
+ // relationship are not counted, so 0 is legitimate for a fully-resolved symbol).
1751
+ // When non-zero, an empty dependents list must never read as "safe to change".
1647
1752
  app.get(`${V}/repos/:id/graph/blast-radius`, async (req, reply) => {
1648
1753
  const { id } = req.params;
1649
1754
  const q = req.query;
@@ -1881,6 +1986,18 @@ runtime = {}) {
1881
1986
  });
1882
1987
  // ── Projects (DES-PROJECT-001) — the 9-route experience-plane surface ────────
1883
1988
  registerProjectRoutes(app, adapter, { ...projects, settings: projectSettings }, security);
1989
+ // ── Campaigns (crew#342 + TH-9) — the engine's durable Run-DAG scheduler over REST ──────────
1990
+ // Progress streams as campaign* CoreEvents on the existing allowlist-free /ws relay; these
1991
+ // routes are launch/resume/cancel + the reads a scoreboard builds from.
1992
+ registerCampaignRoutes(app, adapter, {
1993
+ audit,
1994
+ actorOf,
1995
+ roster: () => CoreAdapter.roster(),
1996
+ });
1997
+ // ── Governance wiki management (wiki-mgmt) — scoreboard + honest empty-state meta ──────────
1998
+ // Browse (`GET /governance/rules` + facets) and retire (`DELETE /governance/rules/:id`) stay
1999
+ // ABOVE with the other governance routes; this registers only the wiki-specific reads.
2000
+ registerGovernanceWikiRoutes(app, adapter);
1884
2001
  // ── The wicked-interactive bridge, reverse-proxied (DES-MERGE-001 §5.3/§7.2) ──
1885
2002
  // Mounted BESIDE the routes above and under the same `${V}` prefix, so it inherits one
1886
2003
  // origin, one auth hook, and one CORS posture — the whole point of slice 1.