@nac3/forge-cli 0.2.0-alpha.14 → 0.2.0-alpha.16

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.
@@ -1 +1 @@
1
- {"version":3,"file":"yf.d.ts","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":";AAUA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,wBAAgB,YAAY,IAAI,OAAO,CA6CtC"}
1
+ {"version":3,"file":"yf.d.ts","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":";AAUA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,wBAAgB,YAAY,IAAI,OAAO,CAiDtC"}
package/dist/bin/yf.js CHANGED
@@ -41,6 +41,10 @@ import { registerLegacyAuditCommand } from '../commands/legacy-audit.js';
41
41
  import { registerClarifyCommand } from '../commands/clarify.js';
42
42
  import { registerSpecCommand } from '../commands/spec.js';
43
43
  import { registerApproveCommand } from '../commands/approve.js';
44
+ import { registerBootstrapCommand } from '../commands/bootstrap.js';
45
+ import { registerBlockCommand } from '../commands/block.js';
46
+ import { registerCoverageCommand } from '../commands/workflow-coverage.js';
47
+ import { registerOperateCommand } from '../commands/operate.js';
44
48
  import { VERSION } from '../version.js';
45
49
  export function buildProgram() {
46
50
  const program = new Command();
@@ -84,6 +88,10 @@ export function buildProgram() {
84
88
  registerClarifyCommand(program);
85
89
  registerSpecCommand(program);
86
90
  registerApproveCommand(program);
91
+ registerBootstrapCommand(program);
92
+ registerBlockCommand(program);
93
+ registerCoverageCommand(program);
94
+ registerOperateCommand(program);
87
95
  return program;
88
96
  }
89
97
  async function main() {
@@ -1 +1 @@
1
- {"version":3,"file":"yf.js","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yf.js","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `yf block <verb> <block_id>` -- Phase V step 15 of
3
+ * PRODUCT_WORKFLOW.md.
4
+ *
5
+ * Drives the iterative build cycle one block at a time. Each
6
+ * block runs through: pending -> in_progress -> green (tests
7
+ * verdes + green-gate) -> deployed.
8
+ *
9
+ * Verbs:
10
+ * yf block list show all blocks + status
11
+ * yf block start <id> mark block in_progress
12
+ * yf block green <id> mark block tests-green
13
+ * yf block deploy <id> mark block deployed
14
+ * yf block fail <id> mark block failed (for retry)
15
+ *
16
+ * Each transition writes to workflow.blocks_progress[*] and
17
+ * checks the dependency graph: a block can only enter
18
+ * in_progress when all its declared dependencies are
19
+ * "green" or "deployed".
20
+ *
21
+ * ASCII-only.
22
+ */
23
+ import type { Command } from 'commander';
24
+ export interface BlockOptions {
25
+ cwd?: string;
26
+ }
27
+ export declare function registerBlockCommand(program: Command): void;
28
+ //# sourceMappingURL=block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/commands/block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAoID,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkC3D"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * `yf block <verb> <block_id>` -- Phase V step 15 of
3
+ * PRODUCT_WORKFLOW.md.
4
+ *
5
+ * Drives the iterative build cycle one block at a time. Each
6
+ * block runs through: pending -> in_progress -> green (tests
7
+ * verdes + green-gate) -> deployed.
8
+ *
9
+ * Verbs:
10
+ * yf block list show all blocks + status
11
+ * yf block start <id> mark block in_progress
12
+ * yf block green <id> mark block tests-green
13
+ * yf block deploy <id> mark block deployed
14
+ * yf block fail <id> mark block failed (for retry)
15
+ *
16
+ * Each transition writes to workflow.blocks_progress[*] and
17
+ * checks the dependency graph: a block can only enter
18
+ * in_progress when all its declared dependencies are
19
+ * "green" or "deployed".
20
+ *
21
+ * ASCII-only.
22
+ */
23
+ import path from 'node:path';
24
+ import { c, header } from '../ui/colors.js';
25
+ import { readWorkflow, writeWorkflow, } from '../workflow/state.js';
26
+ const STATUS_SYMBOLS = {
27
+ pending: '[ ]',
28
+ in_progress: '[~]',
29
+ green: '[+]',
30
+ failed: '[!]',
31
+ };
32
+ async function listBlocks(projectRoot) {
33
+ const wf = await readWorkflow(projectRoot);
34
+ const blocks = wf.clarification?.blocks?.blocks ?? [];
35
+ const progress = wf.blocks_progress ?? [];
36
+ if (blocks.length === 0) {
37
+ console.log(c.warn('No hay bloques. Corre primero ') + c.code('yf clarify blocks'));
38
+ return;
39
+ }
40
+ console.log(c.brand('Bloques:'));
41
+ console.log('');
42
+ for (const b of blocks) {
43
+ const st = progress.find((p) => p.block_id === b.id)?.status ?? 'pending';
44
+ const symbol = STATUS_SYMBOLS[st];
45
+ const dep = b.dependencies.length > 0 ? ' deps: ' + b.dependencies.join(',') : '';
46
+ const mvp = b.mvp ? ' MVP' : '';
47
+ const eff = '(' + b.effort + ')';
48
+ console.log(' ' + c.dim(symbol) + ' ' + c.brand(b.id.padEnd(20)) + c.dim(b.name) + c.dim(' ' + eff) + c.dim(dep) + c.warn(mvp));
49
+ }
50
+ console.log('');
51
+ const summary = {
52
+ pending: progress.filter((p) => p.status === 'pending').length,
53
+ in_progress: progress.filter((p) => p.status === 'in_progress').length,
54
+ green: progress.filter((p) => p.status === 'green').length,
55
+ failed: progress.filter((p) => p.status === 'failed').length,
56
+ };
57
+ console.log(c.dim('Resumen: ')
58
+ + c.dim(`pending=${summary.pending} `)
59
+ + c.dim(`in_progress=${summary.in_progress} `)
60
+ + c.success(`green=${summary.green} `)
61
+ + c.error(`failed=${summary.failed}`));
62
+ }
63
+ async function patchProgress(projectRoot, blockId, patch) {
64
+ const wf = await readWorkflow(projectRoot);
65
+ const blocks = wf.clarification?.blocks?.blocks ?? [];
66
+ const targetBlock = blocks.find((b) => b.id === blockId);
67
+ if (!targetBlock) {
68
+ throw new Error('block id "' + blockId + '" not found in workflow.clarification.blocks');
69
+ }
70
+ const progress = [...(wf.blocks_progress ?? [])];
71
+ const idx = progress.findIndex((p) => p.block_id === blockId);
72
+ const next = {
73
+ block_id: blockId,
74
+ status: 'pending',
75
+ ...(idx >= 0 ? progress[idx] : {}),
76
+ ...patch,
77
+ };
78
+ if (idx >= 0)
79
+ progress[idx] = next;
80
+ else
81
+ progress.push(next);
82
+ await writeWorkflow(projectRoot, { blocks_progress: progress });
83
+ }
84
+ async function startBlock(projectRoot, blockId) {
85
+ const wf = await readWorkflow(projectRoot);
86
+ const blocks = wf.clarification?.blocks?.blocks ?? [];
87
+ const target = blocks.find((b) => b.id === blockId);
88
+ if (!target) {
89
+ console.log(c.error('block "' + blockId + '" no existe en workflow.clarification.blocks'));
90
+ process.exitCode = 1;
91
+ return;
92
+ }
93
+ /* Check dependencies. */
94
+ const progress = wf.blocks_progress ?? [];
95
+ for (const dep of target.dependencies) {
96
+ const depProgress = progress.find((p) => p.block_id === dep);
97
+ if (!depProgress || (depProgress.status !== 'green' && !depProgress.deployed_at)) {
98
+ console.log(c.error('Dependency "' + dep + '" no esta green todavia.'));
99
+ console.log(c.dim('Termina ' + dep + ' primero o corre `yf block list`.'));
100
+ process.exitCode = 1;
101
+ return;
102
+ }
103
+ }
104
+ await patchProgress(projectRoot, blockId, { status: 'in_progress' });
105
+ console.log(c.success('Block ') + c.brand(blockId) + c.success(' marcado in_progress.'));
106
+ console.log(c.dim('Ciclo de bloque: implement -> e2e tests con NAC-3 coverage 100%'));
107
+ console.log(c.dim(' -> a11y check -> green-gate -> `yf block green ' + blockId + '`'));
108
+ }
109
+ async function greenBlock(projectRoot, blockId) {
110
+ /* SQ Sec 14 requires that any block transitioning to green has:
111
+ * - lint + typecheck green
112
+ * - tests green
113
+ * - NAC-3 manifest coverage 100%
114
+ * - a11y check passed
115
+ * We do not run those here -- the user (or CI) just confirms.
116
+ * In a follow-up commit we hook this into `yf coverage structural`
117
+ * to refuse green if structural coverage < 100%. */
118
+ await patchProgress(projectRoot, blockId, {
119
+ status: 'green',
120
+ tests_green_at: new Date().toISOString(),
121
+ });
122
+ console.log(c.success('Block ') + c.brand(blockId) + c.success(' marcado green.'));
123
+ console.log(c.dim('Siguiente bloque: ') + c.code('yf block list'));
124
+ }
125
+ async function deployBlock(projectRoot, blockId) {
126
+ const wf = await readWorkflow(projectRoot);
127
+ const progress = wf.blocks_progress ?? [];
128
+ const current = progress.find((p) => p.block_id === blockId);
129
+ if (!current || current.status !== 'green') {
130
+ console.log(c.error('Block "' + blockId + '" debe estar green antes de deploy.'));
131
+ process.exitCode = 1;
132
+ return;
133
+ }
134
+ await patchProgress(projectRoot, blockId, { deployed_at: new Date().toISOString() });
135
+ console.log(c.success('Block ') + c.brand(blockId) + c.success(' marcado deployed.'));
136
+ }
137
+ async function failBlock(projectRoot, blockId) {
138
+ await patchProgress(projectRoot, blockId, { status: 'failed' });
139
+ console.log(c.warn('Block ') + c.brand(blockId) + c.warn(' marcado failed. Para reintentar: ')
140
+ + c.code('yf block start ' + blockId));
141
+ }
142
+ export function registerBlockCommand(program) {
143
+ const block = program.command('block')
144
+ .description('Phase V step 15: iterative block-by-block build cycle.');
145
+ block.command('list')
146
+ .description('Show all blocks + status.')
147
+ .option('--cwd <path>', 'project root')
148
+ .action(async (opts) => {
149
+ const root = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
150
+ try {
151
+ await listBlocks(root);
152
+ }
153
+ catch (err) {
154
+ console.error(c.error(String(err instanceof Error ? err.message : err)));
155
+ process.exitCode = 1;
156
+ }
157
+ });
158
+ for (const verb of ['start', 'green', 'deploy', 'fail']) {
159
+ block.command(verb + ' <block_id>')
160
+ .description('Mark block as ' + verb + '.')
161
+ .option('--cwd <path>', 'project root')
162
+ .action(async (blockId, opts) => {
163
+ const root = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
164
+ header('Yujin Forge -- block ' + verb);
165
+ console.log('');
166
+ try {
167
+ switch (verb) {
168
+ case 'start':
169
+ await startBlock(root, blockId);
170
+ break;
171
+ case 'green':
172
+ await greenBlock(root, blockId);
173
+ break;
174
+ case 'deploy':
175
+ await deployBlock(root, blockId);
176
+ break;
177
+ case 'fail':
178
+ await failBlock(root, blockId);
179
+ break;
180
+ }
181
+ }
182
+ catch (err) {
183
+ console.error(c.error(String(err instanceof Error ? err.message : err)));
184
+ process.exitCode = 1;
185
+ }
186
+ });
187
+ }
188
+ }
189
+ //# sourceMappingURL=block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/commands/block.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * `yf bootstrap` -- Phase V step 14 of PRODUCT_WORKFLOW.md.
3
+ *
4
+ * Once Phase IV (approve) passes the three spec gates, this
5
+ * command initialises the project for the iterative build cycle:
6
+ *
7
+ * * Reads workflow.specs + workflow.clarification.blocks
8
+ * * Scaffolds the project shell (delegates to template engine
9
+ * if the project is brand-new; no-ops if code already exists)
10
+ * * Installs NAC-3 compliance baseline (5 attrs on the shell +
11
+ * manifest stub)
12
+ * * Sets CI gates (lint + typecheck + tests + visual + a11y +
13
+ * NAC-3 manifest check)
14
+ * * Sets up test scaffolding per layer (unit / integration /
15
+ * e2e / visual / a11y)
16
+ * * Sets up observability hooks (logger + optional Sentry)
17
+ * * Initialises blocks_progress = [{ block_id, status: pending }]
18
+ * for every block in workflow.clarification.blocks
19
+ *
20
+ * For alpha.15 the bootstrap is a thin shell -- it sets the
21
+ * workflow state + writes scaffolding markers + the actual
22
+ * heavy lifting (templates, CI config generation, observability
23
+ * wiring) lands incrementally in follow-up commits.
24
+ *
25
+ * ASCII-only.
26
+ */
27
+ import type { Command } from 'commander';
28
+ export interface BootstrapOptions {
29
+ cwd?: string;
30
+ yes?: boolean;
31
+ stack?: string;
32
+ }
33
+ export declare function runBootstrap(opts: BootstrapOptions): Promise<void>;
34
+ export declare function registerBootstrapCommand(program: Command): void;
35
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAqBD,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6IxE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc/D"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * `yf bootstrap` -- Phase V step 14 of PRODUCT_WORKFLOW.md.
3
+ *
4
+ * Once Phase IV (approve) passes the three spec gates, this
5
+ * command initialises the project for the iterative build cycle:
6
+ *
7
+ * * Reads workflow.specs + workflow.clarification.blocks
8
+ * * Scaffolds the project shell (delegates to template engine
9
+ * if the project is brand-new; no-ops if code already exists)
10
+ * * Installs NAC-3 compliance baseline (5 attrs on the shell +
11
+ * manifest stub)
12
+ * * Sets CI gates (lint + typecheck + tests + visual + a11y +
13
+ * NAC-3 manifest check)
14
+ * * Sets up test scaffolding per layer (unit / integration /
15
+ * e2e / visual / a11y)
16
+ * * Sets up observability hooks (logger + optional Sentry)
17
+ * * Initialises blocks_progress = [{ block_id, status: pending }]
18
+ * for every block in workflow.clarification.blocks
19
+ *
20
+ * For alpha.15 the bootstrap is a thin shell -- it sets the
21
+ * workflow state + writes scaffolding markers + the actual
22
+ * heavy lifting (templates, CI config generation, observability
23
+ * wiring) lands incrementally in follow-up commits.
24
+ *
25
+ * ASCII-only.
26
+ */
27
+ import path from 'node:path';
28
+ import { promises as fs } from 'node:fs';
29
+ import { c, header } from '../ui/colors.js';
30
+ import { readWorkflow, patchWorkflowGroup, writeWorkflow, } from '../workflow/state.js';
31
+ const DEFAULT_STACK = 'React + Vite + TypeScript + Vitest + Playwright + NAC-3';
32
+ async function ensureGitIgnoreHas(projectRoot, patterns) {
33
+ const giPath = path.join(projectRoot, '.gitignore');
34
+ let current = '';
35
+ try {
36
+ current = await fs.readFile(giPath, 'utf-8');
37
+ }
38
+ catch {
39
+ current = '';
40
+ }
41
+ const lines = new Set(current.split(/\r?\n/));
42
+ for (const p of patterns)
43
+ lines.add(p);
44
+ await fs.writeFile(giPath, [...lines].filter(Boolean).join('\n') + '\n', 'utf-8');
45
+ }
46
+ async function ensureFile(p, contents) {
47
+ try {
48
+ await fs.access(p);
49
+ return false;
50
+ }
51
+ catch { /* not present */ }
52
+ await fs.mkdir(path.dirname(p), { recursive: true });
53
+ await fs.writeFile(p, contents, 'utf-8');
54
+ return true;
55
+ }
56
+ export async function runBootstrap(opts) {
57
+ header('Yujin Forge -- bootstrap');
58
+ console.log('');
59
+ const projectRoot = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
60
+ const wf = await readWorkflow(projectRoot);
61
+ /* Gate: Phase IV must have approved all 3 docs with current
62
+ * sha256 matching. */
63
+ const docs = ['rfp', 'arch', 'design'];
64
+ for (const d of docs) {
65
+ const sp = wf.specs?.[d];
66
+ const ap = wf.approvals?.[d];
67
+ if (!sp || !ap) {
68
+ console.log(c.error('Phase IV gate no aprobado todavia (' + d + ' falta).'));
69
+ console.log(c.dim('Corre: ') + c.code('yf approve ' + d));
70
+ process.exitCode = 1;
71
+ return;
72
+ }
73
+ if (ap.version_sha256 !== sp.sha256) {
74
+ console.log(c.error('Approval STALE para ' + d + '. Doc cambio desde la aprobacion.'));
75
+ console.log(c.dim('Re-aprueba: ') + c.code('yf approve ' + d));
76
+ process.exitCode = 1;
77
+ return;
78
+ }
79
+ }
80
+ if (wf.bootstrap && !opts.yes) {
81
+ console.log(c.warn('Bootstrap previo en ' + wf.bootstrap.done_at + '.'));
82
+ console.log(c.dim('Para volver a correr, ') + c.code('yf bootstrap --yes'));
83
+ return;
84
+ }
85
+ const stack = opts.stack || DEFAULT_STACK;
86
+ const blocks = wf.clarification?.blocks?.blocks ?? [];
87
+ if (blocks.length === 0) {
88
+ console.log(c.error('No hay bloques definidos en workflow.clarification.blocks.'));
89
+ console.log(c.dim('Corre: ') + c.code('yf clarify blocks'));
90
+ process.exitCode = 1;
91
+ return;
92
+ }
93
+ console.log(c.dim('Stack: ') + c.brand(stack));
94
+ console.log(c.dim('Blocks: ') + c.brand(String(blocks.length) + ' identificados'));
95
+ console.log(c.dim('Project root: ') + c.dim(projectRoot));
96
+ console.log('');
97
+ /* 1. Ensure a NAC-3 manifest stub exists. */
98
+ const manifestPath = path.join(projectRoot, 'src', 'nac', 'manifest.ts');
99
+ const wroteManifest = await ensureFile(manifestPath, [
100
+ '/**',
101
+ ' * NAC-3 manifest stub generated by `yf bootstrap`.',
102
+ ' * Forge populates this as you decorate components per block.',
103
+ ' */',
104
+ "import { defineNacManifest } from '@nac3/runtime';",
105
+ '',
106
+ 'export const manifest = defineNacManifest({',
107
+ ' app_name: "' + path.basename(projectRoot) + '",',
108
+ ' version: "0.0.1",',
109
+ ' elements: [',
110
+ ' /* Populated per block. See docs/project_design.md. */',
111
+ ' ],',
112
+ '});',
113
+ '',
114
+ ].join('\n'));
115
+ if (wroteManifest)
116
+ console.log(c.success(' +') + c.dim(' src/nac/manifest.ts'));
117
+ /* 2. CI workflow stub at .github/workflows/ci.yml if missing. */
118
+ const ciPath = path.join(projectRoot, '.github', 'workflows', 'ci.yml');
119
+ const wroteCi = await ensureFile(ciPath, [
120
+ 'name: CI',
121
+ 'on: { push: { branches: [main] }, pull_request: {} }',
122
+ 'jobs:',
123
+ ' test:',
124
+ ' runs-on: ubuntu-latest',
125
+ ' steps:',
126
+ ' - uses: actions/checkout@v4',
127
+ ' - uses: actions/setup-node@v4',
128
+ ' with: { node-version: "20", cache: "npm" }',
129
+ ' - run: npm ci',
130
+ ' - run: npx yf doctor --json',
131
+ ' - run: npm run lint --if-present',
132
+ ' - run: npm run typecheck --if-present',
133
+ ' - run: npm test --if-present',
134
+ ' - run: npx yf coverage structural --if-failing-exit-1',
135
+ '',
136
+ ].join('\n'));
137
+ if (wroteCi)
138
+ console.log(c.success(' +') + c.dim(' .github/workflows/ci.yml'));
139
+ /* 3. tests/fresh-user/ scaffold (per SQ Sec 14). */
140
+ const fuReadme = path.join(projectRoot, 'tests', 'fresh-user', 'README.md');
141
+ const wroteFu = await ensureFile(fuReadme, [
142
+ '# tests/fresh-user/',
143
+ '',
144
+ 'Per Yujin Forge SQ Sec 14, every feature in this project has',
145
+ 'a fresh-user e2e test: clean state -> exercise feature -> assert.',
146
+ '',
147
+ 'Forge generates one of these per block as part of the',
148
+ '`yf block dev <block_id>` cycle.',
149
+ '',
150
+ ].join('\n'));
151
+ if (wroteFu)
152
+ console.log(c.success(' +') + c.dim(' tests/fresh-user/README.md'));
153
+ /* 4. .gitignore additions. */
154
+ await ensureGitIgnoreHas(projectRoot, [
155
+ 'node_modules',
156
+ 'dist', 'build', '.next',
157
+ 'coverage', '.cache',
158
+ '.env', '.env.local',
159
+ '.yujin-forge',
160
+ 'yujin.forge.cache',
161
+ ]);
162
+ console.log(c.success(' +') + c.dim(' .gitignore patterns'));
163
+ /* 5. Initialise blocks_progress for every block in workflow. */
164
+ const blocks_progress = blocks.map((b) => ({
165
+ block_id: b.id,
166
+ status: 'pending',
167
+ }));
168
+ await writeWorkflow(projectRoot, { blocks_progress });
169
+ console.log(c.success(' +') + c.dim(' blocks_progress[] initialised (' + blocks.length + ' bloques pending)'));
170
+ /* 6. Persist bootstrap state. */
171
+ await patchWorkflowGroup(projectRoot, 'bootstrap', {
172
+ done_at: new Date().toISOString(),
173
+ stack,
174
+ ci_set: true,
175
+ });
176
+ console.log('');
177
+ console.log(c.success('Bootstrap completado.'));
178
+ console.log('');
179
+ /* Suggest the first MVP block. */
180
+ const mvp = wf.clarification?.blocks?.mvp_path ?? [];
181
+ const firstBlock = mvp[0] ?? blocks[0]?.id;
182
+ if (firstBlock) {
183
+ console.log(c.dim('Primer bloque sugerido: ') + c.code('yf block dev ' + firstBlock));
184
+ }
185
+ else {
186
+ console.log(c.dim('Siguiente paso: ') + c.code('yf block dev <block_id>'));
187
+ }
188
+ }
189
+ export function registerBootstrapCommand(program) {
190
+ program.command('bootstrap')
191
+ .description('Phase V step 14: initialise project (NAC-3 baseline + CI + tests + observability).')
192
+ .option('--cwd <path>', 'project root (default: current directory)')
193
+ .option('--yes', 're-run even if bootstrap already done')
194
+ .option('--stack <name>', 'override the default stack label')
195
+ .action(async (opts) => {
196
+ try {
197
+ await runBootstrap(opts);
198
+ }
199
+ catch (err) {
200
+ console.error(c.error(err instanceof Error ? err.message : String(err)));
201
+ process.exitCode = 1;
202
+ }
203
+ });
204
+ }
205
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/commands/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,YAAY,EACZ,kBAAkB,EAClB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,aAAa,GAAG,yDAAyD,CAAC;AAEhF,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,QAAkB;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QAAC,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IACrD,MAAM,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;IAAC,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACpF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,CAAS,EAAE,QAAgB;IACnD,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACrE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAsB;IACvD,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACtE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAC;IAE3C;0BACsB;IACtB,MAAM,IAAI,GAAqC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,qCAAqC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,EAAE,CAAC,cAAc,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,GAAG,mCAAmC,CAAC,CAAC,CAAC;YACvF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,6CAA6C;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE;QACnD,KAAK;QACL,qDAAqD;QACrD,+DAA+D;QAC/D,KAAK;QACL,oDAAoD;QACpD,EAAE;QACF,6CAA6C;QAC7C,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI;QACnD,sBAAsB;QACtB,eAAe;QACf,4DAA4D;QAC5D,MAAM;QACN,KAAK;QACL,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACd,IAAI,aAAa;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAEjF,iEAAiE;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE;QACvC,UAAU;QACV,sDAAsD;QACtD,OAAO;QACP,SAAS;QACT,4BAA4B;QAC5B,YAAY;QACZ,mCAAmC;QACnC,qCAAqC;QACrC,oDAAoD;QACpD,qBAAqB;QACrB,mCAAmC;QACnC,wCAAwC;QACxC,6CAA6C;QAC7C,oCAAoC;QACpC,6DAA6D;QAC7D,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACd,IAAI,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAEhF,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE;QACzC,qBAAqB;QACrB,EAAE;QACF,8DAA8D;QAC9D,mEAAmE;QACnE,EAAE;QACF,uDAAuD;QACvD,kCAAkC;QAClC,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACd,IAAI,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAElF,8BAA8B;IAC9B,MAAM,kBAAkB,CAAC,WAAW,EAAE;QACpC,cAAc;QACd,MAAM,EAAE,OAAO,EAAE,OAAO;QACxB,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,YAAY;QACpB,cAAc;QACd,mBAAmB;KACpB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAE9D,gEAAgE;IAChE,MAAM,eAAe,GAAyB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,QAAQ,EAAE,CAAC,CAAC,EAAE;QACd,MAAM,EAAI,SAAS;KACpB,CAAC,CAAC,CAAC;IACJ,MAAM,aAAa,CAAC,WAAW,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kCAAkC,GAAG,MAAM,CAAC,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAEhH,iCAAiC;IACjC,MAAM,kBAAkB,CAAC,WAAW,EAAE,WAAW,EAAE;QACjD,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjC,KAAK;QACL,MAAM,EAAG,IAAI;KACwB,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,kCAAkC;IAClC,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IACrD,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC;IACxF,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;SACzB,WAAW,CAAC,oFAAoF,CAAC;SACjG,MAAM,CAAC,cAAc,EAAG,2CAA2C,CAAC;SACpE,MAAM,CAAC,OAAO,EAAW,uCAAuC,CAAC;SACjE,MAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,IAAsB,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * `yf operate <verb>` -- Phase VI + cross-cutting of
3
+ * PRODUCT_WORKFLOW.md.
4
+ *
5
+ * Verbs (all thin shells -- they persist state + emit
6
+ * scaffolding markers; deeper implementations land in follow-up
7
+ * commits):
8
+ *
9
+ * yf operate deploy-guided step 16 -- guided deploy + smoke
10
+ * yf operate manual-generate step 17 -- generate per-locale manual
11
+ * yf operate metrics step 17 -- observability dashboards setup
12
+ * yf operate iterate <type> step 18 -- classify + route a new requirement
13
+ * yf operate costs cross-cutting 8.2
14
+ * yf operate handoff cross-cutting 8.5
15
+ * yf operate backup-setup cross-cutting 8.6
16
+ * yf operate restore-drill cross-cutting 8.6
17
+ *
18
+ * ASCII-only.
19
+ */
20
+ import type { Command } from 'commander';
21
+ export declare function registerOperateCommand(program: Command): void;
22
+ //# sourceMappingURL=operate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operate.d.ts","sourceRoot":"","sources":["../../src/commands/operate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6YzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsE7D"}