musubix3 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/.github/plugin/marketplace.json +16 -0
  2. package/.github/skills/sdd-change/SKILL.md +78 -0
  3. package/.github/skills/sdd-design/SKILL.md +26 -0
  4. package/.github/skills/sdd-formal-codegraph/SKILL.md +53 -0
  5. package/.github/skills/sdd-implementation/SKILL.md +54 -0
  6. package/.github/skills/sdd-knowledge/SKILL.md +24 -0
  7. package/.github/skills/sdd-quality/SKILL.md +69 -0
  8. package/.github/skills/sdd-requirements/SKILL.md +42 -0
  9. package/.github/skills/sdd-traceability/SKILL.md +28 -0
  10. package/CHANGELOG.md +152 -0
  11. package/LICENSE +21 -0
  12. package/README-ja.md +573 -0
  13. package/README.md +639 -0
  14. package/assets/ADR-0001.md +15 -0
  15. package/assets/constitution.md +17 -0
  16. package/assets/design.md +13 -0
  17. package/assets/requirements.md +15 -0
  18. package/dist/packages/analysis/src/adapters.d.ts +12 -0
  19. package/dist/packages/analysis/src/adapters.js +167 -0
  20. package/dist/packages/analysis/src/adapters.js.map +1 -0
  21. package/dist/packages/analysis/src/attestation.d.ts +50 -0
  22. package/dist/packages/analysis/src/attestation.js +474 -0
  23. package/dist/packages/analysis/src/attestation.js.map +1 -0
  24. package/dist/packages/analysis/src/change.d.ts +53 -0
  25. package/dist/packages/analysis/src/change.js +337 -0
  26. package/dist/packages/analysis/src/change.js.map +1 -0
  27. package/dist/packages/analysis/src/config.d.ts +104 -0
  28. package/dist/packages/analysis/src/config.js +456 -0
  29. package/dist/packages/analysis/src/config.js.map +1 -0
  30. package/dist/packages/analysis/src/files.d.ts +13 -0
  31. package/dist/packages/analysis/src/files.js +103 -0
  32. package/dist/packages/analysis/src/files.js.map +1 -0
  33. package/dist/packages/analysis/src/formal.d.ts +82 -0
  34. package/dist/packages/analysis/src/formal.js +579 -0
  35. package/dist/packages/analysis/src/formal.js.map +1 -0
  36. package/dist/packages/analysis/src/gate.d.ts +56 -0
  37. package/dist/packages/analysis/src/gate.js +484 -0
  38. package/dist/packages/analysis/src/gate.js.map +1 -0
  39. package/dist/packages/analysis/src/graph.d.ts +52 -0
  40. package/dist/packages/analysis/src/graph.js +737 -0
  41. package/dist/packages/analysis/src/graph.js.map +1 -0
  42. package/dist/packages/analysis/src/index.d.ts +17 -0
  43. package/dist/packages/analysis/src/index.js +18 -0
  44. package/dist/packages/analysis/src/index.js.map +1 -0
  45. package/dist/packages/analysis/src/knowledge.d.ts +29 -0
  46. package/dist/packages/analysis/src/knowledge.js +95 -0
  47. package/dist/packages/analysis/src/knowledge.js.map +1 -0
  48. package/dist/packages/analysis/src/model-correspondence.d.ts +45 -0
  49. package/dist/packages/analysis/src/model-correspondence.js +310 -0
  50. package/dist/packages/analysis/src/model-correspondence.js.map +1 -0
  51. package/dist/packages/analysis/src/mutation.d.ts +54 -0
  52. package/dist/packages/analysis/src/mutation.js +299 -0
  53. package/dist/packages/analysis/src/mutation.js.map +1 -0
  54. package/dist/packages/analysis/src/order.d.ts +23 -0
  55. package/dist/packages/analysis/src/order.js +89 -0
  56. package/dist/packages/analysis/src/order.js.map +1 -0
  57. package/dist/packages/analysis/src/performance.d.ts +65 -0
  58. package/dist/packages/analysis/src/performance.js +319 -0
  59. package/dist/packages/analysis/src/performance.js.map +1 -0
  60. package/dist/packages/analysis/src/process.d.ts +14 -0
  61. package/dist/packages/analysis/src/process.js +79 -0
  62. package/dist/packages/analysis/src/process.js.map +1 -0
  63. package/dist/packages/analysis/src/tdd.d.ts +65 -0
  64. package/dist/packages/analysis/src/tdd.js +353 -0
  65. package/dist/packages/analysis/src/tdd.js.map +1 -0
  66. package/dist/packages/analysis/src/trace.d.ts +45 -0
  67. package/dist/packages/analysis/src/trace.js +242 -0
  68. package/dist/packages/analysis/src/trace.js.map +1 -0
  69. package/dist/packages/analysis/src/workflow.d.ts +59 -0
  70. package/dist/packages/analysis/src/workflow.js +405 -0
  71. package/dist/packages/analysis/src/workflow.js.map +1 -0
  72. package/dist/packages/cli/src/install.d.ts +15 -0
  73. package/dist/packages/cli/src/install.js +71 -0
  74. package/dist/packages/cli/src/install.js.map +1 -0
  75. package/dist/packages/cli/src/main.d.ts +3 -0
  76. package/dist/packages/cli/src/main.js +364 -0
  77. package/dist/packages/cli/src/main.js.map +1 -0
  78. package/dist/packages/domain/src/constitution.d.ts +3 -0
  79. package/dist/packages/domain/src/constitution.js +46 -0
  80. package/dist/packages/domain/src/constitution.js.map +1 -0
  81. package/dist/packages/domain/src/design.d.ts +8 -0
  82. package/dist/packages/domain/src/design.js +59 -0
  83. package/dist/packages/domain/src/design.js.map +1 -0
  84. package/dist/packages/domain/src/index.d.ts +5 -0
  85. package/dist/packages/domain/src/index.js +6 -0
  86. package/dist/packages/domain/src/index.js.map +1 -0
  87. package/dist/packages/domain/src/markdown.d.ts +16 -0
  88. package/dist/packages/domain/src/markdown.js +72 -0
  89. package/dist/packages/domain/src/markdown.js.map +1 -0
  90. package/dist/packages/domain/src/requirements.d.ts +3 -0
  91. package/dist/packages/domain/src/requirements.js +195 -0
  92. package/dist/packages/domain/src/requirements.js.map +1 -0
  93. package/dist/packages/domain/src/types.d.ts +100 -0
  94. package/dist/packages/domain/src/types.js +14 -0
  95. package/dist/packages/domain/src/types.js.map +1 -0
  96. package/package.json +59 -0
  97. package/plugin.json +9 -0
@@ -0,0 +1,364 @@
1
+ #!/usr/bin/env node
2
+ import { Command, CommanderError } from 'commander';
3
+ import { basename, relative, resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { c4Diagram, validateConstitution, validateDesign, validateRequirements, } from '../../domain/src/index.js';
6
+ import { buildKnowledge, buildTrace, changedFiles, checkTrace, cycles, files, formalCheck, graphGate, graphImpact, indexGraph, loadConfig, loadGraph, loadTrace, portable, projectStatus, queryKnowledge, formalDoctor, generateFormalArtifacts, readText, runGate, traceImpact, changePhases, recordChangePhase, recordWorkflow, runTddPhase, verifyWorkflowLogFile, attestationSigningPayload, createUnsignedAttestation, githubOidcAudience, verifyEvidenceAttestation, validateMutationEvidence, validateModelCorrespondenceEvidence, } from '../../analysis/src/index.js';
7
+ import { install, pluginInstall } from './install.js';
8
+ const packageRoot = fileURLToPath(new URL('../../../../', import.meta.url));
9
+ function output(value, json, summary) {
10
+ if (json || !summary)
11
+ console.log(JSON.stringify(value, null, 2));
12
+ else
13
+ console.log(summary);
14
+ }
15
+ function result(value, json) {
16
+ output(value, json, `${value.valid ? 'PASS / 合格' : 'FAIL / 不合格'}\n${value.diagnostics.map((d) => `${d.severity} ${d.code}${d.path ? ` ${d.path}${d.line ? `:${d.line}` : ''}` : ''}: ${d.message}`).join('\n')}`.trim());
17
+ if (!value.valid)
18
+ process.exitCode = 1;
19
+ }
20
+ function common(command) {
21
+ return command.option('--root <directory>', 'Project root / プロジェクトルート', '.').option('--json', 'Machine-readable JSON');
22
+ }
23
+ function pathQuery(root, query) {
24
+ return portable(relative(root, resolve(root, query)));
25
+ }
26
+ export function createProgram() {
27
+ const program = new Command().name('musubix3').description('Evidence-driven SDD for GitHub Copilot CLI / 根拠に基づく仕様駆動開発').version('0.1.0');
28
+ program.exitOverride();
29
+ common(program.command('init').alias('install').description('Install repository skills and SDD artifacts (preserves existing files)'))
30
+ .option('--dry-run', 'Preview without writing').option('--force', 'Replace bundled, managed paths only')
31
+ .option('--feature <slug>', 'Starter feature directory', 'example')
32
+ .action(async (options) => {
33
+ const report = await install(resolve(options.root), packageRoot, options);
34
+ output(report, !!options.json, report.actions.map((a) => `${a.action.padEnd(10)} ${a.path}`).join('\n'));
35
+ });
36
+ program.command('plugin-install').description('Delegate plugin installation to native copilot plugin install')
37
+ .option('--json').action(async (options) => {
38
+ const report = await pluginInstall(packageRoot);
39
+ output(report, !!options.json, `${report.status}: ${report.stdout}${report.stderr}`);
40
+ if (report.status !== 'completed' || report.exitCode !== 0)
41
+ process.exitCode = 1;
42
+ });
43
+ const requirements = program.command('requirements').description('EARS requirement validation');
44
+ common(requirements.command('validate <file>')).action(async (file, options) => {
45
+ const root = resolve(options.root);
46
+ result(validateRequirements(await readText(root, file), portable(relative(root, resolve(root, file)))), !!options.json);
47
+ });
48
+ const constitution = program.command('constitution').description('Versioned measurable policy validation');
49
+ common(constitution.command('validate [file]')).action(async (file, options) => {
50
+ const path = file ?? '.musubix/constitution.md';
51
+ result(validateConstitution(await readText(resolve(options.root), path), path), !!options.json);
52
+ });
53
+ const design = program.command('design').description('Explicit design component validation and diagrams');
54
+ async function designResult(file, root) {
55
+ const paths = await files(root);
56
+ const ids = new Set();
57
+ for (const path of paths.filter((p) => /^\.musubix\/features\/[^/]+\/requirements\.md$/.test(p))) {
58
+ for (const requirement of validateRequirements(await readText(root, path)).value)
59
+ ids.add(requirement.id);
60
+ }
61
+ const designIds = new Set();
62
+ for (const path of paths.filter((p) => /^\.musubix\/features\/[^/]+\/design\.md$/.test(p))) {
63
+ for (const component of validateDesign(await readText(root, path)).value)
64
+ designIds.add(component.id);
65
+ }
66
+ const text = await readText(root, file);
67
+ for (const component of validateDesign(text).value)
68
+ designIds.add(component.id);
69
+ return validateDesign(text, file, {
70
+ requirementIds: ids,
71
+ designIds,
72
+ adrIds: new Set(paths.filter((p) => /^\.musubix\/decisions\/ADR-\d+\.md$/.test(p)).map((p) => basename(p, '.md'))),
73
+ });
74
+ }
75
+ common(design.command('validate <file>')).action(async (file, options) => {
76
+ result(await designResult(file, resolve(options.root)), !!options.json);
77
+ });
78
+ common(design.command('c4 <file>')).action(async (file, options) => {
79
+ const report = await designResult(file, resolve(options.root));
80
+ if (!report.valid) {
81
+ result(report, !!options.json);
82
+ return;
83
+ }
84
+ const diagram = c4Diagram(report.value);
85
+ output({ diagram }, !!options.json, diagram);
86
+ });
87
+ const trace = program.command('trace').description('Generated requirement/design/code/test traceability');
88
+ common(trace.command('build')).action(async (options) => {
89
+ const graph = await buildTrace(resolve(options.root));
90
+ output(graph, !!options.json, `Trace: ${graph.nodes.length} nodes, ${graph.edges.length} edges, ${graph.diagnostics.length} diagnostics.`);
91
+ if (graph.diagnostics.some((d) => d.severity === 'error'))
92
+ process.exitCode = 1;
93
+ });
94
+ common(trace.command('check')).option('--strict', 'Fail missing mandatory coverage')
95
+ .action(async (options) => {
96
+ const root = resolve(options.root);
97
+ result(await checkTrace(root, await loadTrace(root), !!options.strict), !!options.json);
98
+ });
99
+ common(trace.command('impact <id-or-path>')).action(async (query, options) => {
100
+ const root = resolve(options.root);
101
+ const graph = await loadTrace(root);
102
+ const freshness = await checkTrace(root, graph);
103
+ const stale = freshness.diagnostics.some((d) => d.code.startsWith('TRACE_STALE'));
104
+ if (stale)
105
+ throw new Error('Trace graph is stale; run trace build before impact analysis.');
106
+ output(traceImpact(graph, graph.nodes.some((n) => n.id === query) ? query : pathQuery(root, query)), !!options.json);
107
+ });
108
+ const graph = program.command('graph').description('Compiler-based imports, symbols, calls and architecture');
109
+ common(graph.command('index')).option('--changed', 'Report changed files; conservatively refresh full graph')
110
+ .action(async (options) => {
111
+ const root = resolve(options.root);
112
+ const changed = options.changed ? await changedFiles(root) : null;
113
+ const indexed = await indexGraph(root);
114
+ output({ ...indexed, changed }, !!options.json, `Graph: ${indexed.files.length} files, ${indexed.imports.length} imports, ${indexed.symbols.length} symbols.`);
115
+ if (indexed.diagnostics.some((d) => d.severity === 'error'))
116
+ process.exitCode = 1;
117
+ });
118
+ common(graph.command('impact <symbol-or-path>')).action(async (query, options) => {
119
+ const root = resolve(options.root);
120
+ const indexed = await loadGraph(root);
121
+ const normalized = indexed.files.includes(pathQuery(root, query)) ? pathQuery(root, query) : query;
122
+ output(graphImpact(indexed, normalized), !!options.json);
123
+ });
124
+ common(graph.command('cycles')).action(async (options) => {
125
+ const found = cycles(await loadGraph(resolve(options.root)));
126
+ output({ cycles: found }, !!options.json);
127
+ if (found.length)
128
+ process.exitCode = 1;
129
+ });
130
+ common(graph.command('gate')).action(async (options) => {
131
+ const root = resolve(options.root);
132
+ const config = await loadConfig(root);
133
+ result(graphGate(await indexGraph(root), config.architecture, config.codeGraph), !!options.json);
134
+ });
135
+ const knowledge = program.command('knowledge').description('Local artifact and Git evidence retrieval (TF-IDF, not GraphRAG)');
136
+ common(knowledge.command('build')).action(async (options) => {
137
+ const index = await buildKnowledge(resolve(options.root));
138
+ output(index, !!options.json, `Knowledge: ${index.documents.length} documents; git ${index.git.status}.`);
139
+ });
140
+ common(knowledge.command('query <text...>')).option('--limit <count>', 'Maximum results', '10')
141
+ .action(async (query, options) => {
142
+ const limit = Number(options.limit);
143
+ if (!Number.isInteger(limit) || limit < 1 || limit > 100)
144
+ throw new Error('--limit must be 1..100.');
145
+ output(await queryKnowledge(resolve(options.root), query.join(' '), limit), !!options.json);
146
+ });
147
+ const formal = program.command('formal').description('Honest consistency checking of an explicit abstraction');
148
+ common(formal.command('check <file>'))
149
+ .option('--solver <solver>', 'auto | none | z3 | lean', 'auto')
150
+ .option('--timeout <milliseconds>', 'Solver timeout', '12000')
151
+ .option('--z3-command <path>', 'Z3 executable path (or MUSUBIX3_Z3)')
152
+ .option('--lean-command <path>', 'Lean executable path (or MUSUBIX3_LEAN)')
153
+ .action(async (file, options) => {
154
+ if (!['auto', 'none', 'z3', 'lean'].includes(options.solver))
155
+ throw new Error('Unknown solver; use auto, none, z3, or lean.');
156
+ const timeoutMs = Number(options.timeout);
157
+ if (!Number.isInteger(timeoutMs) || timeoutMs < 100 || timeoutMs > 300_000)
158
+ throw new Error('--timeout must be 100..300000 milliseconds.');
159
+ const root = resolve(options.root);
160
+ const report = await formalCheck(await readText(root, file), root, {
161
+ solver: options.solver,
162
+ timeoutMs,
163
+ ...(options.z3Command ? { z3Command: options.z3Command } : {}),
164
+ ...(options.leanCommand ? { leanCommand: options.leanCommand } : {}),
165
+ });
166
+ output(report, !!options.json);
167
+ if (!report.valid)
168
+ process.exitCode = 1;
169
+ });
170
+ common(formal.command('generate <file>'))
171
+ .option('--format <format>', 'both | smt2 | lean', 'both')
172
+ .action(async (file, options) => {
173
+ if (!['both', 'smt2', 'lean'].includes(options.format))
174
+ throw new Error('Unknown format; use both, smt2, or lean.');
175
+ const root = resolve(options.root);
176
+ const formats = options.format === 'both' ? ['smt2', 'lean'] : [options.format];
177
+ const report = await generateFormalArtifacts(await readText(root, file), root, [...formats]);
178
+ output(report, !!options.json, report.artifacts.map((entry) => `${entry.format}: ${entry.path}`).join('\n'));
179
+ if (!report.valid)
180
+ process.exitCode = 1;
181
+ });
182
+ common(formal.command('doctor'))
183
+ .option('--timeout <milliseconds>', 'Probe timeout', '5000')
184
+ .option('--z3-command <path>', 'Z3 executable path (or MUSUBIX3_Z3)')
185
+ .option('--lean-command <path>', 'Lean executable path (or MUSUBIX3_LEAN)')
186
+ .action(async (options) => {
187
+ const timeoutMs = Number(options.timeout);
188
+ if (!Number.isInteger(timeoutMs) || timeoutMs < 100 || timeoutMs > 300_000)
189
+ throw new Error('--timeout must be 100..300000 milliseconds.');
190
+ const report = await formalDoctor(resolve(options.root), {
191
+ timeoutMs,
192
+ ...(options.z3Command ? { z3Command: options.z3Command } : {}),
193
+ ...(options.leanCommand ? { leanCommand: options.leanCommand } : {}),
194
+ });
195
+ output(report, !!options.json, report.solvers.map((entry) => `${entry.name}: ${entry.status}${entry.version ? ` (${entry.version})` : ''}`).join('\n'));
196
+ });
197
+ common(program.command('gate').description('Run actual configured commands and deterministic SDD checks'))
198
+ .option('--changed', 'Report changed/impacted files; keep all checks to avoid unsafe skips')
199
+ .action(async (options) => {
200
+ const report = await runGate(resolve(options.root), options);
201
+ output(report, !!options.json, `${report.status.toUpperCase()}\n${report.checks.map((c) => `${c.status.padEnd(7)} ${c.name}${c.required ? ' [required]' : ' [optional]'}: ${c.summary}`).join('\n')}`);
202
+ if (report.status !== 'pass')
203
+ process.exitCode = 1;
204
+ });
205
+ const mutation = program.command('mutation').description('Validate requirement-scoped schema-v1 mutation evidence');
206
+ common(mutation.command('validate')).action(async (options) => {
207
+ const report = await validateMutationEvidence(resolve(options.root));
208
+ result(report, !!options.json);
209
+ });
210
+ const correspondence = program.command('model-correspondence')
211
+ .description('Validate formal-model to authoritative passing-test correspondence');
212
+ common(correspondence.command('validate')).action(async (options) => {
213
+ const report = await validateModelCorrespondenceEvidence(resolve(options.root));
214
+ result(report, !!options.json);
215
+ });
216
+ common(program.command('workflow-record <skill> <phase>').description('Record a self-reported workflow declaration'))
217
+ .requiredOption('--status <status>', 'completed | skipped | failed')
218
+ .option('--reason <text>', 'Reason for skipped or failed phases')
219
+ .option('--command <text>', 'Command to hash without storing its contents')
220
+ .action(async (skill, phase, options) => {
221
+ if (!['completed', 'skipped', 'failed'].includes(options.status))
222
+ throw new Error('--status must be completed, skipped, or failed.');
223
+ const manifest = await recordWorkflow(resolve(options.root), {
224
+ skill,
225
+ phase,
226
+ status: options.status,
227
+ ...(options.reason ? { reason: options.reason } : {}),
228
+ ...(options.command ? { command: options.command } : {}),
229
+ });
230
+ output(manifest, !!options.json, `Recorded ${skill}:${phase} as ${options.status}.`);
231
+ });
232
+ common(program.command('workflow-verify <log>').description('Reconcile workflow declarations with Copilot JSONL Skill events'))
233
+ .option('--strict', 'Require a complete Copilot JSONL transcript and successful terminal result')
234
+ .option('--session-id <uuid>', 'Require the terminal result to identify this Copilot session')
235
+ .action(async (log, options) => {
236
+ const root = resolve(options.root);
237
+ const path = resolve(log);
238
+ const info = await stat(path);
239
+ if (!info.isFile())
240
+ throw new Error('Workflow log must be a file.');
241
+ const configured = (await loadConfig(root)).workflow;
242
+ const mode = options.strict || options.sessionId ? 'strict' : configured.mode;
243
+ const expectedSessionId = options.sessionId ?? configured.expectedSessionId;
244
+ const manifest = await verifyWorkflowLogFile(root, path, {
245
+ mode,
246
+ ...(expectedSessionId ? { expectedSessionId } : {}),
247
+ ...(configured.maxAgeSeconds === undefined ? {} : { maxAgeSeconds: configured.maxAgeSeconds }),
248
+ ...(configured.maxFutureSkewSeconds === undefined
249
+ ? {}
250
+ : { maxFutureSkewSeconds: configured.maxFutureSkewSeconds }),
251
+ });
252
+ output(manifest, !!options.json, `Verified ${manifest.verification?.invocations.length ?? 0} Copilot Skill invocation event(s)`
253
+ + `${manifest.verification?.sessionId ? ` in session ${manifest.verification.sessionId}` : ''}.`);
254
+ });
255
+ const attestation = program.command('attestation').description('Create and verify static-key or GitHub OIDC-authorized Ed25519 attestations');
256
+ common(attestation.command('oidc-audience'))
257
+ .requiredOption('--key-id <id>', 'Attestation signing-key identity')
258
+ .option('--public-key-file <file>', 'Ephemeral Ed25519 public key PEM for public-key binding')
259
+ .action(async (options) => {
260
+ const root = resolve(options.root);
261
+ const oidc = (await loadConfig(root)).attestation.githubOidc;
262
+ if (oidc?.mode !== 'strict' || !oidc.audience)
263
+ throw new Error('Strict GitHub OIDC attestation is not configured.');
264
+ if (oidc.keyBinding === 'key-id' && options.publicKeyFile) {
265
+ throw new Error('OIDC key-id binding must not use --public-key-file.');
266
+ }
267
+ const publicKey = options.publicKeyFile
268
+ ? await readFile(resolve(root, options.publicKeyFile), 'utf8')
269
+ : undefined;
270
+ const audience = githubOidcAudience(oidc.audience, oidc.keyBinding ?? 'public-key', options.keyId, publicKey);
271
+ output({ audience, keyBinding: oidc.keyBinding ?? 'public-key' }, !!options.json, audience);
272
+ });
273
+ common(attestation.command('payload'))
274
+ .requiredOption('--provider <provider>', 'github | azure-pipelines | generic')
275
+ .requiredOption('--run-id <id>', 'CI run identity')
276
+ .requiredOption('--key-id <id>', 'Attestation signing-key identity')
277
+ .option('--public-key-file <file>', 'Ephemeral Ed25519 public key PEM (never a private key)')
278
+ .option('--github-oidc-token-file <file>', 'GitHub Actions OIDC JWT file')
279
+ .action(async (options) => {
280
+ if (!['github', 'azure-pipelines', 'generic'].includes(options.provider))
281
+ throw new Error('Unknown attestation provider.');
282
+ const root = resolve(options.root);
283
+ const configured = (await loadConfig(root)).attestation.githubOidc;
284
+ if (configured?.mode === 'strict' && options.provider !== 'github') {
285
+ throw new Error('Strict GitHub OIDC attestation requires --provider github.');
286
+ }
287
+ if (configured?.mode === 'strict' && !options.githubOidcTokenFile) {
288
+ throw new Error('Strict GitHub OIDC attestation requires --github-oidc-token-file.');
289
+ }
290
+ if (configured?.mode === 'strict' && (configured.keyBinding ?? 'public-key') === 'public-key' && !options.publicKeyFile) {
291
+ throw new Error('OIDC public-key binding requires --public-key-file.');
292
+ }
293
+ if (configured?.mode === 'strict' && configured.keyBinding === 'key-id' && options.publicKeyFile) {
294
+ throw new Error('OIDC key-id binding must not use --public-key-file.');
295
+ }
296
+ const publicKey = options.publicKeyFile
297
+ ? await readFile(resolve(root, options.publicKeyFile), 'utf8')
298
+ : undefined;
299
+ const token = options.githubOidcTokenFile
300
+ ? (await readFile(resolve(root, options.githubOidcTokenFile), 'utf8')).trim()
301
+ : undefined;
302
+ if (configured?.mode === 'strict') {
303
+ githubOidcAudience(configured.audience, configured.keyBinding ?? 'public-key', options.keyId, publicKey);
304
+ }
305
+ const unsigned = await createUnsignedAttestation(root, {
306
+ provider: options.provider,
307
+ runId: options.runId,
308
+ keyId: options.keyId,
309
+ ...(token ? { githubOidc: { token, ...(publicKey ? { publicKey } : {}) } } : {}),
310
+ });
311
+ output({ unsigned, signingPayload: attestationSigningPayload(unsigned) }, !!options.json, attestationSigningPayload(unsigned));
312
+ });
313
+ common(attestation.command('verify')).action(async (options) => {
314
+ const root = resolve(options.root);
315
+ const report = await verifyEvidenceAttestation(root, (await loadConfig(root)).attestation);
316
+ output(report, !!options.json, `${report.status}: ${report.valid ? 'valid' : 'invalid'}`);
317
+ if (!report.valid)
318
+ process.exitCode = 1;
319
+ });
320
+ common(program.command('change-record <change-id> <phase>').description('Record an ordered staged-change fingerprint checkpoint'))
321
+ .requiredOption('--requirement <ids...>', 'Requirement IDs affected by this change')
322
+ .action(async (changeId, phase, options) => {
323
+ if (!changePhases.includes(phase))
324
+ throw new Error(`phase must be one of: ${changePhases.join(', ')}`);
325
+ const evidence = await recordChangePhase(resolve(options.root), changeId, phase, options.requirement);
326
+ output(evidence, !!options.json, `Recorded ${changeId}:${phase}.`);
327
+ });
328
+ const tdd = program.command('tdd').description('Verified Red-Green-Refactor execution evidence');
329
+ for (const phase of ['red', 'green', 'refactor']) {
330
+ common(tdd.command(`${phase} <test-id>`))
331
+ .requiredOption('--requirement <id>', 'Requirement ID verified by the test')
332
+ .requiredOption('--command <name>', 'Configured command name to execute')
333
+ .action(async (testId, options) => {
334
+ const evidence = await runTddPhase(resolve(options.root), phase, testId, options.requirement, options.command);
335
+ output(evidence, !!options.json, `${phase.toUpperCase()}: ${evidence.valid ? 'PASS' : 'FAIL'} (${testId})`);
336
+ if (!evidence.valid)
337
+ process.exitCode = 1;
338
+ });
339
+ }
340
+ common(program.command('status').description('One-shot artifact and gate readiness summary'))
341
+ .action(async (options) => {
342
+ const status = await projectStatus(resolve(options.root));
343
+ output(status, !!options.json, `SDD: ${status.initialized ? 'initialized / 初期化済み' : 'not initialized / 未初期化'}\nRequirements: ${status.artifacts.requirements}; designs: ${status.artifacts.designs}; ADRs: ${status.artifacts.decisions}\nCode Graph: ${status.codeGraph?.mode ?? 'unconfigured'}\nGate: ${status.gate.status}; ready: ${status.gate.ready}\n${status.next.join('\n')}`);
344
+ });
345
+ return program;
346
+ }
347
+ async function main() {
348
+ try {
349
+ await createProgram().parseAsync(process.argv);
350
+ }
351
+ catch (cause) {
352
+ if (cause instanceof CommanderError && cause.exitCode === 0)
353
+ return;
354
+ const message = cause instanceof Error ? cause.message : String(cause);
355
+ if (process.argv.includes('--json'))
356
+ console.log(JSON.stringify({ error: { code: 'CLI_ERROR', message } }));
357
+ else
358
+ console.error(`musubix3: ${message}`);
359
+ process.exitCode = 2;
360
+ }
361
+ }
362
+ await main();
363
+ import { readFile, stat } from 'node:fs/promises';
364
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../packages/cli/src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type Constitution, type Validation } from './types.js';
2
+ export declare const constitutionMetrics: readonly ["requirements.errors", "design.errors", "trace.errors", "graph.violations", "commands.failures", "commands.skipped"];
3
+ export declare function validateConstitution(text: string, path?: string): Validation<Constitution>;
@@ -0,0 +1,46 @@
1
+ import { duplicates, field, markdown } from './markdown.js';
2
+ import { error, validation } from './types.js';
3
+ export const constitutionMetrics = [
4
+ 'requirements.errors', 'design.errors', 'trace.errors', 'graph.violations',
5
+ 'commands.failures', 'commands.skipped',
6
+ ];
7
+ export function validateConstitution(text, path = '<input>') {
8
+ const parsed = markdown(text, path);
9
+ const version = String(parsed.metadata.version ?? '');
10
+ const diagnostics = [...parsed.diagnostics, ...duplicates(parsed.sections, path)];
11
+ if (!/^\d+\.\d+\.\d+$/.test(version))
12
+ diagnostics.push(error('CONST_VERSION', 'Frontmatter version must be a semantic version (e.g. 1.0.0).', path, 1));
13
+ const principles = [];
14
+ const rules = [];
15
+ let principle = '';
16
+ for (const section of parsed.sections) {
17
+ if (/^PRINC-/i.test(section.id)) {
18
+ principle = section.id;
19
+ principles.push(principle);
20
+ if (!/^PRINC-\d{3,}$/.test(principle) || !section.title)
21
+ diagnostics.push(error('CONST_PRINCIPLE', 'Principles need a PRINC-001 ID and title.', path, section.line));
22
+ }
23
+ else if (/^RULE-/i.test(section.id)) {
24
+ if (!/^RULE-\d{3,}$/.test(section.id) || !section.title || !principle)
25
+ diagnostics.push(error('CONST_RULE', 'Rules need a RULE-001 ID, title, and preceding principle.', path, section.line));
26
+ const metric = field(section.body, 'Metric|指標');
27
+ const rawLimit = field(section.body, 'Limit|上限');
28
+ const limit = Number(rawLimit);
29
+ if (!constitutionMetrics.includes(metric))
30
+ diagnostics.push(error('CONST_METRIC', `Unsupported metric ${metric || '(missing)'}. Supported: ${constitutionMetrics.join(', ')}.`, path, section.line));
31
+ if (!rawLimit || !Number.isFinite(limit) || limit < 0)
32
+ diagnostics.push(error('CONST_LIMIT', 'A measurable nonnegative numeric upper limit is required.', path, section.line));
33
+ rules.push({ id: section.id, principle, metric, limit, line: section.line });
34
+ }
35
+ }
36
+ if (!principles.length)
37
+ diagnostics.push(error('CONST_PRINCIPLES_MISSING', 'At least one versioned principle is required.', path));
38
+ if (!rules.length)
39
+ diagnostics.push(error('CONST_RULES_MISSING', 'At least one measurable rule is required.', path));
40
+ for (const id of principles) {
41
+ if (!rules.some((r) => r.principle === id))
42
+ diagnostics.push(error('CONST_EMPTY_PRINCIPLE', `${id} has no measurable rules.`, path));
43
+ }
44
+ return validation({ version, principles, rules }, diagnostics);
45
+ }
46
+ //# sourceMappingURL=constitution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constitution.js","sourceRoot":"","sources":["../../../../packages/domain/src/constitution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Component, type Validation } from './types.js';
2
+ export interface DesignContext {
3
+ requirementIds?: ReadonlySet<string>;
4
+ adrIds?: ReadonlySet<string>;
5
+ designIds?: ReadonlySet<string>;
6
+ }
7
+ export declare function validateDesign(text: string, path?: string, context?: DesignContext): Validation<Component[]>;
8
+ export declare function c4Diagram(components: Component[]): string;
@@ -0,0 +1,59 @@
1
+ import { duplicates, field, markdown, references } from './markdown.js';
2
+ import { error, ids, validation } from './types.js';
3
+ export function validateDesign(text, path = '<input>', context = {}) {
4
+ const parsed = markdown(text, path);
5
+ const sections = parsed.sections.filter((s) => /^DES-/i.test(s.id));
6
+ const diagnostics = [...parsed.diagnostics, ...duplicates(sections, path)];
7
+ if (parsed.metadata.schemaVersion !== undefined && parsed.metadata.schemaVersion !== 1)
8
+ diagnostics.push(error('DES_SCHEMA', 'Unsupported schemaVersion; expected 1.', path));
9
+ if (!sections.length)
10
+ diagnostics.push(error('DES_MISSING', 'No components found (## DES-FEATURE-001: Title).', path));
11
+ const value = sections.map((s) => {
12
+ if (!ids.design.test(s.id))
13
+ diagnostics.push(error('DES_ID', `Invalid design ID ${s.id}.`, path, s.line));
14
+ if (!s.title)
15
+ diagnostics.push(error('DES_TITLE', 'Component title is required.', path, s.line));
16
+ const responsibility = field(s.body, 'Responsibilities|Responsibility|責務');
17
+ const interfaces = field(s.body, 'Interfaces|Interface|インターフェース');
18
+ const constraints = field(s.body, 'Constraints|制約');
19
+ for (const [name, content] of Object.entries({ responsibility, interfaces, constraints })) {
20
+ if (!content || /^(TODO|TBD|N\/A|未定)$/i.test(content))
21
+ diagnostics.push(error('DES_FIELD', `${s.id} requires concrete ${name}.`, path, s.line));
22
+ }
23
+ const requirements = references(field(s.body, 'Requirements|要求'), 'REQ');
24
+ const decisions = references(field(s.body, 'ADRs|ADR|決定'), 'ADR');
25
+ const dependencies = references(field(s.body, 'Depends-On|依存'), 'DES');
26
+ if (!requirements.length)
27
+ diagnostics.push(error('DES_REQUIREMENTS', `${s.id} must link requirements.`, path, s.line));
28
+ if (!decisions.length)
29
+ diagnostics.push(error('DES_ADR', `${s.id} must reference an ADR.`, path, s.line));
30
+ for (const id of requirements) {
31
+ if (!ids.requirement.test(id) || (context.requirementIds && !context.requirementIds.has(id)))
32
+ diagnostics.push(error('DES_REQUIREMENT_LINK', `Unknown or invalid requirement ${id}.`, path, s.line));
33
+ }
34
+ for (const id of decisions) {
35
+ if (!ids.adr.test(id) || (context.adrIds && !context.adrIds.has(id)))
36
+ diagnostics.push(error('DES_ADR_LINK', `Unknown or invalid ADR ${id}.`, path, s.line));
37
+ }
38
+ for (const id of dependencies) {
39
+ if (!ids.design.test(id) || (context.designIds && !context.designIds.has(id)))
40
+ diagnostics.push(error('DES_DEPENDENCY', `Unknown or invalid component dependency ${id}.`, path, s.line));
41
+ }
42
+ return { id: s.id, title: s.title, responsibility, interfaces, constraints, requirements, decisions, dependencies, line: s.line };
43
+ });
44
+ return validation(value, diagnostics);
45
+ }
46
+ export function c4Diagram(components) {
47
+ const quote = (s) => s.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/[<>\r\n]/g, ' ');
48
+ const key = (id) => id.replace(/[^A-Za-z0-9_]/g, '_');
49
+ const lines = ['flowchart LR', ' subgraph System["System / システム"]'];
50
+ for (const c of components)
51
+ lines.push(` ${key(c.id)}["${quote(c.id)}: ${quote(c.title)}<br/>${quote(c.responsibility)}"]`);
52
+ lines.push(' end');
53
+ for (const c of components) {
54
+ for (const dependency of c.dependencies)
55
+ lines.push(` ${key(c.id)} --> ${key(dependency)}`);
56
+ }
57
+ return `${lines.join('\n')}\n`;
58
+ }
59
+ //# sourceMappingURL=design.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.js","sourceRoot":"","sources":["../../../../packages/domain/src/design.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './markdown.js';
3
+ export * from './requirements.js';
4
+ export * from './design.js';
5
+ export * from './constitution.js';
@@ -0,0 +1,6 @@
1
+ export * from './types.js';
2
+ export * from './markdown.js';
3
+ export * from './requirements.js';
4
+ export * from './design.js';
5
+ export * from './constitution.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/domain/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { type Diagnostic } from './types.js';
2
+ export interface Section {
3
+ id: string;
4
+ title: string;
5
+ body: string;
6
+ line: number;
7
+ level: number;
8
+ }
9
+ export declare function markdown(text: string, path?: string): {
10
+ metadata: Record<string, unknown>;
11
+ sections: Section[];
12
+ diagnostics: Diagnostic[];
13
+ };
14
+ export declare function field(body: string, names: string): string;
15
+ export declare function references(text: string, prefix: string): string[];
16
+ export declare function duplicates(sections: Section[], path: string): Diagnostic[];