@dzhechkov/harness-core 0.3.115 → 0.3.116

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.
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Guided feature-adr onboarding (feature guided-feature-adr-setup, ADR-001).
3
+ *
4
+ * The `configure-feature-adr` SKILL runs a short interview and fills a `SetupSpec`; `dz feature-adr-setup`
5
+ * scaffolds the project-awareness files from that spec — so a user configures feature-adr WITHOUT knowing
6
+ * any manifest schema ("complex inside, simple outside"). The plan/render/scaffold builders are PURE +
7
+ * deterministic (sorted, no clock/random); the scan helper does disk I/O with TOP-LEVEL node:fs (ESM).
8
+ *
9
+ * SAFETY PROPERTY (ADR-001 §2, load-bearing): `scaffoldFromSpec` NEVER emits a full overwrite of an existing
10
+ * file. A structured file (manifest / project-skills) is UNION-merged (existing content preserved); a prose
11
+ * doc (vision.md / testing.md) that already exists is left untouched (`unchanged`), never clobbered.
12
+ */
13
+ import type { Subsystem, SubsystemManifest } from './architecture.js';
14
+ import type { ProjectSkillManifest, ExtraSkill } from './project-skills.js';
15
+ export interface VisionSpec {
16
+ readonly core: string;
17
+ readonly direction?: string;
18
+ readonly boundaries?: readonly string[];
19
+ readonly principles?: readonly string[];
20
+ }
21
+ export interface TestingSpec {
22
+ readonly commands?: readonly string[];
23
+ readonly doneDefinition?: string;
24
+ readonly gates?: readonly string[];
25
+ }
26
+ export type SubsystemSpec = Subsystem;
27
+ export interface SetupSpec {
28
+ readonly vision?: VisionSpec;
29
+ readonly subsystems?: readonly SubsystemSpec[];
30
+ readonly testing?: TestingSpec;
31
+ /** critic: 'auto' ⇒ a generated project-critic skill; a path ⇒ that file. brand/impl-bar: a path. */
32
+ readonly roles?: Partial<Record<'critic' | 'brand' | 'impl-bar', string>>;
33
+ readonly extra?: readonly ExtraSkill[];
34
+ }
35
+ export interface SetupScan {
36
+ readonly visionExists: boolean;
37
+ readonly manifestExists: boolean;
38
+ readonly projectSkillsExists: boolean;
39
+ readonly testingExists: boolean;
40
+ readonly packages: readonly string[];
41
+ readonly reviewCorpus: boolean;
42
+ }
43
+ export interface SetupPlan {
44
+ readonly exists: {
45
+ readonly vision: boolean;
46
+ readonly manifest: boolean;
47
+ readonly projectSkills: boolean;
48
+ readonly testing: boolean;
49
+ };
50
+ readonly discoveredPackages: readonly string[];
51
+ readonly hasReviewCorpus: boolean;
52
+ readonly missing: readonly string[];
53
+ readonly suggestions: readonly string[];
54
+ }
55
+ export interface ScaffoldFile {
56
+ readonly path: string;
57
+ readonly action: 'create' | 'augment' | 'unchanged';
58
+ readonly content: string;
59
+ readonly note?: string;
60
+ }
61
+ export interface ScaffoldResult {
62
+ readonly files: readonly ScaffoldFile[];
63
+ }
64
+ /** One existing on-disk file: `exists` distinguishes ABSENT from EXISTS-BUT-UNREADABLE (never clobber either). */
65
+ export interface ExistingFile {
66
+ readonly exists: boolean;
67
+ readonly content?: string;
68
+ }
69
+ /** The existing files the scaffold compares against. */
70
+ export interface ExistingScaffoldFiles {
71
+ readonly vision: ExistingFile;
72
+ readonly manifest: ExistingFile;
73
+ readonly projectSkills: ExistingFile;
74
+ readonly testing: ExistingFile;
75
+ }
76
+ export declare const P_VISION = "architecture/vision.md";
77
+ export declare const P_TESTING = "architecture/testing.md";
78
+ export declare const P_MANIFEST = "architecture/subsystems.manifest.json";
79
+ export declare const P_PROJECT_SKILLS = "architecture/project-skills.json";
80
+ export declare const P_CRITIC = "architecture/project-critic/SKILL.md";
81
+ /** What exists, what is discoverable, what is still missing — the read-only "which docs, and where?" answer (FR-2). PURE. */
82
+ export declare function buildSetupPlan(scan: SetupScan): SetupPlan;
83
+ /** Suggest a starter subsystem grouping from discovered packages (deterministic heuristic — user refines). PURE. */
84
+ export declare function suggestSubsystems(packages: readonly string[]): SubsystemSpec[];
85
+ /** architecture/vision.md from the spec. Deterministic. */
86
+ export declare function renderVisionDoc(v: VisionSpec): string;
87
+ /** architecture/testing.md from the spec — the project's verification procedure (feeds Step 8 QE). Deterministic. */
88
+ export declare function renderTestingDoc(t: TestingSpec): string;
89
+ /** Build a subsystem manifest from the spec's subsystems. PURE. */
90
+ export declare function buildManifestFromSpec(subs: readonly SubsystemSpec[]): SubsystemManifest;
91
+ /** Wire the project-skills manifest from the spec: product-vision + testing point at the scaffolded docs;
92
+ * critic/brand/impl-bar are added when the spec supplies them; extra is carried through. PURE. */
93
+ export declare function buildProjectSkillsFromSpec(spec: SetupSpec): ProjectSkillManifest;
94
+ /**
95
+ * Build the scaffold plan from the spec + what already exists. PURE + deterministic. AUGMENT-NEVER-CLOBBER
96
+ * (ADR-001 §2, load-bearing): a file that EXISTS is never replaced — prose is left as-is; structured files
97
+ * are append-only merged (existing content, order, and unknown keys preserved). A file only gets `create`
98
+ * when it is genuinely ABSENT. Malformed existing content never crashes and never clobbers.
99
+ */
100
+ export declare function scaffoldFromSpec(spec: SetupSpec, existing: ExistingScaffoldFiles): ScaffoldResult;
101
+ /** Human preview of the scaffold plan. Deterministic. */
102
+ export declare function renderScaffoldPreview(result: ScaffoldResult): string;
103
+ /** Scan the repo for the setup plan: what exists + discovered packages + a review corpus. Impure; never throws. */
104
+ export declare function scanForSetup(repoRoot: string): SetupScan;
105
+ /** Read the existing files the scaffold needs to compare against. Impure; never throws. */
106
+ export declare function readExistingForScaffold(repoRoot: string): ExistingScaffoldFiles;
107
+ //# sourceMappingURL=feature-adr-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-adr-setup.d.ts","sourceRoot":"","sources":["../src/feature-adr-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Guided feature-adr onboarding (feature guided-feature-adr-setup, ADR-001).
3
+ *
4
+ * The `configure-feature-adr` SKILL runs a short interview and fills a `SetupSpec`; `dz feature-adr-setup`
5
+ * scaffolds the project-awareness files from that spec — so a user configures feature-adr WITHOUT knowing
6
+ * any manifest schema ("complex inside, simple outside"). The plan/render/scaffold builders are PURE +
7
+ * deterministic (sorted, no clock/random); the scan helper does disk I/O with TOP-LEVEL node:fs (ESM).
8
+ *
9
+ * SAFETY PROPERTY (ADR-001 §2, load-bearing): `scaffoldFromSpec` NEVER emits a full overwrite of an existing
10
+ * file. A structured file (manifest / project-skills) is UNION-merged (existing content preserved); a prose
11
+ * doc (vision.md / testing.md) that already exists is left untouched (`unchanged`), never clobbered.
12
+ */
13
+ import { existsSync, readFileSync } from 'node:fs';
14
+ import { join } from 'node:path';
15
+ import { scanWorkspacePackages } from './architecture.js';
16
+ import { findReviewArtifacts } from './rake-analyzer.js';
17
+ // Canonical committed paths (ADR: everything under architecture/).
18
+ export const P_VISION = 'architecture/vision.md';
19
+ export const P_TESTING = 'architecture/testing.md';
20
+ export const P_MANIFEST = 'architecture/subsystems.manifest.json';
21
+ export const P_PROJECT_SKILLS = 'architecture/project-skills.json';
22
+ export const P_CRITIC = 'architecture/project-critic/SKILL.md';
23
+ const byStr = (a, b) => (a < b ? -1 : a > b ? 1 : 0);
24
+ const uniqSorted = (xs) => [...new Set(xs)].sort(byStr);
25
+ /** What exists, what is discoverable, what is still missing — the read-only "which docs, and where?" answer (FR-2). PURE. */
26
+ export function buildSetupPlan(scan) {
27
+ const missing = [];
28
+ if (!scan.visionExists)
29
+ missing.push(P_VISION);
30
+ if (!scan.manifestExists)
31
+ missing.push(P_MANIFEST);
32
+ if (!scan.testingExists)
33
+ missing.push(P_TESTING);
34
+ if (!scan.projectSkillsExists)
35
+ missing.push(P_PROJECT_SKILLS);
36
+ const suggestions = [];
37
+ if (!scan.manifestExists && scan.packages.length > 0)
38
+ suggestions.push(`auto-scaffold ${P_MANIFEST} from ${scan.packages.length} discovered package(s) — you refine the grouping`);
39
+ if (!scan.visionExists)
40
+ suggestions.push(`author ${P_VISION} from a short interview (seeded from the README)`);
41
+ if (!scan.testingExists)
42
+ suggestions.push(`author ${P_TESTING} from a short interview (test commands, definition of done, gates)`);
43
+ if (scan.reviewCorpus)
44
+ suggestions.push('generate the `critic` role from your review history: `dz mr-rakes --gen-critic`');
45
+ return {
46
+ exists: { vision: scan.visionExists, manifest: scan.manifestExists, projectSkills: scan.projectSkillsExists, testing: scan.testingExists },
47
+ discoveredPackages: uniqSorted(scan.packages),
48
+ hasReviewCorpus: scan.reviewCorpus,
49
+ missing: missing.sort(byStr),
50
+ suggestions,
51
+ };
52
+ }
53
+ /** Suggest a starter subsystem grouping from discovered packages (deterministic heuristic — user refines). PURE. */
54
+ export function suggestSubsystems(packages) {
55
+ const pkgs = uniqSorted(packages);
56
+ const foundation = [];
57
+ const arsenal = [];
58
+ const other = [];
59
+ for (const p of pkgs) {
60
+ if (p.startsWith('skills-'))
61
+ arsenal.push(p);
62
+ else if (/^(core|.*-core|.*-cli|.*-presets|adapter-)/.test(p))
63
+ foundation.push(p);
64
+ else
65
+ other.push(p);
66
+ }
67
+ const subs = [];
68
+ if (foundation.length)
69
+ subs.push({ id: 'foundation', label: 'Foundation', job: null, desc: 'Core, CLI, presets, adapters — the substrate.', packages: foundation.filter((p) => !p.startsWith('adapter-')), packagePatterns: foundation.some((p) => p.startsWith('adapter-')) ? ['adapter-*'] : [], commands: [] });
70
+ if (arsenal.length)
71
+ subs.push({ id: 'arsenal', label: 'Arsenal', job: null, desc: 'The skills themselves.', packages: [], packagePatterns: ['skills-*'], commands: [] });
72
+ if (other.length)
73
+ subs.push({ id: 'app', label: 'Application', job: null, desc: 'Product-specific packages (rename/split to your real subsystems).', packages: other, packagePatterns: [], commands: [] });
74
+ return subs;
75
+ }
76
+ /** architecture/vision.md from the spec. Deterministic. */
77
+ export function renderVisionDoc(v) {
78
+ const lines = ['# Product Vision', '', '> Curated compass. feature-adr Step 0 reads this and checks new features against it. Edit when intent changes.', '', '## What it is', v.core.trim()];
79
+ if (v.direction) {
80
+ lines.push('', '## Where it is going', v.direction.trim());
81
+ }
82
+ if (v.boundaries && v.boundaries.length) {
83
+ lines.push('', '## What it consciously does NOT do');
84
+ for (const b of v.boundaries)
85
+ lines.push(`- ${b}`);
86
+ }
87
+ if (v.principles && v.principles.length) {
88
+ lines.push('', '## Principles that must not be broken');
89
+ v.principles.forEach((p, i) => lines.push(`${i + 1}. ${p}`));
90
+ }
91
+ return lines.join('\n') + '\n';
92
+ }
93
+ /** architecture/testing.md from the spec — the project's verification procedure (feeds Step 8 QE). Deterministic. */
94
+ export function renderTestingDoc(t) {
95
+ const lines = ['# Testing & verification (this project)', '', '> feature-adr folds this into Step 8 (QE) as the `testing` role. What it means to be verified HERE.', ''];
96
+ if (t.commands && t.commands.length) {
97
+ lines.push('## Verification commands');
98
+ for (const c of t.commands)
99
+ lines.push('- `' + c + '`');
100
+ lines.push('');
101
+ }
102
+ if (t.doneDefinition) {
103
+ lines.push('## Definition of "done"', t.doneDefinition.trim(), '');
104
+ }
105
+ if (t.gates && t.gates.length) {
106
+ lines.push('## Required gates');
107
+ for (const g of t.gates)
108
+ lines.push(`- ${g}`);
109
+ lines.push('');
110
+ }
111
+ return lines.join('\n');
112
+ }
113
+ /** Build a subsystem manifest from the spec's subsystems. PURE. */
114
+ export function buildManifestFromSpec(subs) {
115
+ return { version: 1, subsystems: [...subs].sort((a, b) => byStr(a.id, b.id)) };
116
+ }
117
+ /** Wire the project-skills manifest from the spec: product-vision + testing point at the scaffolded docs;
118
+ * critic/brand/impl-bar are added when the spec supplies them; extra is carried through. PURE. */
119
+ export function buildProjectSkillsFromSpec(spec) {
120
+ const roles = { 'product-vision': P_VISION };
121
+ if (spec.testing)
122
+ roles['testing'] = P_TESTING;
123
+ const r = spec.roles ?? {};
124
+ if (r.critic)
125
+ roles['critic'] = r.critic === 'auto' ? P_CRITIC : r.critic;
126
+ if (r.brand)
127
+ roles['brand'] = r.brand;
128
+ if (r['impl-bar'])
129
+ roles['impl-bar'] = r['impl-bar'];
130
+ return { version: 1, roles, ...(spec.extra && spec.extra.length ? { extra: [...spec.extra] } : {}) };
131
+ }
132
+ // ── Union-merge helpers (augment; preserve existing byte-for-byte incl. unknown keys, order, duplicates) ──
133
+ const isObj = (x) => x !== null && typeof x === 'object' && !Array.isArray(x);
134
+ /**
135
+ * Merge new subsystems into an EXISTING parsed manifest object. Returns null when the existing shape is not
136
+ * safely mergeable (so the caller leaves the file untouched). Preserves ALL existing top-level keys (owner,
137
+ * etc.), the existing subsystem array VERBATIM (order + duplicates), and only APPENDS subsystems whose id is
138
+ * not already present. Cross-model QE: never drop/reorder/dedupe the user's content.
139
+ */
140
+ function mergeManifest(existingObj, nextSubs) {
141
+ if (!isObj(existingObj) || !Array.isArray(existingObj.subsystems))
142
+ return null; // malformed shape → don't touch
143
+ const ids = new Set();
144
+ for (const s of existingObj.subsystems)
145
+ if (isObj(s) && typeof s.id === 'string')
146
+ ids.add(s.id);
147
+ const appended = nextSubs.filter((s) => !ids.has(s.id));
148
+ const merged = { ...existingObj, subsystems: [...existingObj.subsystems, ...appended] };
149
+ return { content: JSON.stringify(merged, null, 2) + '\n', added: appended.map((s) => s.id) };
150
+ }
151
+ /** Merge new roles/extra into an EXISTING parsed project-skills object. Null when unsafe. Preserves unknown
152
+ * keys (metadata, etc.) + existing roles/extra; appends only new ones. Guards non-object/array shapes. */
153
+ function mergeProjectSkills(existingObj, nextRoles, nextExtra) {
154
+ if (!isObj(existingObj))
155
+ return null;
156
+ const existingRoles = existingObj.roles;
157
+ if (existingRoles !== undefined && !isObj(existingRoles))
158
+ return null; // roles present but not an object → don't touch
159
+ const roles = { ...(isObj(existingRoles) ? existingRoles : {}) };
160
+ const added = [];
161
+ for (const [k, v] of Object.entries(nextRoles))
162
+ if (!(k in roles) && typeof v === 'string') {
163
+ roles[k] = v;
164
+ added.push(`roles.${k}`);
165
+ }
166
+ const existingExtra = existingObj.extra;
167
+ if (existingExtra !== undefined && !Array.isArray(existingExtra))
168
+ return null; // extra present but not an array → don't touch
169
+ const extra = Array.isArray(existingExtra) ? [...existingExtra] : [];
170
+ const seen = new Set(extra.filter(isObj).map((e) => `${String(e.skill)}|${String(e.phase)}`));
171
+ for (const e of nextExtra) {
172
+ const key = `${e.skill}|${e.phase}`;
173
+ if (!seen.has(key)) {
174
+ extra.push(e);
175
+ seen.add(key);
176
+ added.push(`extra:${e.skill}`);
177
+ }
178
+ }
179
+ const merged = { ...existingObj, roles, ...(extra.length ? { extra } : {}) };
180
+ return { content: JSON.stringify(merged, null, 2) + '\n', added };
181
+ }
182
+ const tryParse = (s) => { try {
183
+ return JSON.parse(s);
184
+ }
185
+ catch {
186
+ return PARSE_FAIL;
187
+ } };
188
+ const PARSE_FAIL = Symbol('parse-fail');
189
+ /** A prose (create-if-absent-else-leave) scaffold decision — never merges prose. */
190
+ function proseFile(path, existing, render) {
191
+ if (!existing.exists)
192
+ return { path, action: 'create', content: render() };
193
+ return { path, action: 'unchanged', content: existing.content ?? '', note: 'exists — left as-is (edit by hand; never overwritten)' };
194
+ }
195
+ /** A structured (union-merge) scaffold decision. Presence gates overwrite: an existing file is NEVER
196
+ * replaced — unreadable/unparseable/unmergeable → `unchanged`; parseable → append-only merge. */
197
+ function structuredFile(path, existing, render, merge) {
198
+ if (!existing.exists)
199
+ return { path, action: 'create', content: render() };
200
+ if (existing.content === undefined)
201
+ return { path, action: 'unchanged', content: '', note: 'exists but unreadable — left as-is (never overwritten)' };
202
+ const parsed = tryParse(existing.content);
203
+ if (parsed === PARSE_FAIL)
204
+ return { path, action: 'unchanged', content: existing.content, note: 'exists but not valid JSON — left as-is; fix by hand' };
205
+ const m = merge(parsed);
206
+ if (m === null)
207
+ return { path, action: 'unchanged', content: existing.content, note: 'exists with a non-standard shape — left as-is; merge by hand' };
208
+ return { path, action: m.added.length ? 'augment' : 'unchanged', content: m.content, note: m.added.length ? `adds ${m.added.join(', ')}` : 'no new items' };
209
+ }
210
+ /**
211
+ * Build the scaffold plan from the spec + what already exists. PURE + deterministic. AUGMENT-NEVER-CLOBBER
212
+ * (ADR-001 §2, load-bearing): a file that EXISTS is never replaced — prose is left as-is; structured files
213
+ * are append-only merged (existing content, order, and unknown keys preserved). A file only gets `create`
214
+ * when it is genuinely ABSENT. Malformed existing content never crashes and never clobbers.
215
+ */
216
+ export function scaffoldFromSpec(spec, existing) {
217
+ const files = [];
218
+ if (spec.vision)
219
+ files.push(proseFile(P_VISION, existing.vision, () => renderVisionDoc(spec.vision)));
220
+ if (spec.testing)
221
+ files.push(proseFile(P_TESTING, existing.testing, () => renderTestingDoc(spec.testing)));
222
+ if (spec.subsystems && spec.subsystems.length) {
223
+ const nextSubs = spec.subsystems;
224
+ files.push(structuredFile(P_MANIFEST, existing.manifest, () => JSON.stringify(buildManifestFromSpec(nextSubs), null, 2) + '\n', (parsed) => mergeManifest(parsed, [...nextSubs].sort((a, b) => byStr(a.id, b.id)))));
225
+ }
226
+ const nextPS = buildProjectSkillsFromSpec(spec);
227
+ files.push(structuredFile(P_PROJECT_SKILLS, existing.projectSkills, () => JSON.stringify(nextPS, null, 2) + '\n', (parsed) => mergeProjectSkills(parsed, (nextPS.roles ?? {}), nextPS.extra ?? [])));
228
+ return { files: [...files].sort((a, b) => byStr(a.path, b.path)) };
229
+ }
230
+ /** Human preview of the scaffold plan. Deterministic. */
231
+ export function renderScaffoldPreview(result) {
232
+ const icon = (a) => (a === 'create' ? '✚ create' : a === 'augment' ? '✎ augment' : '· unchanged');
233
+ const lines = ['feature-adr-setup — planned files (pass --apply to write; existing files are never clobbered):', ''];
234
+ for (const f of result.files)
235
+ lines.push(` ${icon(f.action)} ${f.path}${f.note ? ` — ${f.note}` : ''}`);
236
+ return lines.join('\n');
237
+ }
238
+ // ── Thin I/O (top-level fs; never throws) ─────────────────────────────────────────────────────────────
239
+ /** Read one file as an ExistingFile — distinguishes ABSENT from EXISTS-BUT-UNREADABLE (cross-model QE). */
240
+ function readExistingFile(p) {
241
+ let exists = false;
242
+ try {
243
+ exists = existsSync(p);
244
+ }
245
+ catch {
246
+ return { exists: false };
247
+ }
248
+ if (!exists)
249
+ return { exists: false };
250
+ try {
251
+ return { exists: true, content: readFileSync(p, 'utf8') };
252
+ }
253
+ catch {
254
+ return { exists: true };
255
+ }
256
+ }
257
+ /** Scan the repo for the setup plan: what exists + discovered packages + a review corpus. Impure; never throws. */
258
+ export function scanForSetup(repoRoot) {
259
+ const has = (rel) => { try {
260
+ return existsSync(join(repoRoot, rel));
261
+ }
262
+ catch {
263
+ return false;
264
+ } };
265
+ let packages = [];
266
+ let reviewCorpus = false;
267
+ try {
268
+ packages = scanWorkspacePackages(repoRoot).map((p) => p.name);
269
+ }
270
+ catch { /* none */ }
271
+ try {
272
+ reviewCorpus = findReviewArtifacts(repoRoot).length > 0;
273
+ }
274
+ catch { /* none */ }
275
+ return {
276
+ visionExists: has(P_VISION),
277
+ manifestExists: has(P_MANIFEST),
278
+ projectSkillsExists: has(P_PROJECT_SKILLS),
279
+ testingExists: has(P_TESTING),
280
+ packages,
281
+ reviewCorpus,
282
+ };
283
+ }
284
+ /** Read the existing files the scaffold needs to compare against. Impure; never throws. */
285
+ export function readExistingForScaffold(repoRoot) {
286
+ return {
287
+ vision: readExistingFile(join(repoRoot, P_VISION)),
288
+ manifest: readExistingFile(join(repoRoot, P_MANIFEST)),
289
+ projectSkills: readExistingFile(join(repoRoot, P_PROJECT_SKILLS)),
290
+ testing: readExistingFile(join(repoRoot, P_TESTING)),
291
+ };
292
+ }
293
+ //# sourceMappingURL=feature-adr-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-adr-setup.js","sourceRoot":"","sources":["../src/feature-adr-setup.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -86,4 +86,5 @@ export * from './architecture.js';
86
86
  export * from './project-skills.js';
87
87
  export * from './rake-analyzer.js';
88
88
  export * from './session-retro.js';
89
+ export * from './feature-adr-setup.js';
89
90
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -52,4 +52,5 @@ export * from './architecture.js';
52
52
  export * from './project-skills.js';
53
53
  export * from './rake-analyzer.js';
54
54
  export * from './session-retro.js';
55
+ export * from './feature-adr-setup.js';
55
56
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -19,9 +19,13 @@
19
19
  /** The injectable pipeline stages a project skill can target. */
20
20
  export type Stage = 'design' | 'code' | 'qe';
21
21
  /** The CLOSED core-role enum (each has a fixed stage mapping). */
22
- export type CoreRole = 'product-vision' | 'critic' | 'brand' | 'impl-bar';
22
+ export type CoreRole = 'product-vision' | 'critic' | 'brand' | 'impl-bar' | 'testing';
23
23
  export declare const CORE_ROLES: readonly CoreRole[];
24
- /** Fixed role→stage map (FR-3). product-vision informs design + QE; impl-bar the code; critic the QE; brand the code. */
24
+ /**
25
+ * Fixed role→stage map. product-vision informs design + QE; impl-bar the code; critic + testing the QE;
26
+ * brand the code. `testing` (R5) is the project's verification procedure (test commands, "done", gates) —
27
+ * distinct from `critic` (the review lens): different SOURCE (testing = interview, critic = auto-mined).
28
+ */
25
29
  export declare const ROLE_STAGES: Readonly<Record<CoreRole, readonly Stage[]>>;
26
30
  /** Default doc for the product-vision role when the manifest omits it (the R1 seam). */
27
31
  export declare const PRODUCT_VISION_DEFAULT = "architecture/vision.md";
@@ -1 +1 @@
1
- {"version":3,"file":"project-skills.d.ts","sourceRoot":"","sources":["../src/project-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-skills.d.ts","sourceRoot":"","sources":["../src/project-skills.ts"],"names":[],"mappings":"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"}
@@ -18,13 +18,18 @@
18
18
  */
19
19
  import { existsSync, readFileSync, realpathSync } from 'node:fs';
20
20
  import { join, resolve, isAbsolute, sep } from 'node:path';
21
- export const CORE_ROLES = ['product-vision', 'critic', 'brand', 'impl-bar'];
22
- /** Fixed role→stage map (FR-3). product-vision informs design + QE; impl-bar the code; critic the QE; brand the code. */
21
+ export const CORE_ROLES = ['product-vision', 'critic', 'brand', 'impl-bar', 'testing'];
22
+ /**
23
+ * Fixed role→stage map. product-vision informs design + QE; impl-bar the code; critic + testing the QE;
24
+ * brand the code. `testing` (R5) is the project's verification procedure (test commands, "done", gates) —
25
+ * distinct from `critic` (the review lens): different SOURCE (testing = interview, critic = auto-mined).
26
+ */
23
27
  export const ROLE_STAGES = {
24
28
  'product-vision': ['design', 'qe'],
25
29
  'impl-bar': ['code'],
26
30
  'critic': ['qe'],
27
31
  'brand': ['code'],
32
+ 'testing': ['qe'],
28
33
  };
29
34
  /** Default doc for the product-vision role when the manifest omits it (the R1 seam). */
30
35
  export const PRODUCT_VISION_DEFAULT = 'architecture/vision.md';
@@ -1 +1 @@
1
- {"version":3,"file":"project-skills.js","sourceRoot":"","sources":["../src/project-skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-skills.js","sourceRoot":"","sources":["../src/project-skills.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/harness-core",
3
- "version": "0.3.115",
3
+ "version": "0.3.116",
4
4
  "description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -30,13 +30,13 @@
30
30
  "@dzhechkov/adapter-openclaude": "^0.1.0",
31
31
  "@dzhechkov/adapter-opencode": "^0.2.0",
32
32
  "yaml": "^2.0.0",
33
- "@dzhechkov/adapter-copilot": "0.1.1",
34
- "@dzhechkov/adapter-cursor": "0.1.1",
35
33
  "@dzhechkov/adapter-agents-md": "0.1.1",
36
34
  "@dzhechkov/adapter-gemini": "0.1.1",
35
+ "@dzhechkov/adapter-copilot": "0.1.1",
37
36
  "@dzhechkov/adapter-windsurf": "0.1.1",
38
37
  "@dzhechkov/core": "0.2.14",
39
- "@dzhechkov/memory": "0.2.9"
38
+ "@dzhechkov/memory": "0.2.9",
39
+ "@dzhechkov/adapter-cursor": "0.1.1"
40
40
  },
41
41
  "peerDependenciesMeta": {
42
42
  "@ruvector/rvf": {
@@ -0,0 +1,267 @@
1
+ /**
2
+ * Guided feature-adr onboarding (feature guided-feature-adr-setup, ADR-001).
3
+ *
4
+ * The `configure-feature-adr` SKILL runs a short interview and fills a `SetupSpec`; `dz feature-adr-setup`
5
+ * scaffolds the project-awareness files from that spec — so a user configures feature-adr WITHOUT knowing
6
+ * any manifest schema ("complex inside, simple outside"). The plan/render/scaffold builders are PURE +
7
+ * deterministic (sorted, no clock/random); the scan helper does disk I/O with TOP-LEVEL node:fs (ESM).
8
+ *
9
+ * SAFETY PROPERTY (ADR-001 §2, load-bearing): `scaffoldFromSpec` NEVER emits a full overwrite of an existing
10
+ * file. A structured file (manifest / project-skills) is UNION-merged (existing content preserved); a prose
11
+ * doc (vision.md / testing.md) that already exists is left untouched (`unchanged`), never clobbered.
12
+ */
13
+
14
+ import { existsSync, readFileSync } from 'node:fs';
15
+ import { join } from 'node:path';
16
+ import type { Subsystem, SubsystemManifest } from './architecture.js';
17
+ import { scanWorkspacePackages } from './architecture.js';
18
+ import type { ProjectSkillManifest, ExtraSkill, CoreRole } from './project-skills.js';
19
+ import { findReviewArtifacts } from './rake-analyzer.js';
20
+
21
+ export interface VisionSpec { readonly core: string; readonly direction?: string; readonly boundaries?: readonly string[]; readonly principles?: readonly string[] }
22
+ export interface TestingSpec { readonly commands?: readonly string[]; readonly doneDefinition?: string; readonly gates?: readonly string[] }
23
+ export type SubsystemSpec = Subsystem;
24
+
25
+ export interface SetupSpec {
26
+ readonly vision?: VisionSpec;
27
+ readonly subsystems?: readonly SubsystemSpec[];
28
+ readonly testing?: TestingSpec;
29
+ /** critic: 'auto' ⇒ a generated project-critic skill; a path ⇒ that file. brand/impl-bar: a path. */
30
+ readonly roles?: Partial<Record<'critic' | 'brand' | 'impl-bar', string>>;
31
+ readonly extra?: readonly ExtraSkill[];
32
+ }
33
+
34
+ export interface SetupScan {
35
+ readonly visionExists: boolean;
36
+ readonly manifestExists: boolean;
37
+ readonly projectSkillsExists: boolean;
38
+ readonly testingExists: boolean;
39
+ readonly packages: readonly string[];
40
+ readonly reviewCorpus: boolean;
41
+ }
42
+
43
+ export interface SetupPlan {
44
+ readonly exists: { readonly vision: boolean; readonly manifest: boolean; readonly projectSkills: boolean; readonly testing: boolean };
45
+ readonly discoveredPackages: readonly string[];
46
+ readonly hasReviewCorpus: boolean;
47
+ readonly missing: readonly string[];
48
+ readonly suggestions: readonly string[];
49
+ }
50
+
51
+ export interface ScaffoldFile { readonly path: string; readonly action: 'create' | 'augment' | 'unchanged'; readonly content: string; readonly note?: string }
52
+ export interface ScaffoldResult { readonly files: readonly ScaffoldFile[] }
53
+
54
+ /** One existing on-disk file: `exists` distinguishes ABSENT from EXISTS-BUT-UNREADABLE (never clobber either). */
55
+ export interface ExistingFile { readonly exists: boolean; readonly content?: string }
56
+ /** The existing files the scaffold compares against. */
57
+ export interface ExistingScaffoldFiles { readonly vision: ExistingFile; readonly manifest: ExistingFile; readonly projectSkills: ExistingFile; readonly testing: ExistingFile }
58
+
59
+ // Canonical committed paths (ADR: everything under architecture/).
60
+ export const P_VISION = 'architecture/vision.md';
61
+ export const P_TESTING = 'architecture/testing.md';
62
+ export const P_MANIFEST = 'architecture/subsystems.manifest.json';
63
+ export const P_PROJECT_SKILLS = 'architecture/project-skills.json';
64
+ export const P_CRITIC = 'architecture/project-critic/SKILL.md';
65
+
66
+ const byStr = (a: string, b: string): number => (a < b ? -1 : a > b ? 1 : 0);
67
+ const uniqSorted = (xs: readonly string[]): string[] => [...new Set(xs)].sort(byStr);
68
+
69
+ /** What exists, what is discoverable, what is still missing — the read-only "which docs, and where?" answer (FR-2). PURE. */
70
+ export function buildSetupPlan(scan: SetupScan): SetupPlan {
71
+ const missing: string[] = [];
72
+ if (!scan.visionExists) missing.push(P_VISION);
73
+ if (!scan.manifestExists) missing.push(P_MANIFEST);
74
+ if (!scan.testingExists) missing.push(P_TESTING);
75
+ if (!scan.projectSkillsExists) missing.push(P_PROJECT_SKILLS);
76
+
77
+ const suggestions: string[] = [];
78
+ if (!scan.manifestExists && scan.packages.length > 0) suggestions.push(`auto-scaffold ${P_MANIFEST} from ${scan.packages.length} discovered package(s) — you refine the grouping`);
79
+ if (!scan.visionExists) suggestions.push(`author ${P_VISION} from a short interview (seeded from the README)`);
80
+ if (!scan.testingExists) suggestions.push(`author ${P_TESTING} from a short interview (test commands, definition of done, gates)`);
81
+ if (scan.reviewCorpus) suggestions.push('generate the `critic` role from your review history: `dz mr-rakes --gen-critic`');
82
+
83
+ return {
84
+ exists: { vision: scan.visionExists, manifest: scan.manifestExists, projectSkills: scan.projectSkillsExists, testing: scan.testingExists },
85
+ discoveredPackages: uniqSorted(scan.packages),
86
+ hasReviewCorpus: scan.reviewCorpus,
87
+ missing: missing.sort(byStr),
88
+ suggestions,
89
+ };
90
+ }
91
+
92
+ /** Suggest a starter subsystem grouping from discovered packages (deterministic heuristic — user refines). PURE. */
93
+ export function suggestSubsystems(packages: readonly string[]): SubsystemSpec[] {
94
+ const pkgs = uniqSorted(packages);
95
+ const foundation: string[] = [];
96
+ const arsenal: string[] = [];
97
+ const other: string[] = [];
98
+ for (const p of pkgs) {
99
+ if (p.startsWith('skills-')) arsenal.push(p);
100
+ else if (/^(core|.*-core|.*-cli|.*-presets|adapter-)/.test(p)) foundation.push(p);
101
+ else other.push(p);
102
+ }
103
+ const subs: SubsystemSpec[] = [];
104
+ if (foundation.length) subs.push({ id: 'foundation', label: 'Foundation', job: null, desc: 'Core, CLI, presets, adapters — the substrate.', packages: foundation.filter((p) => !p.startsWith('adapter-')), packagePatterns: foundation.some((p) => p.startsWith('adapter-')) ? ['adapter-*'] : [], commands: [] });
105
+ if (arsenal.length) subs.push({ id: 'arsenal', label: 'Arsenal', job: null, desc: 'The skills themselves.', packages: [], packagePatterns: ['skills-*'], commands: [] });
106
+ if (other.length) subs.push({ id: 'app', label: 'Application', job: null, desc: 'Product-specific packages (rename/split to your real subsystems).', packages: other, packagePatterns: [], commands: [] });
107
+ return subs;
108
+ }
109
+
110
+ /** architecture/vision.md from the spec. Deterministic. */
111
+ export function renderVisionDoc(v: VisionSpec): string {
112
+ const lines = ['# Product Vision', '', '> Curated compass. feature-adr Step 0 reads this and checks new features against it. Edit when intent changes.', '', '## What it is', v.core.trim()];
113
+ if (v.direction) { lines.push('', '## Where it is going', v.direction.trim()); }
114
+ if (v.boundaries && v.boundaries.length) { lines.push('', '## What it consciously does NOT do'); for (const b of v.boundaries) lines.push(`- ${b}`); }
115
+ if (v.principles && v.principles.length) { lines.push('', '## Principles that must not be broken'); v.principles.forEach((p, i) => lines.push(`${i + 1}. ${p}`)); }
116
+ return lines.join('\n') + '\n';
117
+ }
118
+
119
+ /** architecture/testing.md from the spec — the project's verification procedure (feeds Step 8 QE). Deterministic. */
120
+ export function renderTestingDoc(t: TestingSpec): string {
121
+ const lines = ['# Testing & verification (this project)', '', '> feature-adr folds this into Step 8 (QE) as the `testing` role. What it means to be verified HERE.', ''];
122
+ if (t.commands && t.commands.length) { lines.push('## Verification commands'); for (const c of t.commands) lines.push('- `' + c + '`'); lines.push(''); }
123
+ if (t.doneDefinition) { lines.push('## Definition of "done"', t.doneDefinition.trim(), ''); }
124
+ if (t.gates && t.gates.length) { lines.push('## Required gates'); for (const g of t.gates) lines.push(`- ${g}`); lines.push(''); }
125
+ return lines.join('\n');
126
+ }
127
+
128
+ /** Build a subsystem manifest from the spec's subsystems. PURE. */
129
+ export function buildManifestFromSpec(subs: readonly SubsystemSpec[]): SubsystemManifest {
130
+ return { version: 1, subsystems: [...subs].sort((a, b) => byStr(a.id, b.id)) };
131
+ }
132
+
133
+ /** Wire the project-skills manifest from the spec: product-vision + testing point at the scaffolded docs;
134
+ * critic/brand/impl-bar are added when the spec supplies them; extra is carried through. PURE. */
135
+ export function buildProjectSkillsFromSpec(spec: SetupSpec): ProjectSkillManifest {
136
+ const roles: Partial<Record<CoreRole, string>> = { 'product-vision': P_VISION };
137
+ if (spec.testing) roles['testing'] = P_TESTING;
138
+ const r = spec.roles ?? {};
139
+ if (r.critic) roles['critic'] = r.critic === 'auto' ? P_CRITIC : r.critic;
140
+ if (r.brand) roles['brand'] = r.brand;
141
+ if (r['impl-bar']) roles['impl-bar'] = r['impl-bar'];
142
+ return { version: 1, roles, ...(spec.extra && spec.extra.length ? { extra: [...spec.extra] } : {}) };
143
+ }
144
+
145
+ // ── Union-merge helpers (augment; preserve existing byte-for-byte incl. unknown keys, order, duplicates) ──
146
+
147
+ const isObj = (x: unknown): x is Record<string, unknown> => x !== null && typeof x === 'object' && !Array.isArray(x);
148
+
149
+ /**
150
+ * Merge new subsystems into an EXISTING parsed manifest object. Returns null when the existing shape is not
151
+ * safely mergeable (so the caller leaves the file untouched). Preserves ALL existing top-level keys (owner,
152
+ * etc.), the existing subsystem array VERBATIM (order + duplicates), and only APPENDS subsystems whose id is
153
+ * not already present. Cross-model QE: never drop/reorder/dedupe the user's content.
154
+ */
155
+ function mergeManifest(existingObj: unknown, nextSubs: readonly Subsystem[]): { content: string; added: string[] } | null {
156
+ if (!isObj(existingObj) || !Array.isArray(existingObj.subsystems)) return null; // malformed shape → don't touch
157
+ const ids = new Set<string>();
158
+ for (const s of existingObj.subsystems) if (isObj(s) && typeof s.id === 'string') ids.add(s.id);
159
+ const appended = nextSubs.filter((s) => !ids.has(s.id));
160
+ const merged = { ...existingObj, subsystems: [...existingObj.subsystems, ...appended] };
161
+ return { content: JSON.stringify(merged, null, 2) + '\n', added: appended.map((s) => s.id) };
162
+ }
163
+
164
+ /** Merge new roles/extra into an EXISTING parsed project-skills object. Null when unsafe. Preserves unknown
165
+ * keys (metadata, etc.) + existing roles/extra; appends only new ones. Guards non-object/array shapes. */
166
+ function mergeProjectSkills(existingObj: unknown, nextRoles: Record<string, string>, nextExtra: readonly ExtraSkill[]): { content: string; added: string[] } | null {
167
+ if (!isObj(existingObj)) return null;
168
+ const existingRoles = existingObj.roles;
169
+ if (existingRoles !== undefined && !isObj(existingRoles)) return null; // roles present but not an object → don't touch
170
+ const roles: Record<string, unknown> = { ...(isObj(existingRoles) ? existingRoles : {}) };
171
+ const added: string[] = [];
172
+ for (const [k, v] of Object.entries(nextRoles)) if (!(k in roles) && typeof v === 'string') { roles[k] = v; added.push(`roles.${k}`); }
173
+
174
+ const existingExtra = existingObj.extra;
175
+ if (existingExtra !== undefined && !Array.isArray(existingExtra)) return null; // extra present but not an array → don't touch
176
+ const extra: unknown[] = Array.isArray(existingExtra) ? [...existingExtra] : [];
177
+ const seen = new Set(extra.filter(isObj).map((e) => `${String((e as Record<string, unknown>).skill)}|${String((e as Record<string, unknown>).phase)}`));
178
+ for (const e of nextExtra) { const key = `${e.skill}|${e.phase}`; if (!seen.has(key)) { extra.push(e); seen.add(key); added.push(`extra:${e.skill}`); } }
179
+
180
+ const merged: Record<string, unknown> = { ...existingObj, roles, ...(extra.length ? { extra } : {}) };
181
+ return { content: JSON.stringify(merged, null, 2) + '\n', added };
182
+ }
183
+
184
+ const tryParse = (s: string): unknown | typeof PARSE_FAIL => { try { return JSON.parse(s); } catch { return PARSE_FAIL; } };
185
+ const PARSE_FAIL = Symbol('parse-fail');
186
+
187
+ /** A prose (create-if-absent-else-leave) scaffold decision — never merges prose. */
188
+ function proseFile(path: string, existing: ExistingFile, render: () => string): ScaffoldFile {
189
+ if (!existing.exists) return { path, action: 'create', content: render() };
190
+ return { path, action: 'unchanged', content: existing.content ?? '', note: 'exists — left as-is (edit by hand; never overwritten)' };
191
+ }
192
+
193
+ /** A structured (union-merge) scaffold decision. Presence gates overwrite: an existing file is NEVER
194
+ * replaced — unreadable/unparseable/unmergeable → `unchanged`; parseable → append-only merge. */
195
+ function structuredFile(path: string, existing: ExistingFile, render: () => string, merge: (parsed: unknown) => { content: string; added: string[] } | null): ScaffoldFile {
196
+ if (!existing.exists) return { path, action: 'create', content: render() };
197
+ if (existing.content === undefined) return { path, action: 'unchanged', content: '', note: 'exists but unreadable — left as-is (never overwritten)' };
198
+ const parsed = tryParse(existing.content);
199
+ if (parsed === PARSE_FAIL) return { path, action: 'unchanged', content: existing.content, note: 'exists but not valid JSON — left as-is; fix by hand' };
200
+ const m = merge(parsed);
201
+ if (m === null) return { path, action: 'unchanged', content: existing.content, note: 'exists with a non-standard shape — left as-is; merge by hand' };
202
+ return { path, action: m.added.length ? 'augment' : 'unchanged', content: m.content, note: m.added.length ? `adds ${m.added.join(', ')}` : 'no new items' };
203
+ }
204
+
205
+ /**
206
+ * Build the scaffold plan from the spec + what already exists. PURE + deterministic. AUGMENT-NEVER-CLOBBER
207
+ * (ADR-001 §2, load-bearing): a file that EXISTS is never replaced — prose is left as-is; structured files
208
+ * are append-only merged (existing content, order, and unknown keys preserved). A file only gets `create`
209
+ * when it is genuinely ABSENT. Malformed existing content never crashes and never clobbers.
210
+ */
211
+ export function scaffoldFromSpec(spec: SetupSpec, existing: ExistingScaffoldFiles): ScaffoldResult {
212
+ const files: ScaffoldFile[] = [];
213
+ if (spec.vision) files.push(proseFile(P_VISION, existing.vision, () => renderVisionDoc(spec.vision!)));
214
+ if (spec.testing) files.push(proseFile(P_TESTING, existing.testing, () => renderTestingDoc(spec.testing!)));
215
+ if (spec.subsystems && spec.subsystems.length) {
216
+ const nextSubs = spec.subsystems;
217
+ files.push(structuredFile(P_MANIFEST, existing.manifest, () => JSON.stringify(buildManifestFromSpec(nextSubs), null, 2) + '\n', (parsed) => mergeManifest(parsed, [...nextSubs].sort((a, b) => byStr(a.id, b.id)))));
218
+ }
219
+ const nextPS = buildProjectSkillsFromSpec(spec);
220
+ files.push(structuredFile(P_PROJECT_SKILLS, existing.projectSkills, () => JSON.stringify(nextPS, null, 2) + '\n', (parsed) => mergeProjectSkills(parsed, (nextPS.roles ?? {}) as Record<string, string>, nextPS.extra ?? [])));
221
+ return { files: [...files].sort((a, b) => byStr(a.path, b.path)) };
222
+ }
223
+
224
+ /** Human preview of the scaffold plan. Deterministic. */
225
+ export function renderScaffoldPreview(result: ScaffoldResult): string {
226
+ const icon = (a: ScaffoldFile['action']): string => (a === 'create' ? '✚ create' : a === 'augment' ? '✎ augment' : '· unchanged');
227
+ const lines = ['feature-adr-setup — planned files (pass --apply to write; existing files are never clobbered):', ''];
228
+ for (const f of result.files) lines.push(` ${icon(f.action)} ${f.path}${f.note ? ` — ${f.note}` : ''}`);
229
+ return lines.join('\n');
230
+ }
231
+
232
+ // ── Thin I/O (top-level fs; never throws) ─────────────────────────────────────────────────────────────
233
+
234
+ /** Read one file as an ExistingFile — distinguishes ABSENT from EXISTS-BUT-UNREADABLE (cross-model QE). */
235
+ function readExistingFile(p: string): ExistingFile {
236
+ let exists = false;
237
+ try { exists = existsSync(p); } catch { return { exists: false }; }
238
+ if (!exists) return { exists: false };
239
+ try { return { exists: true, content: readFileSync(p, 'utf8') }; } catch { return { exists: true }; }
240
+ }
241
+
242
+ /** Scan the repo for the setup plan: what exists + discovered packages + a review corpus. Impure; never throws. */
243
+ export function scanForSetup(repoRoot: string): SetupScan {
244
+ const has = (rel: string): boolean => { try { return existsSync(join(repoRoot, rel)); } catch { return false; } };
245
+ let packages: string[] = [];
246
+ let reviewCorpus = false;
247
+ try { packages = scanWorkspacePackages(repoRoot).map((p) => p.name); } catch { /* none */ }
248
+ try { reviewCorpus = findReviewArtifacts(repoRoot).length > 0; } catch { /* none */ }
249
+ return {
250
+ visionExists: has(P_VISION),
251
+ manifestExists: has(P_MANIFEST),
252
+ projectSkillsExists: has(P_PROJECT_SKILLS),
253
+ testingExists: has(P_TESTING),
254
+ packages,
255
+ reviewCorpus,
256
+ };
257
+ }
258
+
259
+ /** Read the existing files the scaffold needs to compare against. Impure; never throws. */
260
+ export function readExistingForScaffold(repoRoot: string): ExistingScaffoldFiles {
261
+ return {
262
+ vision: readExistingFile(join(repoRoot, P_VISION)),
263
+ manifest: readExistingFile(join(repoRoot, P_MANIFEST)),
264
+ projectSkills: readExistingFile(join(repoRoot, P_PROJECT_SKILLS)),
265
+ testing: readExistingFile(join(repoRoot, P_TESTING)),
266
+ };
267
+ }
package/src/index.ts CHANGED
@@ -267,3 +267,4 @@ export * from './architecture.js';
267
267
  export * from './project-skills.js';
268
268
  export * from './rake-analyzer.js';
269
269
  export * from './session-retro.js';
270
+ export * from './feature-adr-setup.js';
@@ -24,16 +24,21 @@ import { join, resolve, isAbsolute, sep } from 'node:path';
24
24
  export type Stage = 'design' | 'code' | 'qe';
25
25
 
26
26
  /** The CLOSED core-role enum (each has a fixed stage mapping). */
27
- export type CoreRole = 'product-vision' | 'critic' | 'brand' | 'impl-bar';
27
+ export type CoreRole = 'product-vision' | 'critic' | 'brand' | 'impl-bar' | 'testing';
28
28
 
29
- export const CORE_ROLES: readonly CoreRole[] = ['product-vision', 'critic', 'brand', 'impl-bar'];
29
+ export const CORE_ROLES: readonly CoreRole[] = ['product-vision', 'critic', 'brand', 'impl-bar', 'testing'];
30
30
 
31
- /** Fixed role→stage map (FR-3). product-vision informs design + QE; impl-bar the code; critic the QE; brand the code. */
31
+ /**
32
+ * Fixed role→stage map. product-vision informs design + QE; impl-bar the code; critic + testing the QE;
33
+ * brand the code. `testing` (R5) is the project's verification procedure (test commands, "done", gates) —
34
+ * distinct from `critic` (the review lens): different SOURCE (testing = interview, critic = auto-mined).
35
+ */
32
36
  export const ROLE_STAGES: Readonly<Record<CoreRole, readonly Stage[]>> = {
33
37
  'product-vision': ['design', 'qe'],
34
38
  'impl-bar': ['code'],
35
39
  'critic': ['qe'],
36
40
  'brand': ['code'],
41
+ 'testing': ['qe'],
37
42
  };
38
43
 
39
44
  /** Default doc for the product-vision role when the manifest omits it (the R1 seam). */