@selvakumaresra/specship 0.9.0 → 0.10.0
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/commands/ss-domain.md +98 -0
- package/commands/ss-triage.md +177 -0
- package/dist/bin/specship.js +249 -0
- package/dist/bin/specship.js.map +1 -1
- package/dist/db/schema.sql +1 -1
- package/dist/db/spec-queries.d.ts +29 -0
- package/dist/db/spec-queries.d.ts.map +1 -1
- package/dist/db/spec-queries.js +63 -0
- package/dist/db/spec-queries.js.map +1 -1
- package/dist/enforce/enforce.d.ts +70 -0
- package/dist/enforce/enforce.d.ts.map +1 -0
- package/dist/enforce/enforce.js +125 -0
- package/dist/enforce/enforce.js.map +1 -0
- package/dist/extraction/specs/markdown-spec-extractor.d.ts +21 -0
- package/dist/extraction/specs/markdown-spec-extractor.d.ts.map +1 -1
- package/dist/extraction/specs/markdown-spec-extractor.js +144 -0
- package/dist/extraction/specs/markdown-spec-extractor.js.map +1 -1
- package/dist/fitness/fitness.d.ts +75 -0
- package/dist/fitness/fitness.d.ts.map +1 -0
- package/dist/fitness/fitness.js +204 -0
- package/dist/fitness/fitness.js.map +1 -0
- package/dist/graph/maintainability.d.ts +101 -0
- package/dist/graph/maintainability.d.ts.map +1 -0
- package/dist/graph/maintainability.js +278 -0
- package/dist/graph/maintainability.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -1
- package/dist/index.js.map +1 -1
- package/dist/installer/instructions-template.d.ts +5 -4
- package/dist/installer/instructions-template.d.ts.map +1 -1
- package/dist/installer/instructions-template.js +10 -4
- package/dist/installer/instructions-template.js.map +1 -1
- package/dist/installer/targets/claude.d.ts.map +1 -1
- package/dist/installer/targets/claude.js +4 -0
- package/dist/installer/targets/claude.js.map +1 -1
- package/dist/installer/targets/shared.d.ts.map +1 -1
- package/dist/installer/targets/shared.js +4 -0
- package/dist/installer/targets/shared.js.map +1 -1
- package/dist/mcp/fitness-tool.d.ts +12 -0
- package/dist/mcp/fitness-tool.d.ts.map +1 -0
- package/dist/mcp/fitness-tool.js +46 -0
- package/dist/mcp/fitness-tool.js.map +1 -0
- package/dist/mcp/maintainability-tool.d.ts +13 -0
- package/dist/mcp/maintainability-tool.d.ts.map +1 -0
- package/dist/mcp/maintainability-tool.js +64 -0
- package/dist/mcp/maintainability-tool.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +3 -2
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/spec-tools.d.ts.map +1 -1
- package/dist/mcp/spec-tools.js +115 -1
- package/dist/mcp/spec-tools.js.map +1 -1
- package/dist/mcp/tools.d.ts +13 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +75 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/resolution/domain-gap-seed.d.ts +60 -0
- package/dist/resolution/domain-gap-seed.d.ts.map +1 -0
- package/dist/resolution/domain-gap-seed.js +87 -0
- package/dist/resolution/domain-gap-seed.js.map +1 -0
- package/dist/resolution/spec-link-resolver.d.ts +46 -1
- package/dist/resolution/spec-link-resolver.d.ts.map +1 -1
- package/dist/resolution/spec-link-resolver.js +78 -0
- package/dist/resolution/spec-link-resolver.js.map +1 -1
- package/dist/server/routes/domain.js +0 -0
- package/dist/server/routes/maintainability.js +18 -0
- package/dist/server/server.js +4 -0
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -1
- package/dist/web/chunk-EZZBWC7Z.js +1 -0
- package/dist/web/{chunk-UBOZGQNK.js → chunk-IZQXYQNQ.js} +1 -1
- package/dist/web/chunk-JQXCRIK2.js +1 -0
- package/dist/web/{chunk-ASZ77FMZ.js → chunk-JT2YIHPL.js} +1 -1
- package/dist/web/{chunk-WLIMNDS3.js → chunk-ONKHTXHJ.js} +1 -1
- package/dist/web/{chunk-FHZHD2ZG.js → chunk-P5JX67LT.js} +1 -1
- package/dist/web/{chunk-RJLLYZEQ.js → chunk-PDTQX2UL.js} +1 -1
- package/dist/web/{chunk-RASJHUXS.js → chunk-XWDR6MPC.js} +1 -1
- package/dist/web/{chunk-D5OCNEJA.js → chunk-ZG7H3XPL.js} +1 -1
- package/dist/web/index.html +1 -1
- package/dist/web/main-GYPY5V5H.js +1 -0
- package/package.json +1 -1
- package/dist/web/main-P33TUYUP.js +0 -1
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Maintainability harness (REQ-MAINT-001).
|
|
4
|
+
*
|
|
5
|
+
* Derives four maintainability signals from the existing knowledge graph, with
|
|
6
|
+
* NO additional file parse — coupling, size hotspots, dependency cycles, and
|
|
7
|
+
* dead-code candidates. Pure read over `QueryBuilder`; deterministic (every
|
|
8
|
+
* output array is sorted by a stable key), so a re-run on an unchanged index is
|
|
9
|
+
* byte-identical and the report can underpin a future CI gate (REQ-STRATEGY-003).
|
|
10
|
+
*
|
|
11
|
+
* Realizes the first harness-engineering expansion lane (REQ-STRATEGY-001).
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.CONFIG_FILE_NAME = exports.DEFAULT_EXCLUDE = exports.DEFAULT_THRESHOLDS = void 0;
|
|
51
|
+
exports.computeMaintainability = computeMaintainability;
|
|
52
|
+
exports.resolveThresholds = resolveThresholds;
|
|
53
|
+
exports.resolveExclude = resolveExclude;
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
const picomatch_1 = __importDefault(require("picomatch"));
|
|
57
|
+
exports.DEFAULT_THRESHOLDS = {
|
|
58
|
+
highDegree: 20,
|
|
59
|
+
largeSymbolLines: 200,
|
|
60
|
+
godFileSymbols: 40,
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Generated / vendored files excluded from the analysis by default — they aren't
|
|
64
|
+
* source-of-truth, so flagging them is noise (e.g. a bundled `chunk-*.js` shows
|
|
65
|
+
* as a huge coupling hub, a `.d.ts` as dead code). A project may add more via
|
|
66
|
+
* `maintainability.exclude` in specship.config.json. Globs over the
|
|
67
|
+
* project-relative file path.
|
|
68
|
+
*/
|
|
69
|
+
exports.DEFAULT_EXCLUDE = [
|
|
70
|
+
'**/*.d.ts',
|
|
71
|
+
'**/*.min.js',
|
|
72
|
+
'**/*.map',
|
|
73
|
+
'**/dist/**',
|
|
74
|
+
'**/build/**',
|
|
75
|
+
'**/vendor/**',
|
|
76
|
+
'**/public/web/**',
|
|
77
|
+
'**/chunk-*.js',
|
|
78
|
+
];
|
|
79
|
+
/** Definable code symbols considered by the size / coupling / dead-code signals. */
|
|
80
|
+
const SYMBOL_KINDS = new Set([
|
|
81
|
+
'function', 'method', 'class', 'struct', 'interface', 'trait', 'protocol', 'enum', 'type_alias',
|
|
82
|
+
]);
|
|
83
|
+
/**
|
|
84
|
+
* Edge kinds that represent a *use* / dependency (so they count toward coupling
|
|
85
|
+
* and reachability). `contains` (structural parent→child) and `exports` are not
|
|
86
|
+
* uses. Heuristic-provenance `calls`/`references` edges ARE uses — which is why a
|
|
87
|
+
* symbol reached only via a synthesized dynamic-dispatch edge is never flagged
|
|
88
|
+
* dead (REQ-MAINT-001.A4).
|
|
89
|
+
*/
|
|
90
|
+
function isUseEdge(kind) {
|
|
91
|
+
return kind !== 'contains' && kind !== 'exports';
|
|
92
|
+
}
|
|
93
|
+
const TEST_FILE = /(^|\/)(__tests__|tests?|spec)\/|\.(test|spec|_test)\.|_test\.[a-z]+$|\.test\.[a-z]+$|\.spec\.[a-z]+$/i;
|
|
94
|
+
/**
|
|
95
|
+
* Compute the maintainability report from the graph. Pure read — never writes.
|
|
96
|
+
*/
|
|
97
|
+
function computeMaintainability(queries, thresholds = exports.DEFAULT_THRESHOLDS, exclude = exports.DEFAULT_EXCLUDE) {
|
|
98
|
+
// Scope analysis to source files — drop generated/vendored ones up front so
|
|
99
|
+
// they never appear as findings and never inflate a kept node's degree.
|
|
100
|
+
const isExcluded = exclude.length
|
|
101
|
+
? (0, picomatch_1.default)(exclude, { dot: true })
|
|
102
|
+
: () => false;
|
|
103
|
+
const nodes = queries.getAllNodes().filter((n) => !isExcluded(n.filePath));
|
|
104
|
+
const byId = new Map(nodes.map((n) => [n.id, n]));
|
|
105
|
+
const fanIn = new Map();
|
|
106
|
+
const fanOut = new Map();
|
|
107
|
+
// file → set of files it imports (for cycle detection)
|
|
108
|
+
const fileImports = new Map();
|
|
109
|
+
for (const n of nodes) {
|
|
110
|
+
const out = queries.getOutgoingEdges(n.id);
|
|
111
|
+
for (const e of out) {
|
|
112
|
+
if (!byId.has(e.target))
|
|
113
|
+
continue; // edge to an excluded/missing node — ignore
|
|
114
|
+
if (isUseEdge(e.kind)) {
|
|
115
|
+
fanOut.set(e.source, (fanOut.get(e.source) ?? 0) + 1);
|
|
116
|
+
fanIn.set(e.target, (fanIn.get(e.target) ?? 0) + 1);
|
|
117
|
+
}
|
|
118
|
+
if (e.kind === 'imports') {
|
|
119
|
+
const srcFile = n.filePath;
|
|
120
|
+
const tgtFile = byId.get(e.target)?.filePath;
|
|
121
|
+
if (srcFile && tgtFile && srcFile !== tgtFile) {
|
|
122
|
+
let set = fileImports.get(srcFile);
|
|
123
|
+
if (!set) {
|
|
124
|
+
set = new Set();
|
|
125
|
+
fileImports.set(srcFile, set);
|
|
126
|
+
}
|
|
127
|
+
set.add(tgtFile);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// --- coupling + size + dead-code (per symbol) ---
|
|
133
|
+
const coupling = [];
|
|
134
|
+
const oversized = [];
|
|
135
|
+
const deadCode = [];
|
|
136
|
+
const symbolsPerFile = new Map();
|
|
137
|
+
for (const n of nodes) {
|
|
138
|
+
if (!SYMBOL_KINDS.has(n.kind))
|
|
139
|
+
continue;
|
|
140
|
+
symbolsPerFile.set(n.filePath, (symbolsPerFile.get(n.filePath) ?? 0) + 1);
|
|
141
|
+
const fi = fanIn.get(n.id) ?? 0;
|
|
142
|
+
const fo = fanOut.get(n.id) ?? 0;
|
|
143
|
+
if (fi >= thresholds.highDegree || fo >= thresholds.highDegree) {
|
|
144
|
+
coupling.push({
|
|
145
|
+
nodeId: n.id, name: n.name, qualifiedName: n.qualifiedName, filePath: n.filePath, kind: n.kind, fanIn: fi, fanOut: fo,
|
|
146
|
+
reason: `fan-in ${fi} / fan-out ${fo} (threshold ≥ ${thresholds.highDegree})`,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
const lines = Math.max(0, (n.endLine ?? 0) - (n.startLine ?? 0));
|
|
150
|
+
if (lines >= thresholds.largeSymbolLines) {
|
|
151
|
+
oversized.push({
|
|
152
|
+
nodeId: n.id, name: n.name, qualifiedName: n.qualifiedName, filePath: n.filePath, kind: n.kind, startLine: n.startLine ?? 0, endLine: n.endLine ?? 0, lines,
|
|
153
|
+
reason: `${lines} lines (threshold ≥ ${thresholds.largeSymbolLines})`,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
// dead-code: no use-edges in, not part of the public surface, not a test fixture
|
|
157
|
+
if (fi === 0 && !n.isExported && !TEST_FILE.test(n.filePath)) {
|
|
158
|
+
deadCode.push({
|
|
159
|
+
nodeId: n.id, name: n.name, qualifiedName: n.qualifiedName, filePath: n.filePath, kind: n.kind, startLine: n.startLine ?? 0,
|
|
160
|
+
reason: 'no incoming use-edges; not exported',
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// --- god files ---
|
|
165
|
+
const godFiles = [];
|
|
166
|
+
for (const [filePath, count] of symbolsPerFile) {
|
|
167
|
+
if (count >= thresholds.godFileSymbols) {
|
|
168
|
+
godFiles.push({ filePath, symbolCount: count, reason: `${count} symbols (threshold ≥ ${thresholds.godFileSymbols})` });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// --- dependency cycles (Tarjan SCC over the file-import graph) ---
|
|
172
|
+
const cycles = findCycles(fileImports);
|
|
173
|
+
// deterministic ordering
|
|
174
|
+
coupling.sort((a, b) => (b.fanIn + b.fanOut) - (a.fanIn + a.fanOut) || cmp(a.nodeId, b.nodeId));
|
|
175
|
+
oversized.sort((a, b) => b.lines - a.lines || cmp(a.nodeId, b.nodeId));
|
|
176
|
+
godFiles.sort((a, b) => b.symbolCount - a.symbolCount || cmp(a.filePath, b.filePath));
|
|
177
|
+
deadCode.sort((a, b) => cmp(a.filePath, b.filePath) || a.startLine - b.startLine || cmp(a.nodeId, b.nodeId));
|
|
178
|
+
const clean = coupling.length === 0 && oversized.length === 0 && godFiles.length === 0 && cycles.length === 0 && deadCode.length === 0;
|
|
179
|
+
return { thresholds, coupling, oversized, godFiles, cycles, deadCode, clean };
|
|
180
|
+
}
|
|
181
|
+
function cmp(a, b) {
|
|
182
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Tarjan's strongly-connected-components over the file-import graph. Returns
|
|
186
|
+
* every SCC of size > 1 (a genuine import cycle), each as a sorted file list,
|
|
187
|
+
* the whole list sorted for determinism.
|
|
188
|
+
*/
|
|
189
|
+
function findCycles(graph) {
|
|
190
|
+
let index = 0;
|
|
191
|
+
const idx = new Map();
|
|
192
|
+
const low = new Map();
|
|
193
|
+
const onStack = new Set();
|
|
194
|
+
const stack = [];
|
|
195
|
+
const sccs = [];
|
|
196
|
+
// stable node order so the SCC partition is deterministic
|
|
197
|
+
const order = [...graph.keys()].sort(cmp);
|
|
198
|
+
const strongconnect = (v) => {
|
|
199
|
+
idx.set(v, index);
|
|
200
|
+
low.set(v, index);
|
|
201
|
+
index++;
|
|
202
|
+
stack.push(v);
|
|
203
|
+
onStack.add(v);
|
|
204
|
+
const neighbors = [...(graph.get(v) ?? [])].sort(cmp);
|
|
205
|
+
for (const w of neighbors) {
|
|
206
|
+
if (!idx.has(w)) {
|
|
207
|
+
// w may be an import target with no outgoing edges — still a graph node
|
|
208
|
+
strongconnect(w);
|
|
209
|
+
low.set(v, Math.min(low.get(v), low.get(w)));
|
|
210
|
+
}
|
|
211
|
+
else if (onStack.has(w)) {
|
|
212
|
+
low.set(v, Math.min(low.get(v), idx.get(w)));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (low.get(v) === idx.get(v)) {
|
|
216
|
+
const comp = [];
|
|
217
|
+
let w;
|
|
218
|
+
do {
|
|
219
|
+
w = stack.pop();
|
|
220
|
+
onStack.delete(w);
|
|
221
|
+
comp.push(w);
|
|
222
|
+
} while (w !== v);
|
|
223
|
+
if (comp.length > 1)
|
|
224
|
+
sccs.push(comp.sort(cmp));
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
for (const v of order)
|
|
228
|
+
if (!idx.has(v))
|
|
229
|
+
strongconnect(v);
|
|
230
|
+
return sccs
|
|
231
|
+
.sort((a, b) => cmp(a[0] ?? '', b[0] ?? ''))
|
|
232
|
+
.map((files) => ({ files, reason: `${files.length} files form an import cycle` }));
|
|
233
|
+
}
|
|
234
|
+
/** Default name of the checked-in project config file at the project root. */
|
|
235
|
+
exports.CONFIG_FILE_NAME = 'specship.config.json';
|
|
236
|
+
/**
|
|
237
|
+
* Resolve effective thresholds (REQ-MAINT-002): defaults < checked-in
|
|
238
|
+
* `specship.config.json` (`maintainability.thresholds`) < explicit override.
|
|
239
|
+
* A missing or unparseable config silently falls back to defaults.
|
|
240
|
+
*/
|
|
241
|
+
function resolveThresholds(projectRoot, override) {
|
|
242
|
+
let fromConfig = {};
|
|
243
|
+
try {
|
|
244
|
+
const raw = fs.readFileSync(path.join(projectRoot, exports.CONFIG_FILE_NAME), 'utf-8');
|
|
245
|
+
const cfg = JSON.parse(raw);
|
|
246
|
+
const t = cfg?.maintainability?.thresholds;
|
|
247
|
+
if (t && typeof t === 'object') {
|
|
248
|
+
for (const k of ['highDegree', 'largeSymbolLines', 'godFileSymbols']) {
|
|
249
|
+
if (typeof t[k] === 'number' && Number.isFinite(t[k]))
|
|
250
|
+
fromConfig[k] = t[k];
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
// no config / unparseable → defaults
|
|
256
|
+
}
|
|
257
|
+
return { ...exports.DEFAULT_THRESHOLDS, ...fromConfig, ...(override ?? {}) };
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Resolve the exclude globs: the built-in DEFAULT_EXCLUDE plus any
|
|
261
|
+
* `maintainability.exclude` array from specship.config.json (additive — config
|
|
262
|
+
* extends the defaults rather than replacing them).
|
|
263
|
+
*/
|
|
264
|
+
function resolveExclude(projectRoot) {
|
|
265
|
+
let extra = [];
|
|
266
|
+
try {
|
|
267
|
+
const raw = fs.readFileSync(path.join(projectRoot, exports.CONFIG_FILE_NAME), 'utf-8');
|
|
268
|
+
const cfg = JSON.parse(raw);
|
|
269
|
+
const e = cfg?.maintainability?.exclude;
|
|
270
|
+
if (Array.isArray(e))
|
|
271
|
+
extra = e.filter((x) => typeof x === 'string');
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
// no config / unparseable → defaults only
|
|
275
|
+
}
|
|
276
|
+
return [...exports.DEFAULT_EXCLUDE, ...extra];
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=maintainability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintainability.js","sourceRoot":"","sources":["../../src/graph/maintainability.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,8 +9,12 @@ import { IndexProgress, IndexResult, SyncResult } from './extraction';
|
|
|
9
9
|
import { ResolutionResult } from './resolution';
|
|
10
10
|
import { SpecLinkResolver, SpecLinkResolverStats } from './resolution/spec-link-resolver';
|
|
11
11
|
import { SpecFunnel } from './resolution/brief-link-resolver';
|
|
12
|
+
import { DomainGapSeed } from './resolution/domain-gap-seed';
|
|
12
13
|
import { SpecQueries } from './db/spec-queries';
|
|
13
14
|
import { AnalyzeResult, SweepResult, Proposal, ProposalState, PreviewResult, ApplyOutcome, UndoOutcome } from './reflect';
|
|
15
|
+
import { MaintainabilityReport, MaintainabilityThresholds } from './graph/maintainability';
|
|
16
|
+
import { FitnessReport, FitnessRule } from './fitness/fitness';
|
|
17
|
+
import { EnforceConfig, EnforceReport } from './enforce/enforce';
|
|
14
18
|
import { WatchOptions, PendingFile } from './sync';
|
|
15
19
|
export * from './types';
|
|
16
20
|
export { getDatabasePath, DatabaseConnection } from './db';
|
|
@@ -21,8 +25,16 @@ export { detectLanguage, isLanguageSupported, isGrammarLoaded, getSupportedLangu
|
|
|
21
25
|
export { ResolutionResult } from './resolution';
|
|
22
26
|
export { computeSpecFunnel, resolveBriefLink, summarizeBriefFunnel, findBriefsForSpec, } from './resolution/brief-link-resolver';
|
|
23
27
|
export type { SpecFunnel, SpecFunnelSummary, SpecFunnelDoc, BriefLink, BriefLinkState, BriefRollup, BriefFunnelEntry, } from './resolution/brief-link-resolver';
|
|
28
|
+
export { computeDomainGapSeed } from './resolution/domain-gap-seed';
|
|
29
|
+
export type { DomainGapSeed, GapSeedEntity, GapSeedSpec, DomainCoverage, } from './resolution/domain-gap-seed';
|
|
24
30
|
export { analyze as reflectAnalyze, sweep as reflectSweep, ReflectStore, previewProposal, applyProposal, undoProposal, } from './reflect';
|
|
25
31
|
export type { Proposal, ProposalType, ProposalSeverity, ProposalState, TargetKind, ProposalEvidence, ProposalPayload, PreviewResult, ApplyOutcome, UndoOutcome, ReflectContext, AnalyzeResult, SweepResult, } from './reflect';
|
|
32
|
+
export { computeMaintainability, resolveThresholds, resolveExclude, DEFAULT_THRESHOLDS, DEFAULT_EXCLUDE, CONFIG_FILE_NAME } from './graph/maintainability';
|
|
33
|
+
export { evaluateFitness, loadFitnessRules, FITNESS_CONFIG_FILE } from './fitness/fitness';
|
|
34
|
+
export { evaluateEnforcement, loadEnforceConfig, ENFORCE_CONFIG_FILE } from './enforce/enforce';
|
|
35
|
+
export type { EnforceConfig, GateConfig, EnforceReport, EnforceDeps, CheckOutcome, CheckName, RequirementVerification, } from './enforce/enforce';
|
|
36
|
+
export type { FitnessRule, ForbiddenRule, LayersRule, IsolationRule, FitnessReport, FitnessViolation, FitnessConfigError, Selector, } from './fitness/fitness';
|
|
37
|
+
export type { MaintainabilityReport, MaintainabilityThresholds, CouplingFinding, OversizedFinding, GodFileFinding, CycleFinding, DeadCodeFinding, } from './graph/maintainability';
|
|
26
38
|
export { SpecShipError, FileError, ParseError, DatabaseError, SearchError, VectorError, ConfigError, Logger, setLogger, getLogger, silentLogger, defaultLogger, } from './errors';
|
|
27
39
|
export { Mutex, FileLock, processInBatches, debounce, throttle, MemoryMonitor } from './utils';
|
|
28
40
|
export { FileWatcher, WatchOptions, PendingFile, LockUnavailableError } from './sync';
|
|
@@ -87,6 +99,39 @@ export declare class SpecShip {
|
|
|
87
99
|
* package (it calls this on the dynamically-loaded SpecShip).
|
|
88
100
|
*/
|
|
89
101
|
getSpecFunnel(): SpecFunnel;
|
|
102
|
+
/**
|
|
103
|
+
* The domain gap-seed (REQ-DOMAIN-003): the structural code entities and
|
|
104
|
+
* non-domain specs that no domain fact yet covers, plus a coverage tally.
|
|
105
|
+
* Read-only — computed from live state, writes nothing. Exposed on the
|
|
106
|
+
* instance so the `/ss-domain` command and the desktop server can drive it
|
|
107
|
+
* without runtime-importing the package.
|
|
108
|
+
*/
|
|
109
|
+
getDomainGapSeed(): DomainGapSeed;
|
|
110
|
+
/**
|
|
111
|
+
* The maintainability harness (REQ-MAINT-001): coupling, size hotspots,
|
|
112
|
+
* dependency cycles, and dead-code candidates, derived from the graph with no
|
|
113
|
+
* additional parse. Read-only and deterministic. Exposed on the instance so
|
|
114
|
+
* the CLI / MCP / desktop server can drive it without runtime-importing the
|
|
115
|
+
* package.
|
|
116
|
+
*/
|
|
117
|
+
getMaintainability(thresholds?: Partial<MaintainabilityThresholds>): MaintainabilityReport;
|
|
118
|
+
/**
|
|
119
|
+
* The architecture-fitness harness (REQ-FITNESS-001/002): evaluate declarative
|
|
120
|
+
* architecture rules (from specship.config.json `fitness.rules`, or an explicit
|
|
121
|
+
* override) against the graph. Read-only, deterministic. Exposed on the
|
|
122
|
+
* instance so the CLI / MCP / server drive it without runtime-importing the
|
|
123
|
+
* package.
|
|
124
|
+
*/
|
|
125
|
+
getFitness(rules?: FitnessRule[]): FitnessReport;
|
|
126
|
+
/**
|
|
127
|
+
* Enforcement mode (REQ-ENFORCE-001/002/003): compose drift + fitness +
|
|
128
|
+
* maintainability + the spec→test→verify behaviour chain into one gate. Which
|
|
129
|
+
* checks gate vs advise comes from specship.config.json `enforce` (or an
|
|
130
|
+
* explicit override); with no config every check is advisory and the run
|
|
131
|
+
* passes. The behaviour chain reads `tests`-kind spec-links on each requirement
|
|
132
|
+
* and its acceptance criteria (verified = passing, broken = ran-and-failed).
|
|
133
|
+
*/
|
|
134
|
+
getEnforce(config?: EnforceConfig): EnforceReport;
|
|
90
135
|
private reflectContext;
|
|
91
136
|
/** Run a reflection pass, persist the batch, return the open proposals. */
|
|
92
137
|
reflectAnalyze(): AnalyzeResult;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,UAAU,EACV,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,0BAA0B,EAC3B,MAAM,SAAS,CAAC;AAUjB,OAAO,EAEL,aAAa,EACb,WAAW,EACX,UAAU,EAGX,MAAM,cAAc,CAAC;AAEtB,OAAO,EAGL,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAqB,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAOL,aAAa,EACb,WAAW,EACX,QAAQ,EACR,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,EACZ,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -42,7 +42,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
42
42
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
43
43
|
};
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.
|
|
45
|
+
exports.FileLock = exports.Mutex = exports.defaultLogger = exports.silentLogger = exports.getLogger = exports.setLogger = exports.ConfigError = exports.VectorError = exports.SearchError = exports.DatabaseError = exports.ParseError = exports.FileError = exports.SpecShipError = exports.ENFORCE_CONFIG_FILE = exports.loadEnforceConfig = exports.evaluateEnforcement = exports.FITNESS_CONFIG_FILE = exports.loadFitnessRules = exports.evaluateFitness = exports.CONFIG_FILE_NAME = exports.DEFAULT_EXCLUDE = exports.DEFAULT_THRESHOLDS = exports.resolveExclude = exports.resolveThresholds = exports.computeMaintainability = exports.undoProposal = exports.applyProposal = exports.previewProposal = exports.ReflectStore = exports.reflectSweep = exports.reflectAnalyze = exports.computeDomainGapSeed = exports.findBriefsForSpec = exports.summarizeBriefFunnel = exports.resolveBriefLink = exports.computeSpecFunnel = exports.loadAllGrammars = exports.loadGrammarsForLanguages = exports.initGrammars = exports.getSupportedLanguages = exports.isGrammarLoaded = exports.isLanguageSupported = exports.detectLanguage = exports.SPECSHIP_DIR = exports.findNearestSpecShipRoot = exports.isInitialized = exports.getSpecShipDir = exports.QueryBuilder = exports.DatabaseConnection = exports.getDatabasePath = void 0;
|
|
46
|
+
exports.SpecShip = exports.MCPServer = exports.LockUnavailableError = exports.FileWatcher = exports.MemoryMonitor = exports.throttle = exports.debounce = exports.processInBatches = void 0;
|
|
46
47
|
const path = __importStar(require("path"));
|
|
47
48
|
const db_1 = require("./db");
|
|
48
49
|
const queries_1 = require("./db/queries");
|
|
@@ -52,12 +53,16 @@ const markdown_spec_extractor_1 = require("./extraction/specs/markdown-spec-extr
|
|
|
52
53
|
const resolution_1 = require("./resolution");
|
|
53
54
|
const spec_link_resolver_1 = require("./resolution/spec-link-resolver");
|
|
54
55
|
const brief_link_resolver_1 = require("./resolution/brief-link-resolver");
|
|
56
|
+
const domain_gap_seed_1 = require("./resolution/domain-gap-seed");
|
|
55
57
|
const spec_queries_1 = require("./db/spec-queries");
|
|
56
58
|
const reflect_1 = require("./reflect");
|
|
57
59
|
const os = __importStar(require("os"));
|
|
58
60
|
const fs = __importStar(require("fs"));
|
|
59
61
|
const crypto_1 = require("crypto");
|
|
60
62
|
const graph_1 = require("./graph");
|
|
63
|
+
const maintainability_1 = require("./graph/maintainability");
|
|
64
|
+
const fitness_1 = require("./fitness/fitness");
|
|
65
|
+
const enforce_1 = require("./enforce/enforce");
|
|
61
66
|
const context_1 = require("./context");
|
|
62
67
|
const utils_1 = require("./utils");
|
|
63
68
|
const sync_1 = require("./sync");
|
|
@@ -90,6 +95,8 @@ Object.defineProperty(exports, "computeSpecFunnel", { enumerable: true, get: fun
|
|
|
90
95
|
Object.defineProperty(exports, "resolveBriefLink", { enumerable: true, get: function () { return brief_link_resolver_2.resolveBriefLink; } });
|
|
91
96
|
Object.defineProperty(exports, "summarizeBriefFunnel", { enumerable: true, get: function () { return brief_link_resolver_2.summarizeBriefFunnel; } });
|
|
92
97
|
Object.defineProperty(exports, "findBriefsForSpec", { enumerable: true, get: function () { return brief_link_resolver_2.findBriefsForSpec; } });
|
|
98
|
+
var domain_gap_seed_2 = require("./resolution/domain-gap-seed");
|
|
99
|
+
Object.defineProperty(exports, "computeDomainGapSeed", { enumerable: true, get: function () { return domain_gap_seed_2.computeDomainGapSeed; } });
|
|
93
100
|
// Reflection engine (REFLECT-DOC) — proposals mined from transcripts.
|
|
94
101
|
var reflect_2 = require("./reflect");
|
|
95
102
|
Object.defineProperty(exports, "reflectAnalyze", { enumerable: true, get: function () { return reflect_2.analyze; } });
|
|
@@ -98,6 +105,24 @@ Object.defineProperty(exports, "ReflectStore", { enumerable: true, get: function
|
|
|
98
105
|
Object.defineProperty(exports, "previewProposal", { enumerable: true, get: function () { return reflect_2.previewProposal; } });
|
|
99
106
|
Object.defineProperty(exports, "applyProposal", { enumerable: true, get: function () { return reflect_2.applyProposal; } });
|
|
100
107
|
Object.defineProperty(exports, "undoProposal", { enumerable: true, get: function () { return reflect_2.undoProposal; } });
|
|
108
|
+
// Maintainability harness (MAINT-DOC / REQ-MAINT-001).
|
|
109
|
+
var maintainability_2 = require("./graph/maintainability");
|
|
110
|
+
Object.defineProperty(exports, "computeMaintainability", { enumerable: true, get: function () { return maintainability_2.computeMaintainability; } });
|
|
111
|
+
Object.defineProperty(exports, "resolveThresholds", { enumerable: true, get: function () { return maintainability_2.resolveThresholds; } });
|
|
112
|
+
Object.defineProperty(exports, "resolveExclude", { enumerable: true, get: function () { return maintainability_2.resolveExclude; } });
|
|
113
|
+
Object.defineProperty(exports, "DEFAULT_THRESHOLDS", { enumerable: true, get: function () { return maintainability_2.DEFAULT_THRESHOLDS; } });
|
|
114
|
+
Object.defineProperty(exports, "DEFAULT_EXCLUDE", { enumerable: true, get: function () { return maintainability_2.DEFAULT_EXCLUDE; } });
|
|
115
|
+
Object.defineProperty(exports, "CONFIG_FILE_NAME", { enumerable: true, get: function () { return maintainability_2.CONFIG_FILE_NAME; } });
|
|
116
|
+
// Architecture-fitness harness (FITNESS-DOC / REQ-FITNESS-001…003).
|
|
117
|
+
var fitness_2 = require("./fitness/fitness");
|
|
118
|
+
Object.defineProperty(exports, "evaluateFitness", { enumerable: true, get: function () { return fitness_2.evaluateFitness; } });
|
|
119
|
+
Object.defineProperty(exports, "loadFitnessRules", { enumerable: true, get: function () { return fitness_2.loadFitnessRules; } });
|
|
120
|
+
Object.defineProperty(exports, "FITNESS_CONFIG_FILE", { enumerable: true, get: function () { return fitness_2.FITNESS_CONFIG_FILE; } });
|
|
121
|
+
// Enforcement mode (ENFORCE-DOC / REQ-ENFORCE-001…003).
|
|
122
|
+
var enforce_2 = require("./enforce/enforce");
|
|
123
|
+
Object.defineProperty(exports, "evaluateEnforcement", { enumerable: true, get: function () { return enforce_2.evaluateEnforcement; } });
|
|
124
|
+
Object.defineProperty(exports, "loadEnforceConfig", { enumerable: true, get: function () { return enforce_2.loadEnforceConfig; } });
|
|
125
|
+
Object.defineProperty(exports, "ENFORCE_CONFIG_FILE", { enumerable: true, get: function () { return enforce_2.ENFORCE_CONFIG_FILE; } });
|
|
101
126
|
var errors_1 = require("./errors");
|
|
102
127
|
Object.defineProperty(exports, "SpecShipError", { enumerable: true, get: function () { return errors_1.SpecShipError; } });
|
|
103
128
|
Object.defineProperty(exports, "FileError", { enumerable: true, get: function () { return errors_1.FileError; } });
|
|
@@ -174,6 +199,59 @@ class SpecShip {
|
|
|
174
199
|
getSpecFunnel() {
|
|
175
200
|
return (0, brief_link_resolver_1.computeSpecFunnel)(this.specQueries);
|
|
176
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* The domain gap-seed (REQ-DOMAIN-003): the structural code entities and
|
|
204
|
+
* non-domain specs that no domain fact yet covers, plus a coverage tally.
|
|
205
|
+
* Read-only — computed from live state, writes nothing. Exposed on the
|
|
206
|
+
* instance so the `/ss-domain` command and the desktop server can drive it
|
|
207
|
+
* without runtime-importing the package.
|
|
208
|
+
*/
|
|
209
|
+
getDomainGapSeed() {
|
|
210
|
+
return (0, domain_gap_seed_1.computeDomainGapSeed)(this.queries, this.specQueries, this.specLinkResolver);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* The maintainability harness (REQ-MAINT-001): coupling, size hotspots,
|
|
214
|
+
* dependency cycles, and dead-code candidates, derived from the graph with no
|
|
215
|
+
* additional parse. Read-only and deterministic. Exposed on the instance so
|
|
216
|
+
* the CLI / MCP / desktop server can drive it without runtime-importing the
|
|
217
|
+
* package.
|
|
218
|
+
*/
|
|
219
|
+
getMaintainability(thresholds) {
|
|
220
|
+
return (0, maintainability_1.computeMaintainability)(this.queries, (0, maintainability_1.resolveThresholds)(this.projectRoot, thresholds), (0, maintainability_1.resolveExclude)(this.projectRoot));
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* The architecture-fitness harness (REQ-FITNESS-001/002): evaluate declarative
|
|
224
|
+
* architecture rules (from specship.config.json `fitness.rules`, or an explicit
|
|
225
|
+
* override) against the graph. Read-only, deterministic. Exposed on the
|
|
226
|
+
* instance so the CLI / MCP / server drive it without runtime-importing the
|
|
227
|
+
* package.
|
|
228
|
+
*/
|
|
229
|
+
getFitness(rules) {
|
|
230
|
+
return (0, fitness_1.evaluateFitness)(this.queries, rules ?? (0, fitness_1.loadFitnessRules)(this.projectRoot));
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Enforcement mode (REQ-ENFORCE-001/002/003): compose drift + fitness +
|
|
234
|
+
* maintainability + the spec→test→verify behaviour chain into one gate. Which
|
|
235
|
+
* checks gate vs advise comes from specship.config.json `enforce` (or an
|
|
236
|
+
* explicit override); with no config every check is advisory and the run
|
|
237
|
+
* passes. The behaviour chain reads `tests`-kind spec-links on each requirement
|
|
238
|
+
* and its acceptance criteria (verified = passing, broken = ran-and-failed).
|
|
239
|
+
*/
|
|
240
|
+
getEnforce(config) {
|
|
241
|
+
const cfg = config ?? (0, enforce_1.loadEnforceConfig)(this.projectRoot);
|
|
242
|
+
const sq = this.specQueries;
|
|
243
|
+
const drift = sq.getLinksByState(['drifted', 'broken', 'orphaned']);
|
|
244
|
+
const requirements = sq.getSpecsByKind('requirement').map((req) => {
|
|
245
|
+
const testsLinks = sq.getLinksBySpec(req.id).filter((l) => l.kind === 'tests');
|
|
246
|
+
for (const child of sq.getSpecsByParent(req.id)) {
|
|
247
|
+
if (child.kind === 'acceptance') {
|
|
248
|
+
testsLinks.push(...sq.getLinksBySpec(child.id).filter((l) => l.kind === 'tests'));
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return { id: req.id, title: req.title, testsLinks };
|
|
252
|
+
});
|
|
253
|
+
return (0, enforce_1.evaluateEnforcement)({ drift, fitness: this.getFitness(), maintainability: this.getMaintainability(), requirements }, cfg);
|
|
254
|
+
}
|
|
177
255
|
// ===========================================================================
|
|
178
256
|
// Reflection engine (REFLECT-DOC)
|
|
179
257
|
//
|