@nac3/forge-cli 0.2.0-alpha.12 → 0.2.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +6 -0
- package/dist/bin/yf.js.map +1 -1
- package/dist/commands/approve.d.ts +32 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +198 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/clarify.d.ts +30 -0
- package/dist/commands/clarify.d.ts.map +1 -0
- package/dist/commands/clarify.js +671 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/spec.d.ts +38 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +256 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/bin/yf.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/bin/yf.js
CHANGED
|
@@ -38,6 +38,9 @@ import { registerLogCommand } from '../commands/log.js';
|
|
|
38
38
|
import { registerTriageCommand } from '../commands/triage.js';
|
|
39
39
|
import { registerDiscoverCommand } from '../commands/discover.js';
|
|
40
40
|
import { registerLegacyAuditCommand } from '../commands/legacy-audit.js';
|
|
41
|
+
import { registerClarifyCommand } from '../commands/clarify.js';
|
|
42
|
+
import { registerSpecCommand } from '../commands/spec.js';
|
|
43
|
+
import { registerApproveCommand } from '../commands/approve.js';
|
|
41
44
|
import { VERSION } from '../version.js';
|
|
42
45
|
export function buildProgram() {
|
|
43
46
|
const program = new Command();
|
|
@@ -78,6 +81,9 @@ export function buildProgram() {
|
|
|
78
81
|
registerTriageCommand(program);
|
|
79
82
|
registerDiscoverCommand(program);
|
|
80
83
|
registerLegacyAuditCommand(program);
|
|
84
|
+
registerClarifyCommand(program);
|
|
85
|
+
registerSpecCommand(program);
|
|
86
|
+
registerApproveCommand(program);
|
|
81
87
|
return program;
|
|
82
88
|
}
|
|
83
89
|
async function main() {
|
package/dist/bin/yf.js.map
CHANGED
|
@@ -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,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf approve <doc...>` -- Phase IV step 13 of PRODUCT_WORKFLOW.md.
|
|
3
|
+
*
|
|
4
|
+
* The unbreakable gate. Forge refuses to proceed to Phase V
|
|
5
|
+
* (build) until the user has explicitly approved the 3 spec
|
|
6
|
+
* documents (RFP + arch + design) by their current sha256.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* yf approve rfp approve one doc
|
|
10
|
+
* yf approve rfp arch design approve all three (batch)
|
|
11
|
+
* yf approve --list show approval state
|
|
12
|
+
* yf approve --revoke <doc> revoke an approval
|
|
13
|
+
*
|
|
14
|
+
* Approval persists workflow.approvals.<doc> = {
|
|
15
|
+
* approved_at: ISO,
|
|
16
|
+
* version_sha256: sha of the spec file at approval time
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* If the doc file changes after approval, Forge detects the sha
|
|
20
|
+
* mismatch + treats the approval as stale -- user must re-approve.
|
|
21
|
+
*
|
|
22
|
+
* ASCII-only.
|
|
23
|
+
*/
|
|
24
|
+
import type { Command } from 'commander';
|
|
25
|
+
export interface ApproveOptions {
|
|
26
|
+
cwd?: string;
|
|
27
|
+
list?: boolean;
|
|
28
|
+
revoke?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function runApprove(targets: string[], opts: ApproveOptions): Promise<void>;
|
|
31
|
+
export declare function registerApproveCommand(program: Command): void;
|
|
32
|
+
//# sourceMappingURL=approve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAK,MAAM,CAAC;IAChB,IAAI,CAAC,EAAI,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuGD,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDvF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc7D"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf approve <doc...>` -- Phase IV step 13 of PRODUCT_WORKFLOW.md.
|
|
3
|
+
*
|
|
4
|
+
* The unbreakable gate. Forge refuses to proceed to Phase V
|
|
5
|
+
* (build) until the user has explicitly approved the 3 spec
|
|
6
|
+
* documents (RFP + arch + design) by their current sha256.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* yf approve rfp approve one doc
|
|
10
|
+
* yf approve rfp arch design approve all three (batch)
|
|
11
|
+
* yf approve --list show approval state
|
|
12
|
+
* yf approve --revoke <doc> revoke an approval
|
|
13
|
+
*
|
|
14
|
+
* Approval persists workflow.approvals.<doc> = {
|
|
15
|
+
* approved_at: ISO,
|
|
16
|
+
* version_sha256: sha of the spec file at approval time
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* If the doc file changes after approval, Forge detects the sha
|
|
20
|
+
* mismatch + treats the approval as stale -- user must re-approve.
|
|
21
|
+
*
|
|
22
|
+
* ASCII-only.
|
|
23
|
+
*/
|
|
24
|
+
import path from 'node:path';
|
|
25
|
+
import { promises as fs } from 'node:fs';
|
|
26
|
+
import { createHash } from 'node:crypto';
|
|
27
|
+
import prompts from 'prompts';
|
|
28
|
+
import { c, header } from '../ui/colors.js';
|
|
29
|
+
import { readWorkflow, patchWorkflowGroup, } from '../workflow/state.js';
|
|
30
|
+
const ALL_DOCS = ['rfp', 'arch', 'design'];
|
|
31
|
+
function sha256(text) {
|
|
32
|
+
return createHash('sha256').update(text, 'utf-8').digest('hex');
|
|
33
|
+
}
|
|
34
|
+
async function listState(projectRoot) {
|
|
35
|
+
const wf = await readWorkflow(projectRoot);
|
|
36
|
+
console.log(c.brand('Approval state:'));
|
|
37
|
+
console.log('');
|
|
38
|
+
for (const k of ALL_DOCS) {
|
|
39
|
+
const spec = wf.specs?.[k];
|
|
40
|
+
const apr = wf.approvals?.[k];
|
|
41
|
+
if (!spec) {
|
|
42
|
+
console.log(' ' + c.dim(k.padEnd(8)) + c.warn(' -- spec not generated yet'));
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (!apr) {
|
|
46
|
+
console.log(' ' + c.brand(k.padEnd(8)) + c.warn(' -- NOT approved (' + spec.doc_path + ', v' + spec.version + ')'));
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const stale = apr.version_sha256 !== spec.sha256;
|
|
50
|
+
if (stale) {
|
|
51
|
+
console.log(' ' + c.brand(k.padEnd(8)) + c.warn(' -- STALE (approved sha != current sha, re-approval needed)'));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log(' ' + c.brand(k.padEnd(8)) + c.success(' -- approved at ' + apr.approved_at));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
console.log('');
|
|
58
|
+
}
|
|
59
|
+
async function approveOne(projectRoot, kind) {
|
|
60
|
+
const wf = await readWorkflow(projectRoot);
|
|
61
|
+
const spec = wf.specs?.[kind];
|
|
62
|
+
if (!spec) {
|
|
63
|
+
console.log(c.error('Spec "' + kind + '" no generado todavia. Corre primero ') + c.code('yf spec ' + kind));
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
/* Re-read the file to ensure the current sha matches what was
|
|
67
|
+
* stored when the spec ran. If the user edited the file by hand
|
|
68
|
+
* between spec generation and approve, we want them to know. */
|
|
69
|
+
const abs = path.join(projectRoot, spec.doc_path);
|
|
70
|
+
let body;
|
|
71
|
+
try {
|
|
72
|
+
body = await fs.readFile(abs, 'utf-8');
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.log(c.error('No se pudo leer ' + spec.doc_path + ': ' + String(err instanceof Error ? err.message : err)));
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
const currentSha = sha256(body);
|
|
79
|
+
if (currentSha !== spec.sha256) {
|
|
80
|
+
console.log(c.warn(' ' + kind + ': el archivo cambio desde la generacion.'));
|
|
81
|
+
console.log(c.dim(' Stored sha: ' + spec.sha256.slice(0, 16) + '...'));
|
|
82
|
+
console.log(c.dim(' Current sha: ' + currentSha.slice(0, 16) + '...'));
|
|
83
|
+
const confirm = await prompts({
|
|
84
|
+
type: 'select',
|
|
85
|
+
name: 'choice',
|
|
86
|
+
message: ' Aprobar la version CURRENT (con tus ediciones)?',
|
|
87
|
+
choices: [
|
|
88
|
+
{ title: 'Si, aprobar version actual', value: 'yes' },
|
|
89
|
+
{ title: 'No, re-generar antes de aprobar', value: 'regenerate' },
|
|
90
|
+
{ title: 'Cancelar', value: 'cancel' },
|
|
91
|
+
],
|
|
92
|
+
});
|
|
93
|
+
if (confirm.choice !== 'yes') {
|
|
94
|
+
if (confirm.choice === 'regenerate') {
|
|
95
|
+
console.log(c.dim(' Corre: ') + c.code('yf spec ' + kind + ' --yes'));
|
|
96
|
+
}
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
/* Update workflow.specs.<kind>.sha256 to match. */
|
|
100
|
+
await patchWorkflowGroup(projectRoot, 'specs', {
|
|
101
|
+
[kind]: { ...spec, sha256: currentSha, done_at: new Date().toISOString() },
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
await patchWorkflowGroup(projectRoot, 'approvals', {
|
|
105
|
+
[kind]: {
|
|
106
|
+
approved_at: new Date().toISOString(),
|
|
107
|
+
version_sha256: currentSha,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
console.log(c.success(' Aprobado: ') + c.brand(kind));
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
async function revokeOne(projectRoot, kind) {
|
|
114
|
+
const wf = await readWorkflow(projectRoot);
|
|
115
|
+
if (!wf.approvals?.[kind]) {
|
|
116
|
+
console.log(c.warn(kind + ' no estaba aprobado.'));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
/* Patch with explicit removal -- set to undefined. The
|
|
120
|
+
* patchWorkflowGroup helper preserves siblings; to remove we
|
|
121
|
+
* overwrite the whole approvals object. */
|
|
122
|
+
const next = { ...(wf.approvals ?? {}) };
|
|
123
|
+
delete next[kind];
|
|
124
|
+
await patchWorkflowGroup(projectRoot, 'approvals', next);
|
|
125
|
+
console.log(c.success('Revocado: ') + c.brand(kind));
|
|
126
|
+
}
|
|
127
|
+
export async function runApprove(targets, opts) {
|
|
128
|
+
header('Yujin Forge -- approve');
|
|
129
|
+
console.log('');
|
|
130
|
+
const projectRoot = opts.cwd ? path.resolve(opts.cwd) : process.cwd();
|
|
131
|
+
if (opts.list) {
|
|
132
|
+
await listState(projectRoot);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (opts.revoke) {
|
|
136
|
+
const r = opts.revoke;
|
|
137
|
+
if (!ALL_DOCS.includes(r)) {
|
|
138
|
+
console.log(c.error('Doc invalido: ' + r + '. Valid: ' + ALL_DOCS.join(', ')));
|
|
139
|
+
process.exitCode = 1;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
await revokeOne(projectRoot, r);
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (targets.length === 0) {
|
|
146
|
+
console.log(c.error('Especifica que aprobar: ') + c.code('yf approve rfp arch design'));
|
|
147
|
+
console.log(c.dim('o solo uno: ') + c.code('yf approve rfp'));
|
|
148
|
+
console.log(c.dim('o lista: ') + c.code('yf approve --list'));
|
|
149
|
+
process.exitCode = 1;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
let allOk = true;
|
|
153
|
+
for (const t of targets) {
|
|
154
|
+
if (!ALL_DOCS.includes(t)) {
|
|
155
|
+
console.log(c.error('Doc invalido: ' + t + '. Valid: ' + ALL_DOCS.join(', ')));
|
|
156
|
+
allOk = false;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const ok = await approveOne(projectRoot, t);
|
|
160
|
+
if (!ok)
|
|
161
|
+
allOk = false;
|
|
162
|
+
}
|
|
163
|
+
console.log('');
|
|
164
|
+
/* Re-check the entire 3-doc set for status. */
|
|
165
|
+
const wf = await readWorkflow(projectRoot);
|
|
166
|
+
const fullApproved = ALL_DOCS.every((k) => {
|
|
167
|
+
const sp = wf.specs?.[k];
|
|
168
|
+
const ap = wf.approvals?.[k];
|
|
169
|
+
return sp && ap && ap.version_sha256 === sp.sha256;
|
|
170
|
+
});
|
|
171
|
+
if (fullApproved) {
|
|
172
|
+
console.log(c.success('Phase IV gate: PASSED. Los 3 docs estan aprobados + sha-locked.'));
|
|
173
|
+
console.log(c.dim('Siguiente paso: ') + c.code('yf bootstrap'));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
if (allOk) {
|
|
177
|
+
console.log(c.warn('Approbations parciales. Para destrabar Phase V hacen falta los 3 docs aprobados.'));
|
|
178
|
+
console.log(c.dim('Estado: ') + c.code('yf approve --list'));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
export function registerApproveCommand(program) {
|
|
183
|
+
program.command('approve [docs...]')
|
|
184
|
+
.description('Phase IV step 13: explicit approval gate for RFP + arch + design.')
|
|
185
|
+
.option('--cwd <path>', 'project root (default: current directory)')
|
|
186
|
+
.option('--list', 'show approval state for the 3 docs')
|
|
187
|
+
.option('--revoke <doc>', 'revoke approval for a single doc')
|
|
188
|
+
.action(async (docs, opts) => {
|
|
189
|
+
try {
|
|
190
|
+
await runApprove(docs ?? [], opts);
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
console.error(c.error(err instanceof Error ? err.message : String(err)));
|
|
194
|
+
process.exitCode = 1;
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=approve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `yf clarify <round>` -- Phase II of PRODUCT_WORKFLOW.md
|
|
3
|
+
* (steps 4 through 9).
|
|
4
|
+
*
|
|
5
|
+
* Six rounds of structured clarification:
|
|
6
|
+
*
|
|
7
|
+
* functional step 4: user stories, MVP slice, personas
|
|
8
|
+
* quantitative step 5: volumetria, paralelismo, complejidad
|
|
9
|
+
* structural step 6: persistencia, middleware, lifecycle, workers
|
|
10
|
+
* governance step 7: compliance, audit, retention, RBAC, DR
|
|
11
|
+
* operational step 8: i18n, a11y, cost, monitoring, SLA
|
|
12
|
+
* blocks step 9: descompose system + dep graph + MVP path
|
|
13
|
+
*
|
|
14
|
+
* Each round writes a markdown doc to
|
|
15
|
+
* docs/clarification/0X_<round>.md inside the user's project,
|
|
16
|
+
* and a structured summary to workflow.clarification.<round>.
|
|
17
|
+
*
|
|
18
|
+
* The 6 rounds run in order. Forge refuses to run round N+1
|
|
19
|
+
* until round N is complete. Skip is allowed only when triage
|
|
20
|
+
* tier === simple AND the round is not blocks (which everyone
|
|
21
|
+
* needs).
|
|
22
|
+
*
|
|
23
|
+
* ASCII-only.
|
|
24
|
+
*/
|
|
25
|
+
import type { Command } from 'commander';
|
|
26
|
+
type Round = 'functional' | 'quantitative' | 'structural' | 'governance' | 'operational' | 'blocks';
|
|
27
|
+
export declare function runClarify(round: Round, cwd?: string): Promise<void>;
|
|
28
|
+
export declare function registerClarifyCommand(program: Command): void;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=clarify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clarify.d.ts","sourceRoot":"","sources":["../../src/commands/clarify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,KAAK,KAAK,GAAG,YAAY,GAAG,cAAc,GAAG,YAAY,GAC5C,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAC;AAonBrD,wBAAsB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB7D"}
|