@shrkcrft/inspector 0.1.0-alpha.2 → 0.1.0-alpha.20
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/dist/agent-brief.d.ts.map +1 -1
- package/dist/agent-brief.js +59 -10
- package/dist/agent-contract-gate.d.ts.map +1 -1
- package/dist/agent-contract-gate.js +25 -2
- package/dist/agent-instructions.d.ts.map +1 -1
- package/dist/agent-instructions.js +11 -0
- package/dist/agent-task-prep.d.ts.map +1 -1
- package/dist/agent-task-prep.js +1 -3
- package/dist/ai-readiness.d.ts +84 -9
- package/dist/ai-readiness.d.ts.map +1 -1
- package/dist/ai-readiness.js +181 -35
- package/dist/apply-dispatch-trace.d.ts +1 -2
- package/dist/apply-dispatch-trace.d.ts.map +1 -1
- package/dist/apply-dispatch-trace.js +0 -9
- package/dist/area-explore.d.ts.map +1 -1
- package/dist/area-explore.js +4 -6
- package/dist/area-map.d.ts +0 -5
- package/dist/area-map.d.ts.map +1 -1
- package/dist/area-map.js +0 -10
- package/dist/changed-preflight.d.ts +7 -0
- package/dist/changed-preflight.d.ts.map +1 -1
- package/dist/changed-preflight.js +56 -9
- package/dist/changes-summary.d.ts.map +1 -1
- package/dist/changes-summary.js +10 -1
- package/dist/check-guardrail-globs.d.ts +16 -0
- package/dist/check-guardrail-globs.d.ts.map +1 -0
- package/dist/check-guardrail-globs.js +38 -0
- package/dist/code-intelligence-doctor.d.ts +21 -0
- package/dist/code-intelligence-doctor.d.ts.map +1 -0
- package/dist/code-intelligence-doctor.js +985 -0
- package/dist/command-recommender.d.ts.map +1 -1
- package/dist/command-recommender.js +23 -0
- package/dist/compliance-profiles.js +1 -1
- package/dist/construct-adoption-diff.d.ts.map +1 -1
- package/dist/construct-adoption-diff.js +2 -1
- package/dist/construct-adoption.d.ts.map +1 -1
- package/dist/construct-adoption.js +10 -11
- package/dist/construct-inference.d.ts.map +1 -1
- package/dist/construct-inference.js +5 -2
- package/dist/construct-registry.d.ts.map +1 -1
- package/dist/construct-registry.js +2 -10
- package/dist/contract-file-rule.d.ts +8 -0
- package/dist/contract-file-rule.d.ts.map +1 -1
- package/dist/contract-file-rule.js +8 -3
- package/dist/contract-template-registry.d.ts.map +1 -1
- package/dist/contract-template-registry.js +2 -10
- package/dist/contradictions.d.ts +8 -1
- package/dist/contradictions.d.ts.map +1 -1
- package/dist/contradictions.js +37 -35
- package/dist/convention-registry.d.ts.map +1 -1
- package/dist/convention-registry.js +2 -10
- package/dist/coverage-report.d.ts.map +1 -1
- package/dist/coverage-report.js +14 -1
- package/dist/dashboard/dashboard-knowledge.d.ts +8 -0
- package/dist/dashboard/dashboard-knowledge.d.ts.map +1 -0
- package/dist/dashboard/dashboard-knowledge.js +259 -0
- package/dist/decision-records.d.ts.map +1 -1
- package/dist/decision-records.js +5 -10
- package/dist/delegate-catalog.d.ts +45 -0
- package/dist/delegate-catalog.d.ts.map +1 -0
- package/dist/delegate-catalog.js +50 -0
- package/dist/delegate-doctor.d.ts +15 -0
- package/dist/delegate-doctor.d.ts.map +1 -0
- package/dist/delegate-doctor.js +36 -0
- package/dist/delegate-pack-recipes.d.ts +29 -0
- package/dist/delegate-pack-recipes.d.ts.map +1 -0
- package/dist/delegate-pack-recipes.js +77 -0
- package/dist/demo-script.d.ts +0 -1
- package/dist/demo-script.d.ts.map +1 -1
- package/dist/demo-script.js +0 -43
- package/dist/docs-check.js +1 -1
- package/dist/drift-baseline.d.ts.map +1 -1
- package/dist/drift-baseline.js +5 -2
- package/dist/feedback-ingestion.d.ts.map +1 -1
- package/dist/feedback-ingestion.js +2 -16
- package/dist/git-helpers.d.ts +15 -0
- package/dist/git-helpers.d.ts.map +1 -1
- package/dist/git-helpers.js +51 -4
- package/dist/helper-registry.d.ts +27 -54
- package/dist/helper-registry.d.ts.map +1 -1
- package/dist/helper-registry.js +16 -517
- package/dist/impact-analysis.d.ts.map +1 -1
- package/dist/impact-analysis.js +14 -7
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/ingest-drafts.js +8 -4
- package/dist/migration-profile-registry.d.ts.map +1 -1
- package/dist/migration-profile-registry.js +2 -10
- package/dist/monorepo-onboarding.js +2 -2
- package/dist/onboarding-report.d.ts.map +1 -1
- package/dist/onboarding-report.js +5 -1
- package/dist/onboarding.d.ts +1 -1
- package/dist/onboarding.d.ts.map +1 -1
- package/dist/onboarding.js +9 -66
- package/dist/ownership.js +2 -10
- package/dist/pack-contributions-inventory.d.ts +0 -1
- package/dist/pack-contributions-inventory.d.ts.map +1 -1
- package/dist/pack-contributions-inventory.js +17 -29
- package/dist/pack-helper-registry.d.ts.map +1 -1
- package/dist/pack-helper-registry.js +2 -10
- package/dist/pack-release-check.d.ts.map +1 -1
- package/dist/pack-release-check.js +4 -11
- package/dist/pack-signature-status.d.ts.map +1 -1
- package/dist/pack-signature-status.js +18 -2
- package/dist/pack-test-runner.js +2 -10
- package/dist/plan-review.d.ts.map +1 -1
- package/dist/plan-review.js +5 -10
- package/dist/plan-simulation.d.ts +13 -0
- package/dist/plan-simulation.d.ts.map +1 -1
- package/dist/plan-simulation.js +4 -21
- package/dist/playbook-registry.d.ts.map +1 -1
- package/dist/playbook-registry.js +2 -10
- package/dist/policy-engine.d.ts.map +1 -1
- package/dist/policy-engine.js +3 -11
- package/dist/policy-test.js +3 -11
- package/dist/profile-registry.d.ts +0 -1
- package/dist/profile-registry.d.ts.map +1 -1
- package/dist/profile-registry.js +4 -32
- package/dist/propose-knowledge.d.ts +15 -0
- package/dist/propose-knowledge.d.ts.map +1 -1
- package/dist/propose-knowledge.js +37 -4
- package/dist/quality-baseline.d.ts.map +1 -1
- package/dist/quality-baseline.js +3 -1
- package/dist/ranker-explainability.d.ts.map +1 -1
- package/dist/ranker-explainability.js +3 -9
- package/dist/registration-hint-registry.d.ts.map +1 -1
- package/dist/registration-hint-registry.js +2 -10
- package/dist/registry-lifecycle.d.ts +6 -0
- package/dist/registry-lifecycle.d.ts.map +1 -1
- package/dist/registry-lifecycle.js +137 -10
- package/dist/release-readiness.js +3 -3
- package/dist/repo-memory.d.ts.map +1 -1
- package/dist/repo-memory.js +3 -1
- package/dist/reposet.js +1 -1
- package/dist/repository-intelligence.d.ts.map +1 -1
- package/dist/repository-intelligence.js +7 -2
- package/dist/repository-knowledge-model.d.ts +1 -1
- package/dist/repository-knowledge-model.d.ts.map +1 -1
- package/dist/repository-stats.d.ts.map +1 -1
- package/dist/repository-stats.js +3 -1
- package/dist/resolve-verification-commands.d.ts +26 -0
- package/dist/resolve-verification-commands.d.ts.map +1 -0
- package/dist/resolve-verification-commands.js +55 -0
- package/dist/review-packet.d.ts.map +1 -1
- package/dist/review-packet.js +14 -17
- package/dist/rule-drift.d.ts.map +1 -1
- package/dist/rule-drift.js +24 -9
- package/dist/rule-scaffold.d.ts.map +1 -1
- package/dist/rule-scaffold.js +12 -4
- package/dist/scaffold-patterns.js +2 -10
- package/dist/search-tuning-registry.d.ts.map +1 -1
- package/dist/search-tuning-registry.js +2 -10
- package/dist/self-config-doctor-v2.d.ts +1 -1
- package/dist/self-config-doctor-v2.d.ts.map +1 -1
- package/dist/self-config-doctor-v2.js +6 -10
- package/dist/self-config-doctor.d.ts.map +1 -1
- package/dist/self-config-doctor.js +7 -13
- package/dist/sharkcraft-inspector.d.ts +14 -0
- package/dist/sharkcraft-inspector.d.ts.map +1 -1
- package/dist/sharkcraft-inspector.js +103 -1
- package/dist/start-here.d.ts +2 -2
- package/dist/start-here.d.ts.map +1 -1
- package/dist/start-here.js +16 -1
- package/dist/synthesize-from-onboarding.d.ts +68 -0
- package/dist/synthesize-from-onboarding.d.ts.map +1 -0
- package/dist/synthesize-from-onboarding.js +508 -0
- package/dist/task-packet.d.ts +13 -0
- package/dist/task-packet.d.ts.map +1 -1
- package/dist/task-packet.js +59 -6
- package/dist/task-ranker.d.ts.map +1 -1
- package/dist/task-ranker.js +1 -31
- package/dist/task-routing-hint-registry.d.ts.map +1 -1
- package/dist/task-routing-hint-registry.js +2 -10
- package/dist/template-drift.d.ts +7 -0
- package/dist/template-drift.d.ts.map +1 -1
- package/dist/template-drift.js +14 -6
- package/dist/test-impact.d.ts.map +1 -1
- package/dist/test-impact.js +5 -2
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +12 -17
- package/dist/universal-search.d.ts +0 -1
- package/dist/universal-search.d.ts.map +1 -1
- package/dist/universal-search.js +0 -12
- package/dist/why-file.js +66 -22
- package/package.json +18 -18
- package/dist/plugin-lifecycle-profile-registry.d.ts +0 -52
- package/dist/plugin-lifecycle-profile-registry.d.ts.map +0 -1
- package/dist/plugin-lifecycle-profile-registry.js +0 -202
- package/dist/plugin-lifecycle.d.ts +0 -132
- package/dist/plugin-lifecycle.d.ts.map +0 -1
- package/dist/plugin-lifecycle.js +0 -477
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-lifecycle.d.ts","sourceRoot":"","sources":["../src/registry-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,kCAAkC,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,eAAe,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACxD,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACzC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACxC;
|
|
1
|
+
{"version":3,"file":"registry-lifecycle.d.ts","sourceRoot":"","sources":["../src/registry-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,kCAAkC,CAAC;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,eAAe,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACxD;;;;OAIG;IACH,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACzC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACxC;AAuLD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,wBAAwB,CAsF3B;AAED,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,wBAAwB,GAAG,MAAM,CA8B1F"}
|
|
@@ -59,11 +59,111 @@ function walk(dir, projectRoot, out) {
|
|
|
59
59
|
const REGISTER_PATTERNS = Object.freeze([
|
|
60
60
|
// export function registerX(
|
|
61
61
|
/(?:export\s+)?(?:async\s+)?function\s+(register[A-Z]\w*)\s*\(/g,
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
// class method DECLARATION: requires a body `{` or return-type `:` after the
|
|
63
|
+
// params, which a bare call site (`registry.registerX(...)`) never has.
|
|
64
|
+
/(?:^|\n)[\t ]*(?:public|private|protected)?\s*(?:static\s+)?(?:async\s+)?(register[A-Z]\w*)\s*\([^;]*?\)\s*[:{]/g,
|
|
65
|
+
// assigned arrow / function expression: `registerX = (…) =>` / `registerX = function`
|
|
66
|
+
/\b(register[A-Z]\w*)\s*=\s*(?:async\s+)?(?:function\b|\([^)]*\)\s*(?::[^=]*)?=>)/g,
|
|
66
67
|
]);
|
|
68
|
+
// Accumulation of removable per-entry state — a registry that ADDS entries one
|
|
69
|
+
// at a time plausibly needs a way to remove them.
|
|
70
|
+
const ACCUMULATION_RE = /\.(?:set|add|push)\s*\(|\[[^\]]+\]\s*=[^=]/;
|
|
71
|
+
// A teardown-shaped API somewhere in the file — evidence the file is in the
|
|
72
|
+
// business of removing things, so a missing per-register remover is suspicious.
|
|
73
|
+
const TEARDOWN_RE = /\b(?:remove|unregister|clear|dispose|unsubscribe)\w*\s*\(|\boff\s*\(/i;
|
|
74
|
+
/**
|
|
75
|
+
* Blank out comments and string / template-literal bodies (preserving newlines
|
|
76
|
+
* so line numbers stay accurate) before scanning for `register*` declarations.
|
|
77
|
+
* Deterministic char-scan — no TS parser, consistent with this module's no-AST
|
|
78
|
+
* posture. Stops `register*` mentions inside comments / strings / docs from
|
|
79
|
+
* being counted as code.
|
|
80
|
+
*/
|
|
81
|
+
function stripCommentsAndLiterals(content) {
|
|
82
|
+
const out = [];
|
|
83
|
+
const n = content.length;
|
|
84
|
+
let state = 'code';
|
|
85
|
+
const blank = (ch) => (ch === '\n' ? '\n' : ' ');
|
|
86
|
+
let i = 0;
|
|
87
|
+
while (i < n) {
|
|
88
|
+
const ch = content[i];
|
|
89
|
+
const next = content[i + 1];
|
|
90
|
+
if (state === 'code') {
|
|
91
|
+
if (ch === '/' && next === '/') {
|
|
92
|
+
state = 'line';
|
|
93
|
+
out.push(' ');
|
|
94
|
+
i += 2;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (ch === '/' && next === '*') {
|
|
98
|
+
state = 'block';
|
|
99
|
+
out.push(' ');
|
|
100
|
+
i += 2;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (ch === "'") {
|
|
104
|
+
state = 'sq';
|
|
105
|
+
out.push(' ');
|
|
106
|
+
i += 1;
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (ch === '"') {
|
|
110
|
+
state = 'dq';
|
|
111
|
+
out.push(' ');
|
|
112
|
+
i += 1;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (ch === '`') {
|
|
116
|
+
state = 'tpl';
|
|
117
|
+
out.push(' ');
|
|
118
|
+
i += 1;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
out.push(ch);
|
|
122
|
+
i += 1;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (state === 'line') {
|
|
126
|
+
if (ch === '\n') {
|
|
127
|
+
state = 'code';
|
|
128
|
+
out.push('\n');
|
|
129
|
+
i += 1;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
out.push(blank(ch));
|
|
133
|
+
i += 1;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
if (state === 'block') {
|
|
137
|
+
if (ch === '*' && next === '/') {
|
|
138
|
+
state = 'code';
|
|
139
|
+
out.push(' ');
|
|
140
|
+
i += 2;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
out.push(blank(ch));
|
|
144
|
+
i += 1;
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
// string / template literal body
|
|
148
|
+
const quote = state === 'sq' ? "'" : state === 'dq' ? '"' : '`';
|
|
149
|
+
if (ch === '\\') {
|
|
150
|
+
out.push(' ');
|
|
151
|
+
out.push(next === undefined ? '' : blank(next));
|
|
152
|
+
i += 2;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (ch === quote) {
|
|
156
|
+
state = 'code';
|
|
157
|
+
out.push(' ');
|
|
158
|
+
i += 1;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
out.push(blank(ch));
|
|
162
|
+
i += 1;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
return out.join('');
|
|
166
|
+
}
|
|
67
167
|
function findRegistersInFile(content) {
|
|
68
168
|
const out = [];
|
|
69
169
|
const seen = new Set();
|
|
@@ -95,10 +195,17 @@ function findIgnoreAnnotations(content, registerName) {
|
|
|
95
195
|
return { ignore: false };
|
|
96
196
|
}
|
|
97
197
|
function expectedRemoverNames(registerName) {
|
|
98
|
-
// registerX → removeX / unregisterX / clearX
|
|
99
|
-
// registerXByScope → removeXByScope /
|
|
198
|
+
// registerX → removeX / unregisterX / clearX / disposeX / unsubscribeX / Xoff
|
|
199
|
+
// registerXByScope → removeXByScope / … (stem carries the scope suffix)
|
|
100
200
|
const stem = registerName.slice('register'.length);
|
|
101
|
-
return [
|
|
201
|
+
return [
|
|
202
|
+
`remove${stem}`,
|
|
203
|
+
`unregister${stem}`,
|
|
204
|
+
`clear${stem}`,
|
|
205
|
+
`dispose${stem}`,
|
|
206
|
+
`unsubscribe${stem}`,
|
|
207
|
+
`${stem}Off`,
|
|
208
|
+
];
|
|
102
209
|
}
|
|
103
210
|
function findRemoverInContent(content, candidates) {
|
|
104
211
|
for (const name of candidates) {
|
|
@@ -119,6 +226,7 @@ export function buildRegistryLifecycleReport(input) {
|
|
|
119
226
|
const scanFiles = files.slice(0, limit);
|
|
120
227
|
const matchedPairs = [];
|
|
121
228
|
const missingRemovers = [];
|
|
229
|
+
const oneShotBootstrap = [];
|
|
122
230
|
const ignored = [];
|
|
123
231
|
let registersFound = 0;
|
|
124
232
|
for (const file of scanFiles) {
|
|
@@ -131,7 +239,15 @@ export function buildRegistryLifecycleReport(input) {
|
|
|
131
239
|
}
|
|
132
240
|
if (isGeneratedFile(file, content))
|
|
133
241
|
continue;
|
|
134
|
-
|
|
242
|
+
// Scan declarations on code with comments/strings blanked out; keep the raw
|
|
243
|
+
// content only for the comment-based @shrkcrft annotations.
|
|
244
|
+
const code = stripCommentsAndLiterals(content);
|
|
245
|
+
const registers = findRegistersInFile(code);
|
|
246
|
+
// Per-file lifecycle evidence: only a file that BOTH accumulates removable
|
|
247
|
+
// state AND has a teardown-shaped API plausibly owes a per-register remover.
|
|
248
|
+
const hasAccumulation = ACCUMULATION_RE.test(code);
|
|
249
|
+
const hasTeardown = TEARDOWN_RE.test(code);
|
|
250
|
+
const ownsLifecycle = hasAccumulation && hasTeardown;
|
|
135
251
|
for (const reg of registers) {
|
|
136
252
|
registersFound += 1;
|
|
137
253
|
const ann = findIgnoreAnnotations(content, reg.name);
|
|
@@ -146,7 +262,7 @@ export function buildRegistryLifecycleReport(input) {
|
|
|
146
262
|
continue;
|
|
147
263
|
}
|
|
148
264
|
const candidates = expectedRemoverNames(reg.name);
|
|
149
|
-
const remover = findRemoverInContent(
|
|
265
|
+
const remover = findRemoverInContent(code, candidates);
|
|
150
266
|
if (remover) {
|
|
151
267
|
matchedPairs.push({
|
|
152
268
|
registerName: reg.name,
|
|
@@ -156,7 +272,7 @@ export function buildRegistryLifecycleReport(input) {
|
|
|
156
272
|
removerLine: remover.line,
|
|
157
273
|
});
|
|
158
274
|
}
|
|
159
|
-
else {
|
|
275
|
+
else if (ownsLifecycle) {
|
|
160
276
|
missingRemovers.push({
|
|
161
277
|
registerName: reg.name,
|
|
162
278
|
expectedRemoverNames: candidates,
|
|
@@ -165,6 +281,15 @@ export function buildRegistryLifecycleReport(input) {
|
|
|
165
281
|
suggestion: `Add ${candidates[0]}() / ${candidates[1]}() / ${candidates[2]}() — or annotate with \`@shrkcrft lifecycle-ignore <reason>\` / \`@shrkcrft lifecycle-managed-by <name>\` if cleanup is owned elsewhere.`,
|
|
166
282
|
});
|
|
167
283
|
}
|
|
284
|
+
else {
|
|
285
|
+
// No teardown-shaped API in the file → one-shot / bootstrap registration.
|
|
286
|
+
oneShotBootstrap.push({
|
|
287
|
+
registerName: reg.name,
|
|
288
|
+
file: relative(projectRoot, file),
|
|
289
|
+
line: reg.line,
|
|
290
|
+
reason: 'no teardown-shaped API in file — treated as one-shot bootstrap',
|
|
291
|
+
});
|
|
292
|
+
}
|
|
168
293
|
}
|
|
169
294
|
}
|
|
170
295
|
const recommendations = [];
|
|
@@ -177,6 +302,7 @@ export function buildRegistryLifecycleReport(input) {
|
|
|
177
302
|
registersFound,
|
|
178
303
|
matchedPairs,
|
|
179
304
|
missingRemovers,
|
|
305
|
+
oneShotBootstrap,
|
|
180
306
|
ignored,
|
|
181
307
|
recommendations,
|
|
182
308
|
};
|
|
@@ -188,6 +314,7 @@ export function renderRegistryLifecycleReportText(report) {
|
|
|
188
314
|
lines.push(` registers found ${report.registersFound}`);
|
|
189
315
|
lines.push(` matched pairs ${report.matchedPairs.length}`);
|
|
190
316
|
lines.push(` missing removers ${report.missingRemovers.length}`);
|
|
317
|
+
lines.push(` one-shot bootstrap ${report.oneShotBootstrap.length}`);
|
|
191
318
|
lines.push(` ignored ${report.ignored.length}`);
|
|
192
319
|
lines.push('');
|
|
193
320
|
if (report.missingRemovers.length > 0) {
|
|
@@ -157,7 +157,7 @@ function checkReadmeRequiredSections(projectRoot) {
|
|
|
157
157
|
const required = ['quick demo', 'onboard'];
|
|
158
158
|
const missing = required.filter((s) => !body.includes(s));
|
|
159
159
|
if (missing.length > 0) {
|
|
160
|
-
return warn('readme-required-sections', 'README required sections', `README.md is missing section keywords: ${missing.join(', ')}`, 'Add a "Quick demo" and "Onboard" section so
|
|
160
|
+
return warn('readme-required-sections', 'README required sections', `README.md is missing section keywords: ${missing.join(', ')}`, 'Add a "Quick demo" and "Onboard" section so consumers land on something runnable.');
|
|
161
161
|
}
|
|
162
162
|
return pass('readme-required-sections', 'README required sections', 'README.md has the expected sections.');
|
|
163
163
|
}
|
|
@@ -315,13 +315,13 @@ export async function buildReleaseReadiness(inspection, options = {}) {
|
|
|
315
315
|
checks.push(pass('release-notes', 'Public alpha release notes', 'Release notes file present.'));
|
|
316
316
|
}
|
|
317
317
|
if (!existsSync(limitsFile)) {
|
|
318
|
-
checks.push(warn('public-alpha-limitations', 'Public alpha limitations doc', 'Missing docs/public-alpha-limitations.md', 'List the known limitations
|
|
318
|
+
checks.push(warn('public-alpha-limitations', 'Public alpha limitations doc', 'Missing docs/public-alpha-limitations.md', 'List the known limitations consumers should be aware of.'));
|
|
319
319
|
}
|
|
320
320
|
else {
|
|
321
321
|
checks.push(pass('public-alpha-limitations', 'Public alpha limitations doc', 'Limitations doc present.'));
|
|
322
322
|
}
|
|
323
323
|
if (!existsSync(externalQuickstart)) {
|
|
324
|
-
checks.push(warn('external-quickstart', 'External repo quickstart', 'Missing docs/external-repo-quickstart.md', 'Add a 5-minute external-
|
|
324
|
+
checks.push(warn('external-quickstart', 'External repo quickstart', 'Missing docs/external-repo-quickstart.md', 'Add a 5-minute external-consumer quickstart.'));
|
|
325
325
|
}
|
|
326
326
|
else {
|
|
327
327
|
checks.push(pass('external-quickstart', 'External repo quickstart', 'Quickstart doc present.'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-memory.d.ts","sourceRoot":"","sources":["../src/repo-memory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"repo-memory.d.ts","sourceRoot":"","sources":["../src/repo-memory.ts"],"names":[],"mappings":"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"}
|
package/dist/repo-memory.js
CHANGED
|
@@ -89,7 +89,9 @@ function walkJsonFiles(root) {
|
|
|
89
89
|
if (st.isDirectory()) {
|
|
90
90
|
let entries;
|
|
91
91
|
try {
|
|
92
|
-
|
|
92
|
+
// Sort the walk so `shrk memory` topFiles / riskyFilesByLanguage slices
|
|
93
|
+
// are deterministic, not filesystem-order-dependent.
|
|
94
|
+
entries = readdirSync(cur).sort();
|
|
93
95
|
}
|
|
94
96
|
catch {
|
|
95
97
|
continue;
|
package/dist/reposet.js
CHANGED
|
@@ -42,7 +42,7 @@ function exampleConfigBody() {
|
|
|
42
42
|
schema: REPOSET_SCHEMA,
|
|
43
43
|
repos: [
|
|
44
44
|
{ id: 'sharkcraft', name: 'SharkCraft', root: '.', tags: ['engine'], role: 'engine' },
|
|
45
|
-
{ id: 'example-
|
|
45
|
+
{ id: 'example-consumer', name: 'Example consumer project', root: '../example-consumer', tags: ['consumer'], role: 'consumer' },
|
|
46
46
|
],
|
|
47
47
|
}, null, 2);
|
|
48
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-intelligence.d.ts","sourceRoot":"","sources":["../src/repository-intelligence.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"repository-intelligence.d.ts","sourceRoot":"","sources":["../src/repository-intelligence.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,8BAA8B,0CAA0C,CAAC;AAEtF,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,SAAS,eAAe;IACxB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,YAAY,kBAAkB;IAC9B,aAAa,mBAAmB;IAChC,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,QAAQ,aAAa;CACtB;AAED,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,SAAS,eAAe;IACxB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;IAC5B,YAAY,kBAAkB;IAC9B,SAAS,eAAe;IACxB,OAAO,YAAY;IACnB,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,YAAY,kBAAkB;IAC9B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,WAAW,kBAAkB;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,uEAAuE;IACvE,WAAW,CAAC,EAAE,SAAS,GAAG,eAAe,CAAC;CAC3C;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,wCAAwC;IACvD,iGAAiG;IACjG,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sGAAsG;IACtG,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,OAAO,8BAA8B,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,SAAS,EAAE,yBAAyB,CAAC;IACrC,UAAU,EAAE,0BAA0B,CAAC;CACxC;AAwED,wBAAsB,gCAAgC,CACpD,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE,wCAA6C,GACrD,OAAO,CAAC,4BAA4B,CAAC,CAgUvC;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,4BAA4B,EACnC,EAAE,EAAE,MAAM,GACT,eAAe,GAAG,SAAS,CAE7B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,4BAA4B,EACnC,EAAE,EAAE,MAAM,GACT,0BAA0B,GAAG,SAAS,CASxC;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,4BAA4B,EACnC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,SAAI,GACX,SAAS,MAAM,EAAE,GAAG,SAAS,CAsC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjC,uFAAuF;IACvF,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChC;AAED,0GAA0G;AAC1G,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAqCD,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG;IAC3D,UAAU,EAAE,0BAA0B,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAcA;AAED,2CAA2C;AAC3C,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAK5E;AAiFD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,4BAA4B,EACnC,KAAK,EAAE,qBAAqB,GAAG,0BAA0B,GACxD,2BAA2B,CA0B7B;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,4BAA4B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9F;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,4BAA4B,GAAG,MAAM,CAgC5F"}
|
|
@@ -71,7 +71,9 @@ function listPackages(projectRoot) {
|
|
|
71
71
|
const root = nodePath.join(projectRoot, top);
|
|
72
72
|
if (!existsSync(root))
|
|
73
73
|
continue;
|
|
74
|
-
|
|
74
|
+
// Sort so package iteration order (and therefore which packages' files land
|
|
75
|
+
// before FILES_CAP truncates) is deterministic, not filesystem-dependent.
|
|
76
|
+
for (const short of readdirSync(root).sort()) {
|
|
75
77
|
const dir = nodePath.join(root, short);
|
|
76
78
|
const pkgJson = nodePath.join(dir, 'package.json');
|
|
77
79
|
if (!existsSync(pkgJson))
|
|
@@ -106,7 +108,10 @@ function walkSourceFiles(packageDir, cap) {
|
|
|
106
108
|
const dir = stack.pop();
|
|
107
109
|
let entries = [];
|
|
108
110
|
try {
|
|
109
|
-
entries
|
|
111
|
+
// Sort entries so the capped walk selects the SAME files every run — the
|
|
112
|
+
// `out.length >= cap` early-break otherwise makes the selected set depend
|
|
113
|
+
// on filesystem order.
|
|
114
|
+
entries = readdirSync(dir).sort();
|
|
110
115
|
}
|
|
111
116
|
catch {
|
|
112
117
|
continue;
|
|
@@ -51,7 +51,7 @@ export interface IArchitectureModel {
|
|
|
51
51
|
layers: readonly IArchitectureLayerSummary[];
|
|
52
52
|
/** Public API surfaces (paths whose deep imports should be forbidden). */
|
|
53
53
|
publicApis: readonly string[];
|
|
54
|
-
/** Notes about cycles or
|
|
54
|
+
/** Notes about cycles or other import-graph observations. */
|
|
55
55
|
notes: readonly string[];
|
|
56
56
|
}
|
|
57
57
|
export interface IBusinessConcept {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-knowledge-model.d.ts","sourceRoot":"","sources":["../src/repository-knowledge-model.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EAElC,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAQL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,iCAAiC,EACtC,KAAK,mBAAmB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,eAAO,MAAM,iCAAiC,6CAA6C,CAAC;AAE5F,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED,oBAAY,aAAa;IACvB,kBAAkB,uBAAuB;IACzC,iBAAiB,sBAAsB;IACvC,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;IAC7C,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,aAAa,kBAAkB;IAC/B,sBAAsB,2BAA2B;IACjD,4BAA4B,iCAAiC;IAC7D,gBAAgB,qBAAqB;IACrC,0BAA0B,+BAA+B;CAC1D;AAED,eAAO,MAAM,mBAAmB,EAAE,SAAS,aAAa,EAAiC,CAAC;AAE1F,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,yBAAyB,EAAE,CAAC;IAC7C,0EAA0E;IAC1E,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,
|
|
1
|
+
{"version":3,"file":"repository-knowledge-model.d.ts","sourceRoot":"","sources":["../src/repository-knowledge-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository-stats.d.ts","sourceRoot":"","sources":["../src/repository-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,uBAAuB,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChD,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC7C,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"repository-stats.d.ts","sourceRoot":"","sources":["../src/repository-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,uBAAuB,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChD,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAC7C,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiPD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,4BAA4B,GACjC,OAAO,CAAC,gBAAgB,CAAC,CA8G3B"}
|
package/dist/repository-stats.js
CHANGED
|
@@ -115,7 +115,9 @@ function walkRepository(root, maxFiles) {
|
|
|
115
115
|
const cur = stack.pop();
|
|
116
116
|
let entries;
|
|
117
117
|
try {
|
|
118
|
-
|
|
118
|
+
// Sort the walk so `topFiles` (byte-tie order) and `byLanguage` (tie
|
|
119
|
+
// order) in `shrk stats` are deterministic, not filesystem-dependent.
|
|
120
|
+
entries = readdirSync(cur).sort();
|
|
119
121
|
}
|
|
120
122
|
catch {
|
|
121
123
|
continue;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ISharkcraftInspection } from './sharkcraft-inspector.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the verification commands an agent should run after a task, grounded
|
|
4
|
+
* in the pack rather than a generic default. Precedence (first non-empty wins):
|
|
5
|
+
*
|
|
6
|
+
* 1. The matched pipeline's command-type gate steps — the gates the pipeline
|
|
7
|
+
* author actually declared for this class of work (e.g. the engine
|
|
8
|
+
* `feature-dev` pipeline's `bun x tsc … --noEmit` + `bun test`).
|
|
9
|
+
* 2. The project's `sharkcraft.config.ts verificationCommands[]` — the
|
|
10
|
+
* trusted, repo-wide gate set (the same source `apply --validate` runs).
|
|
11
|
+
* 3. The caller-supplied knowledge action-hint defaults — today's behaviour,
|
|
12
|
+
* used only when neither of the above declares anything.
|
|
13
|
+
*
|
|
14
|
+
* A pipeline gate is a `command`-type step that is required and carries a
|
|
15
|
+
* concrete command (no `<placeholder>` tokens) — this excludes optional review
|
|
16
|
+
* steps, context builds, and generative/spec steps (which take arguments) while
|
|
17
|
+
* keeping the real post-change gates. Rules carry no verification field, so
|
|
18
|
+
* they are intentionally not a source here.
|
|
19
|
+
*
|
|
20
|
+
* Deterministic, order-preserving, deduped. No commands are executed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveVerificationCommands(inspection: ISharkcraftInspection, options?: {
|
|
23
|
+
readonly pipelineIds?: readonly string[];
|
|
24
|
+
readonly knowledgeDefaults?: readonly string[];
|
|
25
|
+
}): string[];
|
|
26
|
+
//# sourceMappingURL=resolve-verification-commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-verification-commands.d.ts","sourceRoot":"","sources":["../src/resolve-verification-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE;IACP,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,GACL,MAAM,EAAE,CA2BV"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { PipelineStepType } from '@shrkcrft/pipelines';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the verification commands an agent should run after a task, grounded
|
|
4
|
+
* in the pack rather than a generic default. Precedence (first non-empty wins):
|
|
5
|
+
*
|
|
6
|
+
* 1. The matched pipeline's command-type gate steps — the gates the pipeline
|
|
7
|
+
* author actually declared for this class of work (e.g. the engine
|
|
8
|
+
* `feature-dev` pipeline's `bun x tsc … --noEmit` + `bun test`).
|
|
9
|
+
* 2. The project's `sharkcraft.config.ts verificationCommands[]` — the
|
|
10
|
+
* trusted, repo-wide gate set (the same source `apply --validate` runs).
|
|
11
|
+
* 3. The caller-supplied knowledge action-hint defaults — today's behaviour,
|
|
12
|
+
* used only when neither of the above declares anything.
|
|
13
|
+
*
|
|
14
|
+
* A pipeline gate is a `command`-type step that is required and carries a
|
|
15
|
+
* concrete command (no `<placeholder>` tokens) — this excludes optional review
|
|
16
|
+
* steps, context builds, and generative/spec steps (which take arguments) while
|
|
17
|
+
* keeping the real post-change gates. Rules carry no verification field, so
|
|
18
|
+
* they are intentionally not a source here.
|
|
19
|
+
*
|
|
20
|
+
* Deterministic, order-preserving, deduped. No commands are executed.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveVerificationCommands(inspection, options = {}) {
|
|
23
|
+
const fromPipelines = [];
|
|
24
|
+
for (const id of options.pipelineIds ?? []) {
|
|
25
|
+
const pipeline = inspection.pipelineRegistry.get(id);
|
|
26
|
+
if (!pipeline)
|
|
27
|
+
continue;
|
|
28
|
+
for (const step of pipeline.steps) {
|
|
29
|
+
if (step.type !== PipelineStepType.Command)
|
|
30
|
+
continue;
|
|
31
|
+
if (step.required === false)
|
|
32
|
+
continue;
|
|
33
|
+
for (const raw of step.cliCommands ?? []) {
|
|
34
|
+
const cmd = raw.trim();
|
|
35
|
+
if (cmd.length > 0 && !cmd.includes('<'))
|
|
36
|
+
fromPipelines.push(cmd);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (fromPipelines.length > 0)
|
|
41
|
+
return dedupe(fromPipelines);
|
|
42
|
+
const cfg = inspection.config;
|
|
43
|
+
const fromConfig = [];
|
|
44
|
+
for (const vc of cfg?.verificationCommands ?? []) {
|
|
45
|
+
const cmd = vc?.command?.trim();
|
|
46
|
+
if (cmd && cmd.length > 0)
|
|
47
|
+
fromConfig.push(cmd);
|
|
48
|
+
}
|
|
49
|
+
if (fromConfig.length > 0)
|
|
50
|
+
return dedupe(fromConfig);
|
|
51
|
+
return dedupe(options.knowledgeDefaults ?? []);
|
|
52
|
+
}
|
|
53
|
+
function dedupe(items) {
|
|
54
|
+
return [...new Set(items)];
|
|
55
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-packet.d.ts","sourceRoot":"","sources":["../src/review-packet.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"review-packet.d.ts","sourceRoot":"","sources":["../src/review-packet.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAIvE,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,kEAAkE;IAClE,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,8CAA8C;IAC9C,aAAa,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACxE,2CAA2C;IAC3C,iBAAiB,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3D,iBAAiB,EAAE,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,2DAA2D;IAC3D,kBAAkB,EAAE,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,+DAA+D;IAC/D,qBAAqB,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,4DAA4D;IAC5D,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,mEAAmE;IACnE,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B;AAyCD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,qBAAqB,EACjC,OAAO,GAAE,yBAA8B,GACtC,aAAa,CA+Ef"}
|
package/dist/review-packet.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { spawnSync } from 'node:child_process';
|
|
2
2
|
import { evaluateBoundaries, loadTsconfigPaths, scanImports } from '@shrkcrft/boundaries';
|
|
3
|
+
import { matchAffectedConventions } from '@shrkcrft/paths';
|
|
4
|
+
import { resolveVerificationCommands } from "./resolve-verification-commands.js";
|
|
3
5
|
import { rankAll } from "./task-ranker.js";
|
|
4
6
|
function gitDiffFiles(cwd, opts) {
|
|
5
7
|
if (opts.files && opts.files.length > 0)
|
|
@@ -50,17 +52,10 @@ export function buildReviewPacket(inspection, options = {}) {
|
|
|
50
52
|
const changedFiles = gitDiffFiles(inspection.projectRoot, options);
|
|
51
53
|
const pseudoTask = buildPseudoTask(changedFiles);
|
|
52
54
|
const ranking = rankAll(inspection, pseudoTask, 8);
|
|
53
|
-
// Affected paths:
|
|
54
|
-
//
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
for (const seg of f.split('/'))
|
|
58
|
-
segments.add(seg.toLowerCase());
|
|
59
|
-
}
|
|
60
|
-
const affectedPaths = inspection.pathService
|
|
61
|
-
.list()
|
|
62
|
-
.filter((p) => [...segments].some((s) => (p.title + ' ' + p.content).toLowerCase().includes(s)))
|
|
63
|
-
.map((p) => p.id);
|
|
55
|
+
// Affected paths: conventions the changed files structurally fall under
|
|
56
|
+
// (directory-prefix match against each convention's metadata.path), not a
|
|
57
|
+
// free-text substring of the description.
|
|
58
|
+
const affectedPaths = matchAffectedConventions(inspection.pathService.list(), changedFiles).map((p) => p.id);
|
|
64
59
|
// Boundary violations restricted to changed files.
|
|
65
60
|
let boundaryViolations = [];
|
|
66
61
|
if (inspection.boundaryRegistry.size() > 0 && changedFiles.length > 0) {
|
|
@@ -81,12 +76,14 @@ export function buildReviewPacket(inspection, options = {}) {
|
|
|
81
76
|
message: v.message,
|
|
82
77
|
}));
|
|
83
78
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
79
|
+
// Verification: prefer the project's configured verificationCommands (resolved
|
|
80
|
+
// from config + matched pipelines); fall back to the generic tsc/test pair only
|
|
81
|
+
// when nothing is configured. SharkCraft's own meta-checks stay as a prefix.
|
|
82
|
+
const resolvedGates = resolveVerificationCommands(inspection, {
|
|
83
|
+
pipelineIds: ranking.pipelines.slice(0, 3).map((p) => p.item.id),
|
|
84
|
+
knowledgeDefaults: ['bun x tsc -p tsconfig.base.json --noEmit', 'bun test'],
|
|
85
|
+
});
|
|
86
|
+
const verificationCommands = unique(['shrk doctor', 'shrk check boundaries', ...resolvedGates]);
|
|
90
87
|
const reviewerInstructions = [
|
|
91
88
|
`# AI reviewer instructions`,
|
|
92
89
|
``,
|
package/dist/rule-drift.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-drift.d.ts","sourceRoot":"","sources":["../src/rule-drift.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,oBAAY,oBAAoB;IAC9B,QAAQ,aAAa;IACrB,iBAAiB,uBAAuB;IACxC,UAAU,gBAAgB;IAC1B,YAAY,iBAAiB;IAC7B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IACzD,sEAAsE;IACtE,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IACzD,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;
|
|
1
|
+
{"version":3,"file":"rule-drift.d.ts","sourceRoot":"","sources":["../src/rule-drift.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,eAAO,MAAM,iBAAiB,6BAA6B,CAAC;AAE5D,oBAAY,oBAAoB;IAC9B,QAAQ,aAAa;IACrB,iBAAiB,uBAAuB;IACxC,UAAU,gBAAgB;IAC1B,YAAY,iBAAiB;IAC7B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,oBAAoB,CAAC;IACrC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IACzD,sEAAsE;IACtE,QAAQ,CAAC,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IACzD,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AA6DD,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,qBAAqB,GAChC,gBAAgB,CAyFlB"}
|
package/dist/rule-drift.js
CHANGED
|
@@ -20,14 +20,27 @@ export var RuleEnforcementState;
|
|
|
20
20
|
RuleEnforcementState["Stale"] = "stale";
|
|
21
21
|
RuleEnforcementState["Unknown"] = "unknown";
|
|
22
22
|
})(RuleEnforcementState || (RuleEnforcementState = {}));
|
|
23
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The set of verification references a rule can match against to count as
|
|
25
|
+
* "wired" in `sharkcraft.config.ts`. A rule declares its verification commands
|
|
26
|
+
* as runnable command strings (e.g. `bun test`), while the config declares
|
|
27
|
+
* them as `{ id, command }` records (e.g. `{ id: 'unit-tests', command: 'bun
|
|
28
|
+
* test' }`). A rule is enforced when its declared command matches the config
|
|
29
|
+
* BY id OR BY command string, so we collect both — otherwise a rule that ships
|
|
30
|
+
* a genuinely-runnable, genuinely-wired command (matching by `command`) is
|
|
31
|
+
* mis-classified as unenforced just because it doesn't reference the config's
|
|
32
|
+
* short id.
|
|
33
|
+
*/
|
|
34
|
+
function configuredVerificationRefs(inspection) {
|
|
24
35
|
const cfg = inspection.config;
|
|
25
|
-
const
|
|
36
|
+
const refs = new Set();
|
|
26
37
|
for (const entry of cfg?.verificationCommands ?? []) {
|
|
27
38
|
if (entry?.id)
|
|
28
|
-
|
|
39
|
+
refs.add(entry.id.trim());
|
|
40
|
+
if (entry?.command)
|
|
41
|
+
refs.add(entry.command.trim());
|
|
29
42
|
}
|
|
30
|
-
return
|
|
43
|
+
return refs;
|
|
31
44
|
}
|
|
32
45
|
function isRule(entry) {
|
|
33
46
|
return entry.type === KnowledgeType.Rule;
|
|
@@ -60,13 +73,15 @@ function staleReason(entry, inspection) {
|
|
|
60
73
|
return null;
|
|
61
74
|
}
|
|
62
75
|
export function classifyRuleDrift(inspection) {
|
|
63
|
-
const
|
|
76
|
+
const wiredRefs = configuredVerificationRefs(inspection);
|
|
64
77
|
const entries = [];
|
|
65
78
|
for (const entry of inspection.knowledgeEntries) {
|
|
66
79
|
if (!isRule(entry))
|
|
67
80
|
continue;
|
|
68
81
|
const declared = entry.actionHints?.verificationCommands ?? [];
|
|
69
|
-
|
|
82
|
+
// A declared command counts as enforced when it is wired in the config
|
|
83
|
+
// BY id OR BY command string (the config carries both).
|
|
84
|
+
const enforced = declared.filter((ref) => wiredRefs.has(ref.trim()));
|
|
70
85
|
const advisory = isAdvisory(entry);
|
|
71
86
|
const stale = staleReason(entry, inspection);
|
|
72
87
|
const hasHints = hasMeaningfulActionHints(entry);
|
|
@@ -82,15 +97,15 @@ export function classifyRuleDrift(inspection) {
|
|
|
82
97
|
}
|
|
83
98
|
else if (declared.length > 0 && enforced.length === declared.length) {
|
|
84
99
|
state = RuleEnforcementState.Enforced;
|
|
85
|
-
reason = `all ${declared.length} verification command(s) wired in sharkcraft.config.ts`;
|
|
100
|
+
reason = `all ${declared.length} verification command(s) wired (by id or command) in sharkcraft.config.ts`;
|
|
86
101
|
}
|
|
87
102
|
else if (declared.length > 0 && enforced.length > 0) {
|
|
88
103
|
state = RuleEnforcementState.PartiallyEnforced;
|
|
89
|
-
reason = `${enforced.length}/${declared.length} verification command(s) wired in sharkcraft.config.ts`;
|
|
104
|
+
reason = `${enforced.length}/${declared.length} verification command(s) wired (by id or command) in sharkcraft.config.ts`;
|
|
90
105
|
}
|
|
91
106
|
else if (declared.length > 0) {
|
|
92
107
|
state = RuleEnforcementState.PartiallyEnforced;
|
|
93
|
-
reason = `${declared.length} verification command(s) declared but none wired in sharkcraft.config.ts`;
|
|
108
|
+
reason = `${declared.length} verification command(s) declared but none wired (by id or command) in sharkcraft.config.ts`;
|
|
94
109
|
}
|
|
95
110
|
else if (hasHints) {
|
|
96
111
|
state = RuleEnforcementState.ManualOnly;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-scaffold.d.ts","sourceRoot":"","sources":["../src/rule-scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,oBAAoB,gCAAgC,CAAC;AAElE,oBAAY,gBAAgB;IAC1B,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,IAAI,EAAE,gBAAgB,CAAC;IACvB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,oBAAoB,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAC;IACvB,sEAAsE;IACtE,UAAU,EAAE,iBAAiB,CAAC;IAC9B,8DAA8D;IAC9D,YAAY,EAAE,iBAAiB,CAAC;IAChC,sEAAsE;IACtE,SAAS,EAAE,iBAAiB,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,6CAA6C;IAC7C,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"rule-scaffold.d.ts","sourceRoot":"","sources":["../src/rule-scaffold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,eAAO,MAAM,oBAAoB,gCAAgC,CAAC;AAElE,oBAAY,gBAAgB;IAC1B,YAAY,iBAAiB;IAC7B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,IAAI,EAAE,gBAAgB,CAAC;IACvB,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,gEAAgE;IAChE,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,oBAAoB,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,gBAAgB,CAAC;IACvB,sEAAsE;IACtE,UAAU,EAAE,iBAAiB,CAAC;IAC9B,8DAA8D;IAC9D,YAAY,EAAE,iBAAiB,CAAC;IAChC,sEAAsE;IACtE,SAAS,EAAE,iBAAiB,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,6CAA6C;IAC7C,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC;AAkOD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA+ChF"}
|