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.
- package/README.md +103 -0
- package/dist/api/delivery-index.d.ts +61 -0
- package/dist/api/delivery-index.d.ts.map +1 -0
- package/dist/api/delivery-index.js +87 -0
- package/dist/api/delivery-index.js.map +1 -0
- package/dist/api/endpoint-manifest-live.d.ts +29 -0
- package/dist/api/endpoint-manifest-live.d.ts.map +1 -0
- package/dist/api/endpoint-manifest-live.js +72 -0
- package/dist/api/endpoint-manifest-live.js.map +1 -0
- package/dist/api/endpoint-manifest.d.ts +107 -0
- package/dist/api/endpoint-manifest.d.ts.map +1 -0
- package/dist/api/endpoint-manifest.js +108 -0
- package/dist/api/endpoint-manifest.js.map +1 -0
- package/dist/api/governance-wiki.d.ts +28 -0
- package/dist/api/governance-wiki.d.ts.map +1 -0
- package/dist/api/governance-wiki.js +97 -0
- package/dist/api/governance-wiki.js.map +1 -0
- package/dist/api/requirements.d.ts +7 -0
- package/dist/api/requirements.d.ts.map +1 -1
- package/dist/api/requirements.js +23 -2
- package/dist/api/requirements.js.map +1 -1
- package/dist/api/routes.d.ts +21 -16
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +129 -12
- package/dist/api/routes.js.map +1 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +106 -5
- package/dist/api/server.js.map +1 -1
- package/dist/campaign/supervision.d.ts +296 -0
- package/dist/campaign/supervision.d.ts.map +1 -0
- package/dist/campaign/supervision.js +515 -0
- package/dist/campaign/supervision.js.map +1 -0
- package/dist/campaigns/plan.d.ts +64 -0
- package/dist/campaigns/plan.d.ts.map +1 -0
- package/dist/campaigns/plan.js +201 -0
- package/dist/campaigns/plan.js.map +1 -0
- package/dist/campaigns/routes.d.ts +28 -0
- package/dist/campaigns/routes.d.ts.map +1 -0
- package/dist/campaigns/routes.js +177 -0
- package/dist/campaigns/routes.js.map +1 -0
- package/dist/cli/index.js +13 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adapter.d.ts +84 -1
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +204 -6
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/deliverable-floor.d.ts +65 -13
- package/dist/core/deliverable-floor.d.ts.map +1 -1
- package/dist/core/deliverable-floor.js +96 -21
- package/dist/core/deliverable-floor.js.map +1 -1
- package/dist/interactive/bridge-pool.d.ts +24 -0
- package/dist/interactive/bridge-pool.d.ts.map +1 -1
- package/dist/interactive/bridge-pool.js +26 -2
- package/dist/interactive/bridge-pool.js.map +1 -1
- package/dist/interactive/edit-events.d.ts +3 -2
- package/dist/interactive/edit-events.d.ts.map +1 -1
- package/dist/interactive/edit-events.js +15 -7
- package/dist/interactive/edit-events.js.map +1 -1
- package/dist/projects/graph-paths.d.ts +32 -2
- package/dist/projects/graph-paths.d.ts.map +1 -1
- package/dist/projects/graph-paths.js +49 -4
- package/dist/projects/graph-paths.js.map +1 -1
- package/dist/projects/graph.d.ts +13 -1
- package/dist/projects/graph.d.ts.map +1 -1
- package/dist/projects/graph.js +73 -19
- package/dist/projects/graph.js.map +1 -1
- package/dist/projects/routes.d.ts +12 -2
- package/dist/projects/routes.d.ts.map +1 -1
- package/dist/projects/routes.js +18 -1
- package/dist/projects/routes.js.map +1 -1
- package/dist/qe/acceptance.d.ts +20 -1
- package/dist/qe/acceptance.d.ts.map +1 -1
- package/dist/qe/acceptance.js +32 -0
- package/dist/qe/acceptance.js.map +1 -1
- package/dist/qe/conformance.d.ts +158 -0
- package/dist/qe/conformance.d.ts.map +1 -0
- package/dist/qe/conformance.js +244 -0
- package/dist/qe/conformance.js.map +1 -0
- package/dist/qe/ledger.d.ts +3 -2
- package/dist/qe/ledger.d.ts.map +1 -1
- package/dist/qe/ledger.js +5 -4
- package/dist/qe/ledger.js.map +1 -1
- package/dist/studio/assets/index-C8rx24F1.js +530 -0
- package/dist/studio/assets/index-CwmIj-f2.css +32 -0
- package/dist/studio/index.html +2 -2
- package/dist/studio/testid-inventory.json +3924 -0
- package/endpoint-manifest.json +704 -0
- package/package.json +8 -5
- package/dist/studio/assets/index-8p8uwCxG.js +0 -530
- 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":"
|
|
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"}
|
package/dist/api/requirements.js
CHANGED
|
@@ -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
|
|
23
|
-
* regeneration and keeps provenance honest
|
|
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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"}
|
package/dist/api/routes.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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. */
|
package/dist/api/routes.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/api/routes.js
CHANGED
|
@@ -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,
|
|
223
|
-
//
|
|
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
|
-
|
|
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`,
|
|
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`,
|
|
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`,
|
|
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
|
-
|
|
1288
|
-
|
|
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
|
|
1646
|
-
//
|
|
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.
|