sillyspec 3.27.12 → 3.28.2
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/.claude/skills/sillyspec-execute/SKILL.md +214 -214
- package/.claude/skills/sillyspec-plan/SKILL.md +156 -156
- package/.claude/skills/sillyspec-quick/SKILL.md +116 -116
- package/package.json +1 -1
- package/src/agent-session-log.js +77 -10
- package/src/archive-delta.js +419 -0
- package/src/config-schema.js +2 -2
- package/src/contract-matrix.js +15 -2
- package/src/design-facts.js +354 -0
- package/src/docs-check.js +79 -8
- package/src/doctor-diagnostics.js +75 -3
- package/src/endpoint-baseline.js +109 -0
- package/src/endpoint-extractor.js +100 -24
- package/src/git-helper.js +31 -0
- package/src/index.js +248 -8
- package/src/machine-interface.js +63 -0
- package/src/modules.js +41 -12
- package/src/progress/change-registry.js +20 -0
- package/src/progress/consistency-doctor.js +124 -5
- package/src/progress/stage-machine.js +118 -2
- package/src/progress.js +6 -0
- package/src/quicklog.js +51 -0
- package/src/run/command.js +71 -2
- package/src/run/complete-handlers.js +84 -7
- package/src/run/complete.js +58 -5
- package/src/run/gates.js +333 -2
- package/src/run/prompt.js +70 -0
- package/src/run/quick-audit.js +98 -0
- package/src/run/scan-profile.js +98 -6
- package/src/run/shared.js +66 -1
- package/src/run/stage.js +25 -12
- package/src/scan-diff.js +54 -1
- package/src/scan-facts.js +173 -0
- package/src/scan-postcheck.js +110 -3
- package/src/spec-sync.js +210 -16
- package/src/stage-review.js +62 -3
- package/src/stages/archive.js +5 -5
- package/src/stages/brainstorm.js +10 -10
- package/src/stages/execute.js +21 -15
- package/src/stages/plan-postcheck.js +194 -1
- package/src/stages/plan.js +6 -2
- package/src/stages/scan.js +44 -102
- package/src/stages/verify.js +9 -7
- package/src/sync.js +122 -4
- package/src/task-review.js +51 -4
- package/src/taskcard.js +8 -1
- package/src/verify-postcheck.js +670 -10
- package/src/verify-probes.js +92 -10
- package/src/workflow.js +30 -0
- package/templates/agents-instruction.md +1 -1
- package/templates/prompts/taskcard-rules.md +5 -0
- package/templates/workflows/scan-docs.yaml +6 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-archive/SKILL.md +0 -87
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-auto/SKILL.md +0 -93
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -114
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-commit/SKILL.md +0 -67
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-continue/SKILL.md +0 -47
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-doctor/SKILL.md +0 -76
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-execute/SKILL.md +0 -214
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-explore/SKILL.md +0 -102
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-export/SKILL.md +0 -57
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-init/SKILL.md +0 -177
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-knowledge/SKILL.md +0 -270
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-plan/SKILL.md +0 -156
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-quick/SKILL.md +0 -116
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-resume/SKILL.md +0 -70
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-scan/SKILL.md +0 -79
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-state/SKILL.md +0 -64
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-status/SKILL.md +0 -54
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-verify/SKILL.md +0 -87
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-workspace/SKILL.md +0 -175
- package/.claude/worktrees/sillyspec-data-model-research/.gitattributes +0 -2
- package/.claude/worktrees/sillyspec-data-model-research/.husky/pre-push +0 -20
- package/.claude/worktrees/sillyspec-data-model-research/README.md +0 -203
- package/.claude/worktrees/sillyspec-data-model-research/SKILL.md +0 -91
- package/.claude/worktrees/sillyspec-data-model-research/bin/sillyspec.js +0 -2
- package/.claude/worktrees/sillyspec-data-model-research/logo.jpg +0 -0
- package/.claude/worktrees/sillyspec-data-model-research/package-lock.json +0 -977
- package/.claude/worktrees/sillyspec-data-model-research/package.json +0 -39
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/assets/index-Bq_Z2hne.js +0 -7446
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/assets/index-O2W5RV4z.css +0 -1
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/favicon.jpg +0 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/index.html +0 -16
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/logo.jpg +0 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/prototype-dashboard.html +0 -836
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/prototype-overview.html +0 -256
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/package.json +0 -25
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/server/executor.js +0 -95
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/server/index.js +0 -679
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/server/parser.js +0 -526
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/server/watcher.js +0 -357
- package/.claude/worktrees/sillyspec-data-model-research/src/agent-session-log.js +0 -803
- package/.claude/worktrees/sillyspec-data-model-research/src/change-list.js +0 -290
- package/.claude/worktrees/sillyspec-data-model-research/src/change-risk-profile.js +0 -270
- package/.claude/worktrees/sillyspec-data-model-research/src/check-primitives.js +0 -65
- package/.claude/worktrees/sillyspec-data-model-research/src/classify-change.js +0 -109
- package/.claude/worktrees/sillyspec-data-model-research/src/commit-suggest.js +0 -202
- package/.claude/worktrees/sillyspec-data-model-research/src/config-cat.js +0 -88
- package/.claude/worktrees/sillyspec-data-model-research/src/config-schema.js +0 -328
- package/.claude/worktrees/sillyspec-data-model-research/src/constants.js +0 -97
- package/.claude/worktrees/sillyspec-data-model-research/src/contract-matrix.js +0 -480
- package/.claude/worktrees/sillyspec-data-model-research/src/datetime.js +0 -20
- package/.claude/worktrees/sillyspec-data-model-research/src/db-engine.js +0 -55
- package/.claude/worktrees/sillyspec-data-model-research/src/db.js +0 -381
- package/.claude/worktrees/sillyspec-data-model-research/src/decision-distill.js +0 -517
- package/.claude/worktrees/sillyspec-data-model-research/src/dispatch/backends/local-agent.js +0 -155
- package/.claude/worktrees/sillyspec-data-model-research/src/dispatch/backends/sillyhub-mcp.js +0 -245
- package/.claude/worktrees/sillyspec-data-model-research/src/dispatch/probe.js +0 -246
- package/.claude/worktrees/sillyspec-data-model-research/src/dispatch/strategy.js +0 -121
- package/.claude/worktrees/sillyspec-data-model-research/src/docs-check.js +0 -825
- package/.claude/worktrees/sillyspec-data-model-research/src/docs-debt.js +0 -393
- package/.claude/worktrees/sillyspec-data-model-research/src/docs-gate.js +0 -107
- package/.claude/worktrees/sillyspec-data-model-research/src/doctor-diagnostics.js +0 -1099
- package/.claude/worktrees/sillyspec-data-model-research/src/endpoint-extractor.js +0 -420
- package/.claude/worktrees/sillyspec-data-model-research/src/foreign-declared.js +0 -78
- package/.claude/worktrees/sillyspec-data-model-research/src/fs-atomic.js +0 -73
- package/.claude/worktrees/sillyspec-data-model-research/src/git-helper.js +0 -150
- package/.claude/worktrees/sillyspec-data-model-research/src/hooks/claude-pre-tool-use.cjs +0 -130
- package/.claude/worktrees/sillyspec-data-model-research/src/hooks/worktree-guard.js +0 -892
- package/.claude/worktrees/sillyspec-data-model-research/src/index.js +0 -2798
- package/.claude/worktrees/sillyspec-data-model-research/src/init.js +0 -626
- package/.claude/worktrees/sillyspec-data-model-research/src/knowledge-match.js +0 -231
- package/.claude/worktrees/sillyspec-data-model-research/src/local-detect.js +0 -128
- package/.claude/worktrees/sillyspec-data-model-research/src/local-register.js +0 -104
- package/.claude/worktrees/sillyspec-data-model-research/src/machine-interface.js +0 -543
- package/.claude/worktrees/sillyspec-data-model-research/src/migrate.js +0 -127
- package/.claude/worktrees/sillyspec-data-model-research/src/module-impact.js +0 -166
- package/.claude/worktrees/sillyspec-data-model-research/src/module-resolve.js +0 -222
- package/.claude/worktrees/sillyspec-data-model-research/src/modules.js +0 -580
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/change-registry.js +0 -336
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/consistency-doctor.js +0 -355
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/shared.js +0 -36
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/stage-machine.js +0 -594
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/step-store.js +0 -265
- package/.claude/worktrees/sillyspec-data-model-research/src/progress.js +0 -1304
- package/.claude/worktrees/sillyspec-data-model-research/src/quick-recommend.js +0 -115
- package/.claude/worktrees/sillyspec-data-model-research/src/quicklog.js +0 -852
- package/.claude/worktrees/sillyspec-data-model-research/src/review-tier.js +0 -77
- package/.claude/worktrees/sillyspec-data-model-research/src/run/command.js +0 -1595
- package/.claude/worktrees/sillyspec-data-model-research/src/run/complete-handlers.js +0 -1552
- package/.claude/worktrees/sillyspec-data-model-research/src/run/complete.js +0 -1259
- package/.claude/worktrees/sillyspec-data-model-research/src/run/concurrent-detect.js +0 -156
- package/.claude/worktrees/sillyspec-data-model-research/src/run/gates.js +0 -1084
- package/.claude/worktrees/sillyspec-data-model-research/src/run/multi-repo-context.js +0 -208
- package/.claude/worktrees/sillyspec-data-model-research/src/run/next.js +0 -128
- package/.claude/worktrees/sillyspec-data-model-research/src/run/prompt.js +0 -843
- package/.claude/worktrees/sillyspec-data-model-research/src/run/quick-audit.js +0 -186
- package/.claude/worktrees/sillyspec-data-model-research/src/run/scan-profile.js +0 -269
- package/.claude/worktrees/sillyspec-data-model-research/src/run/shared.js +0 -1562
- package/.claude/worktrees/sillyspec-data-model-research/src/run/stage.js +0 -584
- package/.claude/worktrees/sillyspec-data-model-research/src/run.js +0 -23
- package/.claude/worktrees/sillyspec-data-model-research/src/scan-diff.js +0 -388
- package/.claude/worktrees/sillyspec-data-model-research/src/scan-postcheck.js +0 -512
- package/.claude/worktrees/sillyspec-data-model-research/src/scan-staleness.js +0 -95
- package/.claude/worktrees/sillyspec-data-model-research/src/setup.js +0 -414
- package/.claude/worktrees/sillyspec-data-model-research/src/sillyhub-mcp/client.js +0 -597
- package/.claude/worktrees/sillyspec-data-model-research/src/sillyhub-mcp/config.js +0 -62
- package/.claude/worktrees/sillyspec-data-model-research/src/spec-dir-typo.js +0 -50
- package/.claude/worktrees/sillyspec-data-model-research/src/spec-sync.js +0 -358
- package/.claude/worktrees/sillyspec-data-model-research/src/stage-contract-engine.js +0 -171
- package/.claude/worktrees/sillyspec-data-model-research/src/stage-contract-spec.js +0 -550
- package/.claude/worktrees/sillyspec-data-model-research/src/stage-contract.js +0 -889
- package/.claude/worktrees/sillyspec-data-model-research/src/stage-review.js +0 -597
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/archive.js +0 -199
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/brainstorm-auto.js +0 -236
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/brainstorm.js +0 -617
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/cmd-existence.js +0 -145
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/doctor.js +0 -540
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/execute.js +0 -1275
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/explore.js +0 -43
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/index.js +0 -29
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/knowledge.js +0 -514
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/plan-postcheck.js +0 -1344
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/plan.js +0 -650
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/quick.js +0 -167
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/scan.js +0 -608
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/status.js +0 -64
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/verify.js +0 -246
- package/.claude/worktrees/sillyspec-data-model-research/src/sync.js +0 -1470
- package/.claude/worktrees/sillyspec-data-model-research/src/task-review.js +0 -1498
- package/.claude/worktrees/sillyspec-data-model-research/src/taskcard.js +0 -210
- package/.claude/worktrees/sillyspec-data-model-research/src/verify-postcheck.js +0 -1718
- package/.claude/worktrees/sillyspec-data-model-research/src/verify-probes.js +0 -277
- package/.claude/worktrees/sillyspec-data-model-research/src/version.js +0 -19
- package/.claude/worktrees/sillyspec-data-model-research/src/workflow.js +0 -600
- package/.claude/worktrees/sillyspec-data-model-research/src/workspace.js +0 -125
- package/.claude/worktrees/sillyspec-data-model-research/src/worktree-apply.js +0 -1446
- package/.claude/worktrees/sillyspec-data-model-research/src/worktree-deps.js +0 -576
- package/.claude/worktrees/sillyspec-data-model-research/src/worktree.js +0 -1715
- package/.claude/worktrees/sillyspec-data-model-research/templates/claude-instruction.md +0 -23
- package/.claude/worktrees/sillyspec-data-model-research/templates/prompts/taskcard-rules.md +0 -28
- package/.claude/worktrees/sillyspec-data-model-research/templates/prompts/testcase-design.md +0 -12
- package/.claude/worktrees/sillyspec-data-model-research/templates/prompts/verify-probes.md +0 -32
- package/.claude/worktrees/sillyspec-data-model-research/templates/workflows/archive-impact.yaml +0 -79
- package/.claude/worktrees/sillyspec-data-model-research/templates/workflows/scan-docs.yaml +0 -132
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-archive/SKILL.md +0 -87
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-auto/SKILL.md +0 -93
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -114
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-commit/SKILL.md +0 -67
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-continue/SKILL.md +0 -47
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-doctor/SKILL.md +0 -76
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-execute/SKILL.md +0 -214
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-explore/SKILL.md +0 -102
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-export/SKILL.md +0 -57
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-init/SKILL.md +0 -177
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-knowledge/SKILL.md +0 -270
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-plan/SKILL.md +0 -156
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-propose/SKILL.md +0 -87
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-quick/SKILL.md +0 -116
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-resume/SKILL.md +0 -70
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-scan/SKILL.md +0 -79
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-state/SKILL.md +0 -64
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-status/SKILL.md +0 -54
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-verify/SKILL.md +0 -87
- package/.worktrees/2c37b1d7/.claude/skills/sillyspec-workspace/SKILL.md +0 -175
- package/.worktrees/2c37b1d7/.claude/skills/verify-per-user/SKILL.md +0 -6
- package/.worktrees/2c37b1d7/.gitattributes +0 -2
- package/.worktrees/2c37b1d7/.husky/pre-push +0 -20
- package/.worktrees/2c37b1d7/README.md +0 -203
- package/.worktrees/2c37b1d7/SKILL.md +0 -91
- package/.worktrees/2c37b1d7/architecture-analysis.md +0 -448
- package/.worktrees/2c37b1d7/bin/sillyspec.js +0 -2
- package/.worktrees/2c37b1d7/eval/README.md +0 -86
- package/.worktrees/2c37b1d7/eval/eval.config.json +0 -28
- package/.worktrees/2c37b1d7/eval/lib/adapters/cli.mjs +0 -63
- package/.worktrees/2c37b1d7/eval/lib/adapters/dryrun.mjs +0 -27
- package/.worktrees/2c37b1d7/eval/lib/config.mjs +0 -82
- package/.worktrees/2c37b1d7/eval/lib/db.mjs +0 -76
- package/.worktrees/2c37b1d7/eval/lib/report.mjs +0 -120
- package/.worktrees/2c37b1d7/eval/lib/runner.mjs +0 -157
- package/.worktrees/2c37b1d7/eval/lib/tasks.mjs +0 -73
- package/.worktrees/2c37b1d7/eval/lib/util.mjs +0 -107
- package/.worktrees/2c37b1d7/eval/lib/workdir.mjs +0 -30
- package/.worktrees/2c37b1d7/eval/run.mjs +0 -83
- package/.worktrees/2c37b1d7/eval/tasks/001-slugify/files/package.json +0 -6
- package/.worktrees/2c37b1d7/eval/tasks/001-slugify/solution/src/slugify.mjs +0 -26
- package/.worktrees/2c37b1d7/eval/tasks/001-slugify/task.json +0 -6
- package/.worktrees/2c37b1d7/eval/tasks/001-slugify/verify.mjs +0 -28
- package/.worktrees/2c37b1d7/eval/tasks/002-each-day/files/package.json +0 -6
- package/.worktrees/2c37b1d7/eval/tasks/002-each-day/files/src/dates.mjs +0 -4
- package/.worktrees/2c37b1d7/eval/tasks/002-each-day/solution/src/dates.mjs +0 -30
- package/.worktrees/2c37b1d7/eval/tasks/002-each-day/task.json +0 -6
- package/.worktrees/2c37b1d7/eval/tasks/002-each-day/verify.mjs +0 -31
- package/.worktrees/2c37b1d7/eval/tasks/003-word-report/files/data/notes.txt +0 -5
- package/.worktrees/2c37b1d7/eval/tasks/003-word-report/files/package.json +0 -6
- package/.worktrees/2c37b1d7/eval/tasks/003-word-report/solution/bin/report.mjs +0 -36
- package/.worktrees/2c37b1d7/eval/tasks/003-word-report/task.json +0 -6
- package/.worktrees/2c37b1d7/eval/tasks/003-word-report/verify.mjs +0 -38
- package/.worktrees/2c37b1d7/logo.jpg +0 -0
- package/.worktrees/2c37b1d7/package-lock.json +0 -977
- package/.worktrees/2c37b1d7/package.json +0 -41
- package/.worktrees/2c37b1d7/packages/dashboard/dist/assets/index-Bq_Z2hne.js +0 -7446
- package/.worktrees/2c37b1d7/packages/dashboard/dist/assets/index-O2W5RV4z.css +0 -1
- package/.worktrees/2c37b1d7/packages/dashboard/dist/favicon.jpg +0 -0
- package/.worktrees/2c37b1d7/packages/dashboard/dist/index.html +0 -16
- package/.worktrees/2c37b1d7/packages/dashboard/dist/logo.jpg +0 -0
- package/.worktrees/2c37b1d7/packages/dashboard/dist/prototype-dashboard.html +0 -836
- package/.worktrees/2c37b1d7/packages/dashboard/dist/prototype-overview.html +0 -256
- package/.worktrees/2c37b1d7/packages/dashboard/package.json +0 -25
- package/.worktrees/2c37b1d7/packages/dashboard/server/executor.js +0 -95
- package/.worktrees/2c37b1d7/packages/dashboard/server/index.js +0 -679
- package/.worktrees/2c37b1d7/packages/dashboard/server/parser.js +0 -526
- package/.worktrees/2c37b1d7/packages/dashboard/server/watcher.js +0 -357
- package/.worktrees/2c37b1d7/src/agent-session-log.js +0 -803
- package/.worktrees/2c37b1d7/src/change-list.js +0 -290
- package/.worktrees/2c37b1d7/src/change-risk-profile.js +0 -339
- package/.worktrees/2c37b1d7/src/check-primitives.js +0 -65
- package/.worktrees/2c37b1d7/src/classify-change.js +0 -109
- package/.worktrees/2c37b1d7/src/commit-suggest.js +0 -202
- package/.worktrees/2c37b1d7/src/config-cat.js +0 -88
- package/.worktrees/2c37b1d7/src/config-schema.js +0 -328
- package/.worktrees/2c37b1d7/src/constants.js +0 -97
- package/.worktrees/2c37b1d7/src/contract-matrix.js +0 -533
- package/.worktrees/2c37b1d7/src/datetime.js +0 -20
- package/.worktrees/2c37b1d7/src/db-engine.js +0 -55
- package/.worktrees/2c37b1d7/src/db.js +0 -381
- package/.worktrees/2c37b1d7/src/decision-distill.js +0 -517
- package/.worktrees/2c37b1d7/src/dispatch/backends/local-agent.js +0 -155
- package/.worktrees/2c37b1d7/src/dispatch/backends/sillyhub-mcp.js +0 -245
- package/.worktrees/2c37b1d7/src/dispatch/probe.js +0 -246
- package/.worktrees/2c37b1d7/src/dispatch/strategy.js +0 -121
- package/.worktrees/2c37b1d7/src/docs-check.js +0 -825
- package/.worktrees/2c37b1d7/src/docs-debt.js +0 -393
- package/.worktrees/2c37b1d7/src/docs-gate.js +0 -107
- package/.worktrees/2c37b1d7/src/doctor-diagnostics.js +0 -1099
- package/.worktrees/2c37b1d7/src/endpoint-extractor.js +0 -409
- package/.worktrees/2c37b1d7/src/foreign-declared.js +0 -155
- package/.worktrees/2c37b1d7/src/fs-atomic.js +0 -73
- package/.worktrees/2c37b1d7/src/git-helper.js +0 -150
- package/.worktrees/2c37b1d7/src/hooks/claude-pre-tool-use.cjs +0 -130
- package/.worktrees/2c37b1d7/src/hooks/worktree-guard.js +0 -892
- package/.worktrees/2c37b1d7/src/index.js +0 -2854
- package/.worktrees/2c37b1d7/src/init.js +0 -626
- package/.worktrees/2c37b1d7/src/knowledge-match.js +0 -231
- package/.worktrees/2c37b1d7/src/local-detect.js +0 -128
- package/.worktrees/2c37b1d7/src/local-register.js +0 -104
- package/.worktrees/2c37b1d7/src/machine-interface.js +0 -543
- package/.worktrees/2c37b1d7/src/migrate.js +0 -127
- package/.worktrees/2c37b1d7/src/module-impact.js +0 -166
- package/.worktrees/2c37b1d7/src/module-resolve.js +0 -222
- package/.worktrees/2c37b1d7/src/modules.js +0 -580
- package/.worktrees/2c37b1d7/src/plan-adopt-waves.js +0 -126
- package/.worktrees/2c37b1d7/src/progress/change-registry.js +0 -336
- package/.worktrees/2c37b1d7/src/progress/consistency-doctor.js +0 -355
- package/.worktrees/2c37b1d7/src/progress/shared.js +0 -36
- package/.worktrees/2c37b1d7/src/progress/stage-machine.js +0 -594
- package/.worktrees/2c37b1d7/src/progress/step-store.js +0 -265
- package/.worktrees/2c37b1d7/src/progress.js +0 -1304
- package/.worktrees/2c37b1d7/src/quick-recommend.js +0 -115
- package/.worktrees/2c37b1d7/src/quicklog.js +0 -883
- package/.worktrees/2c37b1d7/src/review-tier.js +0 -77
- package/.worktrees/2c37b1d7/src/run/command.js +0 -1641
- package/.worktrees/2c37b1d7/src/run/complete-handlers.js +0 -1552
- package/.worktrees/2c37b1d7/src/run/complete.js +0 -1259
- package/.worktrees/2c37b1d7/src/run/concurrent-detect.js +0 -156
- package/.worktrees/2c37b1d7/src/run/gates.js +0 -1111
- package/.worktrees/2c37b1d7/src/run/multi-repo-context.js +0 -208
- package/.worktrees/2c37b1d7/src/run/next.js +0 -128
- package/.worktrees/2c37b1d7/src/run/prompt.js +0 -843
- package/.worktrees/2c37b1d7/src/run/quick-audit.js +0 -186
- package/.worktrees/2c37b1d7/src/run/scan-profile.js +0 -269
- package/.worktrees/2c37b1d7/src/run/shared.js +0 -1562
- package/.worktrees/2c37b1d7/src/run/stage.js +0 -587
- package/.worktrees/2c37b1d7/src/run.js +0 -23
- package/.worktrees/2c37b1d7/src/scan-diff.js +0 -388
- package/.worktrees/2c37b1d7/src/scan-postcheck.js +0 -524
- package/.worktrees/2c37b1d7/src/scan-staleness.js +0 -95
- package/.worktrees/2c37b1d7/src/setup.js +0 -414
- package/.worktrees/2c37b1d7/src/sillyhub-mcp/client.js +0 -597
- package/.worktrees/2c37b1d7/src/sillyhub-mcp/config.js +0 -62
- package/.worktrees/2c37b1d7/src/spec-dir-typo.js +0 -50
- package/.worktrees/2c37b1d7/src/spec-sync.js +0 -358
- package/.worktrees/2c37b1d7/src/stage-contract-engine.js +0 -171
- package/.worktrees/2c37b1d7/src/stage-contract-spec.js +0 -551
- package/.worktrees/2c37b1d7/src/stage-contract.js +0 -948
- package/.worktrees/2c37b1d7/src/stage-review.js +0 -597
- package/.worktrees/2c37b1d7/src/stages/archive.js +0 -199
- package/.worktrees/2c37b1d7/src/stages/brainstorm-auto.js +0 -285
- package/.worktrees/2c37b1d7/src/stages/brainstorm.js +0 -624
- package/.worktrees/2c37b1d7/src/stages/cmd-existence.js +0 -145
- package/.worktrees/2c37b1d7/src/stages/doctor.js +0 -540
- package/.worktrees/2c37b1d7/src/stages/execute.js +0 -1277
- package/.worktrees/2c37b1d7/src/stages/explore.js +0 -43
- package/.worktrees/2c37b1d7/src/stages/index.js +0 -29
- package/.worktrees/2c37b1d7/src/stages/knowledge.js +0 -514
- package/.worktrees/2c37b1d7/src/stages/plan-postcheck.js +0 -1398
- package/.worktrees/2c37b1d7/src/stages/plan.js +0 -655
- package/.worktrees/2c37b1d7/src/stages/quick.js +0 -167
- package/.worktrees/2c37b1d7/src/stages/scan.js +0 -608
- package/.worktrees/2c37b1d7/src/stages/status.js +0 -64
- package/.worktrees/2c37b1d7/src/stages/verify.js +0 -246
- package/.worktrees/2c37b1d7/src/sync.js +0 -1470
- package/.worktrees/2c37b1d7/src/task-review.js +0 -1498
- package/.worktrees/2c37b1d7/src/taskcard-placeholders.js +0 -21
- package/.worktrees/2c37b1d7/src/taskcard.js +0 -250
- package/.worktrees/2c37b1d7/src/verify-postcheck.js +0 -1718
- package/.worktrees/2c37b1d7/src/verify-probes.js +0 -327
- package/.worktrees/2c37b1d7/src/version.js +0 -19
- package/.worktrees/2c37b1d7/src/workflow.js +0 -600
- package/.worktrees/2c37b1d7/src/workspace.js +0 -125
- package/.worktrees/2c37b1d7/src/worktree-apply.js +0 -1611
- package/.worktrees/2c37b1d7/src/worktree-deps.js +0 -668
- package/.worktrees/2c37b1d7/src/worktree.js +0 -1849
- package/.worktrees/2c37b1d7/templates/claude-instruction.md +0 -23
- package/.worktrees/2c37b1d7/templates/prompts/taskcard-rules.md +0 -29
- package/.worktrees/2c37b1d7/templates/prompts/testcase-design.md +0 -12
- package/.worktrees/2c37b1d7/templates/prompts/verify-probes.md +0 -32
- package/.worktrees/2c37b1d7/templates/workflows/archive-impact.yaml +0 -79
- package/.worktrees/2c37b1d7/templates/workflows/scan-docs.yaml +0 -132
- package/.worktrees/542c4415/.claude/skills/sillyspec-archive/SKILL.md +0 -87
- package/.worktrees/542c4415/.claude/skills/sillyspec-auto/SKILL.md +0 -93
- package/.worktrees/542c4415/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -114
- package/.worktrees/542c4415/.claude/skills/sillyspec-commit/SKILL.md +0 -67
- package/.worktrees/542c4415/.claude/skills/sillyspec-continue/SKILL.md +0 -47
- package/.worktrees/542c4415/.claude/skills/sillyspec-doctor/SKILL.md +0 -76
- package/.worktrees/542c4415/.claude/skills/sillyspec-execute/SKILL.md +0 -214
- package/.worktrees/542c4415/.claude/skills/sillyspec-explore/SKILL.md +0 -102
- package/.worktrees/542c4415/.claude/skills/sillyspec-export/SKILL.md +0 -57
- package/.worktrees/542c4415/.claude/skills/sillyspec-init/SKILL.md +0 -177
- package/.worktrees/542c4415/.claude/skills/sillyspec-knowledge/SKILL.md +0 -270
- package/.worktrees/542c4415/.claude/skills/sillyspec-plan/SKILL.md +0 -156
- package/.worktrees/542c4415/.claude/skills/sillyspec-quick/SKILL.md +0 -116
- package/.worktrees/542c4415/.claude/skills/sillyspec-resume/SKILL.md +0 -70
- package/.worktrees/542c4415/.claude/skills/sillyspec-scan/SKILL.md +0 -79
- package/.worktrees/542c4415/.claude/skills/sillyspec-state/SKILL.md +0 -64
- package/.worktrees/542c4415/.claude/skills/sillyspec-status/SKILL.md +0 -54
- package/.worktrees/542c4415/.claude/skills/sillyspec-verify/SKILL.md +0 -87
- package/.worktrees/542c4415/.claude/skills/sillyspec-workspace/SKILL.md +0 -175
- package/.worktrees/542c4415/.gitattributes +0 -2
- package/.worktrees/542c4415/.husky/pre-push +0 -20
- package/.worktrees/542c4415/README.md +0 -203
- package/.worktrees/542c4415/SKILL.md +0 -91
- package/.worktrees/542c4415/architecture-analysis.md +0 -448
- package/.worktrees/542c4415/bin/sillyspec.js +0 -2
- package/.worktrees/542c4415/eval/README.md +0 -86
- package/.worktrees/542c4415/eval/eval.config.json +0 -28
- package/.worktrees/542c4415/eval/lib/adapters/cli.mjs +0 -63
- package/.worktrees/542c4415/eval/lib/adapters/dryrun.mjs +0 -27
- package/.worktrees/542c4415/eval/lib/config.mjs +0 -82
- package/.worktrees/542c4415/eval/lib/db.mjs +0 -76
- package/.worktrees/542c4415/eval/lib/report.mjs +0 -120
- package/.worktrees/542c4415/eval/lib/runner.mjs +0 -157
- package/.worktrees/542c4415/eval/lib/tasks.mjs +0 -73
- package/.worktrees/542c4415/eval/lib/util.mjs +0 -107
- package/.worktrees/542c4415/eval/lib/workdir.mjs +0 -30
- package/.worktrees/542c4415/eval/run.mjs +0 -83
- package/.worktrees/542c4415/eval/tasks/001-slugify/files/package.json +0 -6
- package/.worktrees/542c4415/eval/tasks/001-slugify/solution/src/slugify.mjs +0 -26
- package/.worktrees/542c4415/eval/tasks/001-slugify/task.json +0 -6
- package/.worktrees/542c4415/eval/tasks/001-slugify/verify.mjs +0 -28
- package/.worktrees/542c4415/eval/tasks/002-each-day/files/package.json +0 -6
- package/.worktrees/542c4415/eval/tasks/002-each-day/files/src/dates.mjs +0 -4
- package/.worktrees/542c4415/eval/tasks/002-each-day/solution/src/dates.mjs +0 -30
- package/.worktrees/542c4415/eval/tasks/002-each-day/task.json +0 -6
- package/.worktrees/542c4415/eval/tasks/002-each-day/verify.mjs +0 -31
- package/.worktrees/542c4415/eval/tasks/003-word-report/files/data/notes.txt +0 -5
- package/.worktrees/542c4415/eval/tasks/003-word-report/files/package.json +0 -6
- package/.worktrees/542c4415/eval/tasks/003-word-report/solution/bin/report.mjs +0 -36
- package/.worktrees/542c4415/eval/tasks/003-word-report/task.json +0 -6
- package/.worktrees/542c4415/eval/tasks/003-word-report/verify.mjs +0 -38
- package/.worktrees/542c4415/logo.jpg +0 -0
- package/.worktrees/542c4415/package-lock.json +0 -977
- package/.worktrees/542c4415/package.json +0 -41
- package/.worktrees/542c4415/packages/dashboard/dist/assets/index-Bq_Z2hne.js +0 -7446
- package/.worktrees/542c4415/packages/dashboard/dist/assets/index-O2W5RV4z.css +0 -1
- package/.worktrees/542c4415/packages/dashboard/dist/favicon.jpg +0 -0
- package/.worktrees/542c4415/packages/dashboard/dist/index.html +0 -16
- package/.worktrees/542c4415/packages/dashboard/dist/logo.jpg +0 -0
- package/.worktrees/542c4415/packages/dashboard/dist/prototype-dashboard.html +0 -836
- package/.worktrees/542c4415/packages/dashboard/dist/prototype-overview.html +0 -256
- package/.worktrees/542c4415/packages/dashboard/package.json +0 -25
- package/.worktrees/542c4415/packages/dashboard/server/executor.js +0 -95
- package/.worktrees/542c4415/packages/dashboard/server/index.js +0 -679
- package/.worktrees/542c4415/packages/dashboard/server/parser.js +0 -526
- package/.worktrees/542c4415/packages/dashboard/server/watcher.js +0 -357
- package/.worktrees/542c4415/src/agent-session-log.js +0 -803
- package/.worktrees/542c4415/src/change-list.js +0 -290
- package/.worktrees/542c4415/src/change-risk-profile.js +0 -339
- package/.worktrees/542c4415/src/check-primitives.js +0 -65
- package/.worktrees/542c4415/src/classify-change.js +0 -109
- package/.worktrees/542c4415/src/commit-suggest.js +0 -202
- package/.worktrees/542c4415/src/config-cat.js +0 -88
- package/.worktrees/542c4415/src/config-schema.js +0 -328
- package/.worktrees/542c4415/src/constants.js +0 -97
- package/.worktrees/542c4415/src/contract-matrix.js +0 -533
- package/.worktrees/542c4415/src/datetime.js +0 -20
- package/.worktrees/542c4415/src/db-engine.js +0 -55
- package/.worktrees/542c4415/src/db.js +0 -381
- package/.worktrees/542c4415/src/decision-distill.js +0 -517
- package/.worktrees/542c4415/src/dispatch/backends/local-agent.js +0 -155
- package/.worktrees/542c4415/src/dispatch/backends/sillyhub-mcp.js +0 -245
- package/.worktrees/542c4415/src/dispatch/probe.js +0 -246
- package/.worktrees/542c4415/src/dispatch/strategy.js +0 -121
- package/.worktrees/542c4415/src/docs-check.js +0 -825
- package/.worktrees/542c4415/src/docs-debt.js +0 -393
- package/.worktrees/542c4415/src/docs-gate.js +0 -107
- package/.worktrees/542c4415/src/doctor-diagnostics.js +0 -1099
- package/.worktrees/542c4415/src/endpoint-extractor.js +0 -409
- package/.worktrees/542c4415/src/foreign-declared.js +0 -155
- package/.worktrees/542c4415/src/fs-atomic.js +0 -73
- package/.worktrees/542c4415/src/git-helper.js +0 -150
- package/.worktrees/542c4415/src/hooks/claude-pre-tool-use.cjs +0 -130
- package/.worktrees/542c4415/src/hooks/worktree-guard.js +0 -892
- package/.worktrees/542c4415/src/index.js +0 -2854
- package/.worktrees/542c4415/src/init.js +0 -626
- package/.worktrees/542c4415/src/knowledge-match.js +0 -231
- package/.worktrees/542c4415/src/local-detect.js +0 -128
- package/.worktrees/542c4415/src/local-register.js +0 -104
- package/.worktrees/542c4415/src/machine-interface.js +0 -543
- package/.worktrees/542c4415/src/migrate.js +0 -127
- package/.worktrees/542c4415/src/module-impact.js +0 -166
- package/.worktrees/542c4415/src/module-resolve.js +0 -222
- package/.worktrees/542c4415/src/modules.js +0 -580
- package/.worktrees/542c4415/src/plan-adopt-waves.js +0 -126
- package/.worktrees/542c4415/src/progress/change-registry.js +0 -336
- package/.worktrees/542c4415/src/progress/consistency-doctor.js +0 -355
- package/.worktrees/542c4415/src/progress/shared.js +0 -36
- package/.worktrees/542c4415/src/progress/stage-machine.js +0 -594
- package/.worktrees/542c4415/src/progress/step-store.js +0 -265
- package/.worktrees/542c4415/src/progress.js +0 -1304
- package/.worktrees/542c4415/src/quick-recommend.js +0 -115
- package/.worktrees/542c4415/src/quicklog.js +0 -883
- package/.worktrees/542c4415/src/review-tier.js +0 -77
- package/.worktrees/542c4415/src/run/command.js +0 -1641
- package/.worktrees/542c4415/src/run/complete-handlers.js +0 -1552
- package/.worktrees/542c4415/src/run/complete.js +0 -1259
- package/.worktrees/542c4415/src/run/concurrent-detect.js +0 -156
- package/.worktrees/542c4415/src/run/gates.js +0 -1111
- package/.worktrees/542c4415/src/run/multi-repo-context.js +0 -208
- package/.worktrees/542c4415/src/run/next.js +0 -128
- package/.worktrees/542c4415/src/run/prompt.js +0 -843
- package/.worktrees/542c4415/src/run/quick-audit.js +0 -186
- package/.worktrees/542c4415/src/run/scan-profile.js +0 -269
- package/.worktrees/542c4415/src/run/shared.js +0 -1562
- package/.worktrees/542c4415/src/run/stage.js +0 -587
- package/.worktrees/542c4415/src/run.js +0 -23
- package/.worktrees/542c4415/src/scan-diff.js +0 -388
- package/.worktrees/542c4415/src/scan-postcheck.js +0 -524
- package/.worktrees/542c4415/src/scan-staleness.js +0 -95
- package/.worktrees/542c4415/src/setup.js +0 -414
- package/.worktrees/542c4415/src/sillyhub-mcp/client.js +0 -597
- package/.worktrees/542c4415/src/sillyhub-mcp/config.js +0 -62
- package/.worktrees/542c4415/src/spec-dir-typo.js +0 -50
- package/.worktrees/542c4415/src/spec-sync.js +0 -358
- package/.worktrees/542c4415/src/stage-contract-engine.js +0 -171
- package/.worktrees/542c4415/src/stage-contract-spec.js +0 -551
- package/.worktrees/542c4415/src/stage-contract.js +0 -948
- package/.worktrees/542c4415/src/stage-review.js +0 -597
- package/.worktrees/542c4415/src/stages/archive.js +0 -199
- package/.worktrees/542c4415/src/stages/brainstorm-auto.js +0 -285
- package/.worktrees/542c4415/src/stages/brainstorm.js +0 -624
- package/.worktrees/542c4415/src/stages/cmd-existence.js +0 -145
- package/.worktrees/542c4415/src/stages/doctor.js +0 -540
- package/.worktrees/542c4415/src/stages/execute.js +0 -1277
- package/.worktrees/542c4415/src/stages/explore.js +0 -43
- package/.worktrees/542c4415/src/stages/index.js +0 -29
- package/.worktrees/542c4415/src/stages/knowledge.js +0 -514
- package/.worktrees/542c4415/src/stages/plan-postcheck.js +0 -1398
- package/.worktrees/542c4415/src/stages/plan.js +0 -655
- package/.worktrees/542c4415/src/stages/quick.js +0 -167
- package/.worktrees/542c4415/src/stages/scan.js +0 -608
- package/.worktrees/542c4415/src/stages/status.js +0 -64
- package/.worktrees/542c4415/src/stages/verify.js +0 -246
- package/.worktrees/542c4415/src/sync.js +0 -1470
- package/.worktrees/542c4415/src/task-review.js +0 -1498
- package/.worktrees/542c4415/src/taskcard-placeholders.js +0 -21
- package/.worktrees/542c4415/src/taskcard.js +0 -250
- package/.worktrees/542c4415/src/verify-postcheck.js +0 -1718
- package/.worktrees/542c4415/src/verify-probes.js +0 -327
- package/.worktrees/542c4415/src/version.js +0 -19
- package/.worktrees/542c4415/src/workflow.js +0 -600
- package/.worktrees/542c4415/src/workspace.js +0 -125
- package/.worktrees/542c4415/src/worktree-apply.js +0 -1611
- package/.worktrees/542c4415/src/worktree-deps.js +0 -668
- package/.worktrees/542c4415/src/worktree.js +0 -1849
- package/.worktrees/542c4415/templates/claude-instruction.md +0 -23
- package/.worktrees/542c4415/templates/prompts/taskcard-rules.md +0 -29
- package/.worktrees/542c4415/templates/prompts/testcase-design.md +0 -12
- package/.worktrees/542c4415/templates/prompts/verify-probes.md +0 -32
- package/.worktrees/542c4415/templates/workflows/archive-impact.yaml +0 -79
- package/.worktrees/542c4415/templates/workflows/scan-docs.yaml +0 -132
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-archive/SKILL.md +0 -87
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-auto/SKILL.md +0 -93
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -114
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-commit/SKILL.md +0 -67
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-continue/SKILL.md +0 -47
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-doctor/SKILL.md +0 -76
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-execute/SKILL.md +0 -214
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-explore/SKILL.md +0 -102
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-export/SKILL.md +0 -57
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-init/SKILL.md +0 -177
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-knowledge/SKILL.md +0 -270
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-plan/SKILL.md +0 -156
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-propose/SKILL.md +0 -87
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-quick/SKILL.md +0 -116
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-resume/SKILL.md +0 -70
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-scan/SKILL.md +0 -79
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-state/SKILL.md +0 -64
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-status/SKILL.md +0 -54
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-verify/SKILL.md +0 -87
- package/.worktrees/8d2d0392/.claude/skills/sillyspec-workspace/SKILL.md +0 -175
- package/.worktrees/8d2d0392/.claude/skills/verify-per-user/SKILL.md +0 -6
- package/.worktrees/8d2d0392/.gitattributes +0 -2
- package/.worktrees/8d2d0392/.husky/pre-push +0 -20
- package/.worktrees/8d2d0392/README.md +0 -203
- package/.worktrees/8d2d0392/SKILL.md +0 -91
- package/.worktrees/8d2d0392/architecture-analysis.md +0 -448
- package/.worktrees/8d2d0392/bin/sillyspec.js +0 -2
- package/.worktrees/8d2d0392/eval/README.md +0 -86
- package/.worktrees/8d2d0392/eval/eval.config.json +0 -28
- package/.worktrees/8d2d0392/eval/lib/adapters/cli.mjs +0 -63
- package/.worktrees/8d2d0392/eval/lib/adapters/dryrun.mjs +0 -27
- package/.worktrees/8d2d0392/eval/lib/config.mjs +0 -82
- package/.worktrees/8d2d0392/eval/lib/db.mjs +0 -76
- package/.worktrees/8d2d0392/eval/lib/report.mjs +0 -120
- package/.worktrees/8d2d0392/eval/lib/runner.mjs +0 -157
- package/.worktrees/8d2d0392/eval/lib/tasks.mjs +0 -73
- package/.worktrees/8d2d0392/eval/lib/util.mjs +0 -107
- package/.worktrees/8d2d0392/eval/lib/workdir.mjs +0 -30
- package/.worktrees/8d2d0392/eval/run.mjs +0 -83
- package/.worktrees/8d2d0392/eval/tasks/001-slugify/files/package.json +0 -6
- package/.worktrees/8d2d0392/eval/tasks/001-slugify/solution/src/slugify.mjs +0 -26
- package/.worktrees/8d2d0392/eval/tasks/001-slugify/task.json +0 -6
- package/.worktrees/8d2d0392/eval/tasks/001-slugify/verify.mjs +0 -28
- package/.worktrees/8d2d0392/eval/tasks/002-each-day/files/package.json +0 -6
- package/.worktrees/8d2d0392/eval/tasks/002-each-day/files/src/dates.mjs +0 -4
- package/.worktrees/8d2d0392/eval/tasks/002-each-day/solution/src/dates.mjs +0 -30
- package/.worktrees/8d2d0392/eval/tasks/002-each-day/task.json +0 -6
- package/.worktrees/8d2d0392/eval/tasks/002-each-day/verify.mjs +0 -31
- package/.worktrees/8d2d0392/eval/tasks/003-word-report/files/data/notes.txt +0 -5
- package/.worktrees/8d2d0392/eval/tasks/003-word-report/files/package.json +0 -6
- package/.worktrees/8d2d0392/eval/tasks/003-word-report/solution/bin/report.mjs +0 -36
- package/.worktrees/8d2d0392/eval/tasks/003-word-report/task.json +0 -6
- package/.worktrees/8d2d0392/eval/tasks/003-word-report/verify.mjs +0 -38
- package/.worktrees/8d2d0392/logo.jpg +0 -0
- package/.worktrees/8d2d0392/package-lock.json +0 -977
- package/.worktrees/8d2d0392/package.json +0 -41
- package/.worktrees/8d2d0392/packages/dashboard/dist/assets/index-Bq_Z2hne.js +0 -7446
- package/.worktrees/8d2d0392/packages/dashboard/dist/assets/index-O2W5RV4z.css +0 -1
- package/.worktrees/8d2d0392/packages/dashboard/dist/favicon.jpg +0 -0
- package/.worktrees/8d2d0392/packages/dashboard/dist/index.html +0 -16
- package/.worktrees/8d2d0392/packages/dashboard/dist/logo.jpg +0 -0
- package/.worktrees/8d2d0392/packages/dashboard/dist/prototype-dashboard.html +0 -836
- package/.worktrees/8d2d0392/packages/dashboard/dist/prototype-overview.html +0 -256
- package/.worktrees/8d2d0392/packages/dashboard/package.json +0 -25
- package/.worktrees/8d2d0392/packages/dashboard/server/executor.js +0 -95
- package/.worktrees/8d2d0392/packages/dashboard/server/index.js +0 -679
- package/.worktrees/8d2d0392/packages/dashboard/server/parser.js +0 -526
- package/.worktrees/8d2d0392/packages/dashboard/server/watcher.js +0 -357
- package/.worktrees/8d2d0392/src/agent-session-log.js +0 -803
- package/.worktrees/8d2d0392/src/change-list.js +0 -290
- package/.worktrees/8d2d0392/src/change-risk-profile.js +0 -339
- package/.worktrees/8d2d0392/src/check-primitives.js +0 -65
- package/.worktrees/8d2d0392/src/classify-change.js +0 -109
- package/.worktrees/8d2d0392/src/commit-suggest.js +0 -202
- package/.worktrees/8d2d0392/src/config-cat.js +0 -88
- package/.worktrees/8d2d0392/src/config-schema.js +0 -328
- package/.worktrees/8d2d0392/src/constants.js +0 -97
- package/.worktrees/8d2d0392/src/contract-matrix.js +0 -533
- package/.worktrees/8d2d0392/src/datetime.js +0 -20
- package/.worktrees/8d2d0392/src/db-engine.js +0 -55
- package/.worktrees/8d2d0392/src/db.js +0 -381
- package/.worktrees/8d2d0392/src/decision-distill.js +0 -517
- package/.worktrees/8d2d0392/src/dispatch/backends/local-agent.js +0 -155
- package/.worktrees/8d2d0392/src/dispatch/backends/sillyhub-mcp.js +0 -245
- package/.worktrees/8d2d0392/src/dispatch/probe.js +0 -246
- package/.worktrees/8d2d0392/src/dispatch/strategy.js +0 -121
- package/.worktrees/8d2d0392/src/docs-check.js +0 -825
- package/.worktrees/8d2d0392/src/docs-debt.js +0 -393
- package/.worktrees/8d2d0392/src/docs-gate.js +0 -107
- package/.worktrees/8d2d0392/src/doctor-diagnostics.js +0 -1099
- package/.worktrees/8d2d0392/src/endpoint-extractor.js +0 -409
- package/.worktrees/8d2d0392/src/foreign-declared.js +0 -78
- package/.worktrees/8d2d0392/src/fs-atomic.js +0 -73
- package/.worktrees/8d2d0392/src/git-helper.js +0 -150
- package/.worktrees/8d2d0392/src/hooks/claude-pre-tool-use.cjs +0 -130
- package/.worktrees/8d2d0392/src/hooks/worktree-guard.js +0 -892
- package/.worktrees/8d2d0392/src/index.js +0 -2854
- package/.worktrees/8d2d0392/src/init.js +0 -626
- package/.worktrees/8d2d0392/src/knowledge-match.js +0 -231
- package/.worktrees/8d2d0392/src/local-detect.js +0 -128
- package/.worktrees/8d2d0392/src/local-register.js +0 -104
- package/.worktrees/8d2d0392/src/machine-interface.js +0 -543
- package/.worktrees/8d2d0392/src/migrate.js +0 -127
- package/.worktrees/8d2d0392/src/module-impact.js +0 -166
- package/.worktrees/8d2d0392/src/module-resolve.js +0 -222
- package/.worktrees/8d2d0392/src/modules.js +0 -580
- package/.worktrees/8d2d0392/src/plan-adopt-waves.js +0 -126
- package/.worktrees/8d2d0392/src/progress/change-registry.js +0 -336
- package/.worktrees/8d2d0392/src/progress/consistency-doctor.js +0 -355
- package/.worktrees/8d2d0392/src/progress/shared.js +0 -36
- package/.worktrees/8d2d0392/src/progress/stage-machine.js +0 -594
- package/.worktrees/8d2d0392/src/progress/step-store.js +0 -265
- package/.worktrees/8d2d0392/src/progress.js +0 -1304
- package/.worktrees/8d2d0392/src/quick-recommend.js +0 -115
- package/.worktrees/8d2d0392/src/quicklog.js +0 -883
- package/.worktrees/8d2d0392/src/review-tier.js +0 -77
- package/.worktrees/8d2d0392/src/run/command.js +0 -1641
- package/.worktrees/8d2d0392/src/run/complete-handlers.js +0 -1552
- package/.worktrees/8d2d0392/src/run/complete.js +0 -1259
- package/.worktrees/8d2d0392/src/run/concurrent-detect.js +0 -156
- package/.worktrees/8d2d0392/src/run/gates.js +0 -1094
- package/.worktrees/8d2d0392/src/run/multi-repo-context.js +0 -208
- package/.worktrees/8d2d0392/src/run/next.js +0 -128
- package/.worktrees/8d2d0392/src/run/prompt.js +0 -843
- package/.worktrees/8d2d0392/src/run/quick-audit.js +0 -186
- package/.worktrees/8d2d0392/src/run/scan-profile.js +0 -269
- package/.worktrees/8d2d0392/src/run/shared.js +0 -1562
- package/.worktrees/8d2d0392/src/run/stage.js +0 -587
- package/.worktrees/8d2d0392/src/run.js +0 -23
- package/.worktrees/8d2d0392/src/scan-diff.js +0 -388
- package/.worktrees/8d2d0392/src/scan-postcheck.js +0 -524
- package/.worktrees/8d2d0392/src/scan-staleness.js +0 -95
- package/.worktrees/8d2d0392/src/setup.js +0 -414
- package/.worktrees/8d2d0392/src/sillyhub-mcp/client.js +0 -597
- package/.worktrees/8d2d0392/src/sillyhub-mcp/config.js +0 -62
- package/.worktrees/8d2d0392/src/spec-dir-typo.js +0 -50
- package/.worktrees/8d2d0392/src/spec-sync.js +0 -358
- package/.worktrees/8d2d0392/src/stage-contract-engine.js +0 -171
- package/.worktrees/8d2d0392/src/stage-contract-spec.js +0 -551
- package/.worktrees/8d2d0392/src/stage-contract.js +0 -948
- package/.worktrees/8d2d0392/src/stage-review.js +0 -597
- package/.worktrees/8d2d0392/src/stages/archive.js +0 -199
- package/.worktrees/8d2d0392/src/stages/brainstorm-auto.js +0 -285
- package/.worktrees/8d2d0392/src/stages/brainstorm.js +0 -624
- package/.worktrees/8d2d0392/src/stages/cmd-existence.js +0 -145
- package/.worktrees/8d2d0392/src/stages/doctor.js +0 -540
- package/.worktrees/8d2d0392/src/stages/execute.js +0 -1277
- package/.worktrees/8d2d0392/src/stages/explore.js +0 -43
- package/.worktrees/8d2d0392/src/stages/index.js +0 -29
- package/.worktrees/8d2d0392/src/stages/knowledge.js +0 -514
- package/.worktrees/8d2d0392/src/stages/plan-postcheck.js +0 -1398
- package/.worktrees/8d2d0392/src/stages/plan.js +0 -651
- package/.worktrees/8d2d0392/src/stages/quick.js +0 -167
- package/.worktrees/8d2d0392/src/stages/scan.js +0 -608
- package/.worktrees/8d2d0392/src/stages/status.js +0 -64
- package/.worktrees/8d2d0392/src/stages/verify.js +0 -246
- package/.worktrees/8d2d0392/src/sync.js +0 -1470
- package/.worktrees/8d2d0392/src/task-review.js +0 -1498
- package/.worktrees/8d2d0392/src/taskcard-placeholders.js +0 -21
- package/.worktrees/8d2d0392/src/taskcard.js +0 -217
- package/.worktrees/8d2d0392/src/verify-postcheck.js +0 -1718
- package/.worktrees/8d2d0392/src/verify-probes.js +0 -327
- package/.worktrees/8d2d0392/src/version.js +0 -19
- package/.worktrees/8d2d0392/src/workflow.js +0 -600
- package/.worktrees/8d2d0392/src/workspace.js +0 -125
- package/.worktrees/8d2d0392/src/worktree-apply.js +0 -1611
- package/.worktrees/8d2d0392/src/worktree-deps.js +0 -576
- package/.worktrees/8d2d0392/src/worktree.js +0 -1838
- package/.worktrees/8d2d0392/templates/claude-instruction.md +0 -23
- package/.worktrees/8d2d0392/templates/prompts/taskcard-rules.md +0 -29
- package/.worktrees/8d2d0392/templates/prompts/testcase-design.md +0 -12
- package/.worktrees/8d2d0392/templates/prompts/verify-probes.md +0 -32
- package/.worktrees/8d2d0392/templates/workflows/archive-impact.yaml +0 -79
- package/.worktrees/8d2d0392/templates/workflows/scan-docs.yaml +0 -132
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-archive/SKILL.md +0 -87
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-auto/SKILL.md +0 -93
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -114
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-commit/SKILL.md +0 -67
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-continue/SKILL.md +0 -47
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-doctor/SKILL.md +0 -76
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-execute/SKILL.md +0 -214
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-explore/SKILL.md +0 -102
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-export/SKILL.md +0 -57
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-init/SKILL.md +0 -177
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-knowledge/SKILL.md +0 -270
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-plan/SKILL.md +0 -156
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-quick/SKILL.md +0 -116
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-resume/SKILL.md +0 -70
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-scan/SKILL.md +0 -79
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-state/SKILL.md +0 -64
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-status/SKILL.md +0 -54
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-verify/SKILL.md +0 -87
- package/.worktrees/c1eae35e/.claude/skills/sillyspec-workspace/SKILL.md +0 -175
- package/.worktrees/c1eae35e/.gitattributes +0 -2
- package/.worktrees/c1eae35e/.husky/pre-push +0 -20
- package/.worktrees/c1eae35e/README.md +0 -203
- package/.worktrees/c1eae35e/SKILL.md +0 -91
- package/.worktrees/c1eae35e/architecture-analysis.md +0 -448
- package/.worktrees/c1eae35e/bin/sillyspec.js +0 -2
- package/.worktrees/c1eae35e/eval/README.md +0 -86
- package/.worktrees/c1eae35e/eval/eval.config.json +0 -28
- package/.worktrees/c1eae35e/eval/lib/adapters/cli.mjs +0 -63
- package/.worktrees/c1eae35e/eval/lib/adapters/dryrun.mjs +0 -27
- package/.worktrees/c1eae35e/eval/lib/config.mjs +0 -82
- package/.worktrees/c1eae35e/eval/lib/db.mjs +0 -76
- package/.worktrees/c1eae35e/eval/lib/report.mjs +0 -120
- package/.worktrees/c1eae35e/eval/lib/runner.mjs +0 -157
- package/.worktrees/c1eae35e/eval/lib/tasks.mjs +0 -73
- package/.worktrees/c1eae35e/eval/lib/util.mjs +0 -107
- package/.worktrees/c1eae35e/eval/lib/workdir.mjs +0 -30
- package/.worktrees/c1eae35e/eval/run.mjs +0 -83
- package/.worktrees/c1eae35e/eval/tasks/001-slugify/files/package.json +0 -6
- package/.worktrees/c1eae35e/eval/tasks/001-slugify/solution/src/slugify.mjs +0 -26
- package/.worktrees/c1eae35e/eval/tasks/001-slugify/task.json +0 -6
- package/.worktrees/c1eae35e/eval/tasks/001-slugify/verify.mjs +0 -28
- package/.worktrees/c1eae35e/eval/tasks/002-each-day/files/package.json +0 -6
- package/.worktrees/c1eae35e/eval/tasks/002-each-day/files/src/dates.mjs +0 -4
- package/.worktrees/c1eae35e/eval/tasks/002-each-day/solution/src/dates.mjs +0 -30
- package/.worktrees/c1eae35e/eval/tasks/002-each-day/task.json +0 -6
- package/.worktrees/c1eae35e/eval/tasks/002-each-day/verify.mjs +0 -31
- package/.worktrees/c1eae35e/eval/tasks/003-word-report/files/data/notes.txt +0 -5
- package/.worktrees/c1eae35e/eval/tasks/003-word-report/files/package.json +0 -6
- package/.worktrees/c1eae35e/eval/tasks/003-word-report/solution/bin/report.mjs +0 -36
- package/.worktrees/c1eae35e/eval/tasks/003-word-report/task.json +0 -6
- package/.worktrees/c1eae35e/eval/tasks/003-word-report/verify.mjs +0 -38
- package/.worktrees/c1eae35e/logo.jpg +0 -0
- package/.worktrees/c1eae35e/package-lock.json +0 -977
- package/.worktrees/c1eae35e/package.json +0 -41
- package/.worktrees/c1eae35e/packages/dashboard/dist/assets/index-Bq_Z2hne.js +0 -7446
- package/.worktrees/c1eae35e/packages/dashboard/dist/assets/index-O2W5RV4z.css +0 -1
- package/.worktrees/c1eae35e/packages/dashboard/dist/favicon.jpg +0 -0
- package/.worktrees/c1eae35e/packages/dashboard/dist/index.html +0 -16
- package/.worktrees/c1eae35e/packages/dashboard/dist/logo.jpg +0 -0
- package/.worktrees/c1eae35e/packages/dashboard/dist/prototype-dashboard.html +0 -836
- package/.worktrees/c1eae35e/packages/dashboard/dist/prototype-overview.html +0 -256
- package/.worktrees/c1eae35e/packages/dashboard/package.json +0 -25
- package/.worktrees/c1eae35e/packages/dashboard/server/executor.js +0 -95
- package/.worktrees/c1eae35e/packages/dashboard/server/index.js +0 -679
- package/.worktrees/c1eae35e/packages/dashboard/server/parser.js +0 -526
- package/.worktrees/c1eae35e/packages/dashboard/server/watcher.js +0 -357
- package/.worktrees/c1eae35e/src/agent-session-log.js +0 -803
- package/.worktrees/c1eae35e/src/change-list.js +0 -290
- package/.worktrees/c1eae35e/src/change-risk-profile.js +0 -339
- package/.worktrees/c1eae35e/src/check-primitives.js +0 -65
- package/.worktrees/c1eae35e/src/classify-change.js +0 -109
- package/.worktrees/c1eae35e/src/commit-suggest.js +0 -202
- package/.worktrees/c1eae35e/src/config-cat.js +0 -88
- package/.worktrees/c1eae35e/src/config-schema.js +0 -328
- package/.worktrees/c1eae35e/src/constants.js +0 -97
- package/.worktrees/c1eae35e/src/contract-matrix.js +0 -533
- package/.worktrees/c1eae35e/src/datetime.js +0 -20
- package/.worktrees/c1eae35e/src/db-engine.js +0 -55
- package/.worktrees/c1eae35e/src/db.js +0 -381
- package/.worktrees/c1eae35e/src/decision-distill.js +0 -517
- package/.worktrees/c1eae35e/src/dispatch/backends/local-agent.js +0 -155
- package/.worktrees/c1eae35e/src/dispatch/backends/sillyhub-mcp.js +0 -245
- package/.worktrees/c1eae35e/src/dispatch/probe.js +0 -246
- package/.worktrees/c1eae35e/src/dispatch/strategy.js +0 -121
- package/.worktrees/c1eae35e/src/docs-check.js +0 -825
- package/.worktrees/c1eae35e/src/docs-debt.js +0 -393
- package/.worktrees/c1eae35e/src/docs-gate.js +0 -107
- package/.worktrees/c1eae35e/src/doctor-diagnostics.js +0 -1099
- package/.worktrees/c1eae35e/src/endpoint-extractor.js +0 -409
- package/.worktrees/c1eae35e/src/foreign-declared.js +0 -155
- package/.worktrees/c1eae35e/src/fs-atomic.js +0 -73
- package/.worktrees/c1eae35e/src/git-helper.js +0 -150
- package/.worktrees/c1eae35e/src/hooks/claude-pre-tool-use.cjs +0 -130
- package/.worktrees/c1eae35e/src/hooks/worktree-guard.js +0 -892
- package/.worktrees/c1eae35e/src/index.js +0 -2854
- package/.worktrees/c1eae35e/src/init.js +0 -626
- package/.worktrees/c1eae35e/src/knowledge-match.js +0 -231
- package/.worktrees/c1eae35e/src/local-detect.js +0 -128
- package/.worktrees/c1eae35e/src/local-register.js +0 -104
- package/.worktrees/c1eae35e/src/machine-interface.js +0 -543
- package/.worktrees/c1eae35e/src/migrate.js +0 -127
- package/.worktrees/c1eae35e/src/module-impact.js +0 -166
- package/.worktrees/c1eae35e/src/module-resolve.js +0 -222
- package/.worktrees/c1eae35e/src/modules.js +0 -580
- package/.worktrees/c1eae35e/src/plan-adopt-waves.js +0 -126
- package/.worktrees/c1eae35e/src/progress/change-registry.js +0 -336
- package/.worktrees/c1eae35e/src/progress/consistency-doctor.js +0 -355
- package/.worktrees/c1eae35e/src/progress/shared.js +0 -36
- package/.worktrees/c1eae35e/src/progress/stage-machine.js +0 -594
- package/.worktrees/c1eae35e/src/progress/step-store.js +0 -265
- package/.worktrees/c1eae35e/src/progress.js +0 -1304
- package/.worktrees/c1eae35e/src/quick-recommend.js +0 -115
- package/.worktrees/c1eae35e/src/quicklog.js +0 -883
- package/.worktrees/c1eae35e/src/review-tier.js +0 -77
- package/.worktrees/c1eae35e/src/run/command.js +0 -1641
- package/.worktrees/c1eae35e/src/run/complete-handlers.js +0 -1552
- package/.worktrees/c1eae35e/src/run/complete.js +0 -1259
- package/.worktrees/c1eae35e/src/run/concurrent-detect.js +0 -156
- package/.worktrees/c1eae35e/src/run/gates.js +0 -1111
- package/.worktrees/c1eae35e/src/run/multi-repo-context.js +0 -208
- package/.worktrees/c1eae35e/src/run/next.js +0 -128
- package/.worktrees/c1eae35e/src/run/prompt.js +0 -843
- package/.worktrees/c1eae35e/src/run/quick-audit.js +0 -186
- package/.worktrees/c1eae35e/src/run/scan-profile.js +0 -269
- package/.worktrees/c1eae35e/src/run/shared.js +0 -1562
- package/.worktrees/c1eae35e/src/run/stage.js +0 -587
- package/.worktrees/c1eae35e/src/run.js +0 -23
- package/.worktrees/c1eae35e/src/scan-diff.js +0 -388
- package/.worktrees/c1eae35e/src/scan-postcheck.js +0 -524
- package/.worktrees/c1eae35e/src/scan-staleness.js +0 -95
- package/.worktrees/c1eae35e/src/setup.js +0 -414
- package/.worktrees/c1eae35e/src/sillyhub-mcp/client.js +0 -597
- package/.worktrees/c1eae35e/src/sillyhub-mcp/config.js +0 -62
- package/.worktrees/c1eae35e/src/spec-dir-typo.js +0 -50
- package/.worktrees/c1eae35e/src/spec-sync.js +0 -358
- package/.worktrees/c1eae35e/src/stage-contract-engine.js +0 -171
- package/.worktrees/c1eae35e/src/stage-contract-spec.js +0 -551
- package/.worktrees/c1eae35e/src/stage-contract.js +0 -948
- package/.worktrees/c1eae35e/src/stage-review.js +0 -597
- package/.worktrees/c1eae35e/src/stages/archive.js +0 -199
- package/.worktrees/c1eae35e/src/stages/brainstorm-auto.js +0 -285
- package/.worktrees/c1eae35e/src/stages/brainstorm.js +0 -624
- package/.worktrees/c1eae35e/src/stages/cmd-existence.js +0 -145
- package/.worktrees/c1eae35e/src/stages/doctor.js +0 -540
- package/.worktrees/c1eae35e/src/stages/execute.js +0 -1277
- package/.worktrees/c1eae35e/src/stages/explore.js +0 -43
- package/.worktrees/c1eae35e/src/stages/index.js +0 -29
- package/.worktrees/c1eae35e/src/stages/knowledge.js +0 -514
- package/.worktrees/c1eae35e/src/stages/plan-postcheck.js +0 -1398
- package/.worktrees/c1eae35e/src/stages/plan.js +0 -655
- package/.worktrees/c1eae35e/src/stages/quick.js +0 -167
- package/.worktrees/c1eae35e/src/stages/scan.js +0 -608
- package/.worktrees/c1eae35e/src/stages/status.js +0 -64
- package/.worktrees/c1eae35e/src/stages/verify.js +0 -246
- package/.worktrees/c1eae35e/src/sync.js +0 -1470
- package/.worktrees/c1eae35e/src/task-review.js +0 -1498
- package/.worktrees/c1eae35e/src/taskcard-placeholders.js +0 -21
- package/.worktrees/c1eae35e/src/taskcard.js +0 -250
- package/.worktrees/c1eae35e/src/verify-postcheck.js +0 -1718
- package/.worktrees/c1eae35e/src/verify-probes.js +0 -327
- package/.worktrees/c1eae35e/src/version.js +0 -19
- package/.worktrees/c1eae35e/src/workflow.js +0 -600
- package/.worktrees/c1eae35e/src/workspace.js +0 -125
- package/.worktrees/c1eae35e/src/worktree-apply.js +0 -1611
- package/.worktrees/c1eae35e/src/worktree-deps.js +0 -668
- package/.worktrees/c1eae35e/src/worktree.js +0 -1849
- package/.worktrees/c1eae35e/templates/claude-instruction.md +0 -23
- package/.worktrees/c1eae35e/templates/prompts/taskcard-rules.md +0 -29
- package/.worktrees/c1eae35e/templates/prompts/testcase-design.md +0 -12
- package/.worktrees/c1eae35e/templates/prompts/verify-probes.md +0 -32
- package/.worktrees/c1eae35e/templates/workflows/archive-impact.yaml +0 -79
- package/.worktrees/c1eae35e/templates/workflows/scan-docs.yaml +0 -132
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-archive/SKILL.md +0 -87
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-auto/SKILL.md +0 -93
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -114
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-commit/SKILL.md +0 -67
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-continue/SKILL.md +0 -47
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-doctor/SKILL.md +0 -76
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-execute/SKILL.md +0 -214
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-explore/SKILL.md +0 -102
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-export/SKILL.md +0 -57
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-init/SKILL.md +0 -177
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-knowledge/SKILL.md +0 -270
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-plan/SKILL.md +0 -156
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-propose/SKILL.md +0 -87
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-quick/SKILL.md +0 -116
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-resume/SKILL.md +0 -70
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-scan/SKILL.md +0 -79
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-state/SKILL.md +0 -64
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-status/SKILL.md +0 -54
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-verify/SKILL.md +0 -87
- package/.worktrees/dafc71ad/.claude/skills/sillyspec-workspace/SKILL.md +0 -175
- package/.worktrees/dafc71ad/.gitattributes +0 -2
- package/.worktrees/dafc71ad/.husky/pre-push +0 -20
- package/.worktrees/dafc71ad/README.md +0 -203
- package/.worktrees/dafc71ad/SKILL.md +0 -91
- package/.worktrees/dafc71ad/analysis.md +0 -366
- package/.worktrees/dafc71ad/architecture-analysis.md +0 -448
- package/.worktrees/dafc71ad/bin/sillyspec.js +0 -2
- package/.worktrees/dafc71ad/eval/README.md +0 -86
- package/.worktrees/dafc71ad/eval/eval.config.json +0 -28
- package/.worktrees/dafc71ad/eval/lib/adapters/cli.mjs +0 -63
- package/.worktrees/dafc71ad/eval/lib/adapters/dryrun.mjs +0 -27
- package/.worktrees/dafc71ad/eval/lib/config.mjs +0 -82
- package/.worktrees/dafc71ad/eval/lib/db.mjs +0 -76
- package/.worktrees/dafc71ad/eval/lib/report.mjs +0 -120
- package/.worktrees/dafc71ad/eval/lib/runner.mjs +0 -157
- package/.worktrees/dafc71ad/eval/lib/tasks.mjs +0 -73
- package/.worktrees/dafc71ad/eval/lib/util.mjs +0 -107
- package/.worktrees/dafc71ad/eval/lib/workdir.mjs +0 -30
- package/.worktrees/dafc71ad/eval/run.mjs +0 -83
- package/.worktrees/dafc71ad/eval/tasks/001-slugify/files/package.json +0 -6
- package/.worktrees/dafc71ad/eval/tasks/001-slugify/solution/src/slugify.mjs +0 -26
- package/.worktrees/dafc71ad/eval/tasks/001-slugify/task.json +0 -6
- package/.worktrees/dafc71ad/eval/tasks/001-slugify/verify.mjs +0 -28
- package/.worktrees/dafc71ad/eval/tasks/002-each-day/files/package.json +0 -6
- package/.worktrees/dafc71ad/eval/tasks/002-each-day/files/src/dates.mjs +0 -4
- package/.worktrees/dafc71ad/eval/tasks/002-each-day/solution/src/dates.mjs +0 -30
- package/.worktrees/dafc71ad/eval/tasks/002-each-day/task.json +0 -6
- package/.worktrees/dafc71ad/eval/tasks/002-each-day/verify.mjs +0 -31
- package/.worktrees/dafc71ad/eval/tasks/003-word-report/files/data/notes.txt +0 -5
- package/.worktrees/dafc71ad/eval/tasks/003-word-report/files/package.json +0 -6
- package/.worktrees/dafc71ad/eval/tasks/003-word-report/solution/bin/report.mjs +0 -36
- package/.worktrees/dafc71ad/eval/tasks/003-word-report/task.json +0 -6
- package/.worktrees/dafc71ad/eval/tasks/003-word-report/verify.mjs +0 -38
- package/.worktrees/dafc71ad/logo.jpg +0 -0
- package/.worktrees/dafc71ad/package-lock.json +0 -977
- package/.worktrees/dafc71ad/package.json +0 -41
- package/.worktrees/dafc71ad/packages/dashboard/dist/assets/index-Bq_Z2hne.js +0 -7446
- package/.worktrees/dafc71ad/packages/dashboard/dist/assets/index-O2W5RV4z.css +0 -1
- package/.worktrees/dafc71ad/packages/dashboard/dist/favicon.jpg +0 -0
- package/.worktrees/dafc71ad/packages/dashboard/dist/index.html +0 -16
- package/.worktrees/dafc71ad/packages/dashboard/dist/logo.jpg +0 -0
- package/.worktrees/dafc71ad/packages/dashboard/dist/prototype-dashboard.html +0 -836
- package/.worktrees/dafc71ad/packages/dashboard/dist/prototype-overview.html +0 -256
- package/.worktrees/dafc71ad/packages/dashboard/package.json +0 -25
- package/.worktrees/dafc71ad/packages/dashboard/server/executor.js +0 -95
- package/.worktrees/dafc71ad/packages/dashboard/server/index.js +0 -679
- package/.worktrees/dafc71ad/packages/dashboard/server/parser.js +0 -526
- package/.worktrees/dafc71ad/packages/dashboard/server/watcher.js +0 -357
- package/.worktrees/dafc71ad/src/agent-session-log.js +0 -803
- package/.worktrees/dafc71ad/src/change-list.js +0 -290
- package/.worktrees/dafc71ad/src/change-risk-profile.js +0 -339
- package/.worktrees/dafc71ad/src/check-primitives.js +0 -65
- package/.worktrees/dafc71ad/src/classify-change.js +0 -109
- package/.worktrees/dafc71ad/src/commit-suggest.js +0 -202
- package/.worktrees/dafc71ad/src/config-cat.js +0 -88
- package/.worktrees/dafc71ad/src/config-schema.js +0 -328
- package/.worktrees/dafc71ad/src/constants.js +0 -97
- package/.worktrees/dafc71ad/src/contract-matrix.js +0 -533
- package/.worktrees/dafc71ad/src/datetime.js +0 -20
- package/.worktrees/dafc71ad/src/db-engine.js +0 -55
- package/.worktrees/dafc71ad/src/db.js +0 -381
- package/.worktrees/dafc71ad/src/decision-distill.js +0 -517
- package/.worktrees/dafc71ad/src/dispatch/backends/local-agent.js +0 -155
- package/.worktrees/dafc71ad/src/dispatch/backends/sillyhub-mcp.js +0 -245
- package/.worktrees/dafc71ad/src/dispatch/probe.js +0 -246
- package/.worktrees/dafc71ad/src/dispatch/strategy.js +0 -121
- package/.worktrees/dafc71ad/src/docs-check.js +0 -825
- package/.worktrees/dafc71ad/src/docs-debt.js +0 -393
- package/.worktrees/dafc71ad/src/docs-gate.js +0 -107
- package/.worktrees/dafc71ad/src/doctor-diagnostics.js +0 -1099
- package/.worktrees/dafc71ad/src/endpoint-extractor.js +0 -409
- package/.worktrees/dafc71ad/src/foreign-declared.js +0 -155
- package/.worktrees/dafc71ad/src/fs-atomic.js +0 -73
- package/.worktrees/dafc71ad/src/git-helper.js +0 -150
- package/.worktrees/dafc71ad/src/hooks/claude-pre-tool-use.cjs +0 -130
- package/.worktrees/dafc71ad/src/hooks/worktree-guard.js +0 -892
- package/.worktrees/dafc71ad/src/index.js +0 -2854
- package/.worktrees/dafc71ad/src/init.js +0 -626
- package/.worktrees/dafc71ad/src/knowledge-match.js +0 -231
- package/.worktrees/dafc71ad/src/local-detect.js +0 -128
- package/.worktrees/dafc71ad/src/local-register.js +0 -104
- package/.worktrees/dafc71ad/src/machine-interface.js +0 -543
- package/.worktrees/dafc71ad/src/migrate.js +0 -127
- package/.worktrees/dafc71ad/src/module-impact.js +0 -166
- package/.worktrees/dafc71ad/src/module-resolve.js +0 -222
- package/.worktrees/dafc71ad/src/modules.js +0 -580
- package/.worktrees/dafc71ad/src/plan-adopt-waves.js +0 -126
- package/.worktrees/dafc71ad/src/progress/change-registry.js +0 -336
- package/.worktrees/dafc71ad/src/progress/consistency-doctor.js +0 -355
- package/.worktrees/dafc71ad/src/progress/shared.js +0 -36
- package/.worktrees/dafc71ad/src/progress/stage-machine.js +0 -594
- package/.worktrees/dafc71ad/src/progress/step-store.js +0 -265
- package/.worktrees/dafc71ad/src/progress.js +0 -1304
- package/.worktrees/dafc71ad/src/quick-recommend.js +0 -115
- package/.worktrees/dafc71ad/src/quicklog.js +0 -883
- package/.worktrees/dafc71ad/src/review-tier.js +0 -77
- package/.worktrees/dafc71ad/src/run/command.js +0 -1641
- package/.worktrees/dafc71ad/src/run/complete-handlers.js +0 -1552
- package/.worktrees/dafc71ad/src/run/complete.js +0 -1259
- package/.worktrees/dafc71ad/src/run/concurrent-detect.js +0 -156
- package/.worktrees/dafc71ad/src/run/gates.js +0 -1111
- package/.worktrees/dafc71ad/src/run/multi-repo-context.js +0 -208
- package/.worktrees/dafc71ad/src/run/next.js +0 -128
- package/.worktrees/dafc71ad/src/run/prompt.js +0 -843
- package/.worktrees/dafc71ad/src/run/quick-audit.js +0 -186
- package/.worktrees/dafc71ad/src/run/scan-profile.js +0 -269
- package/.worktrees/dafc71ad/src/run/shared.js +0 -1562
- package/.worktrees/dafc71ad/src/run/stage.js +0 -587
- package/.worktrees/dafc71ad/src/run.js +0 -23
- package/.worktrees/dafc71ad/src/scan-diff.js +0 -388
- package/.worktrees/dafc71ad/src/scan-postcheck.js +0 -524
- package/.worktrees/dafc71ad/src/scan-staleness.js +0 -95
- package/.worktrees/dafc71ad/src/setup.js +0 -414
- package/.worktrees/dafc71ad/src/sillyhub-mcp/client.js +0 -597
- package/.worktrees/dafc71ad/src/sillyhub-mcp/config.js +0 -62
- package/.worktrees/dafc71ad/src/spec-dir-typo.js +0 -50
- package/.worktrees/dafc71ad/src/spec-sync.js +0 -358
- package/.worktrees/dafc71ad/src/stage-contract-engine.js +0 -171
- package/.worktrees/dafc71ad/src/stage-contract-spec.js +0 -551
- package/.worktrees/dafc71ad/src/stage-contract.js +0 -948
- package/.worktrees/dafc71ad/src/stage-review.js +0 -597
- package/.worktrees/dafc71ad/src/stages/archive.js +0 -199
- package/.worktrees/dafc71ad/src/stages/brainstorm-auto.js +0 -285
- package/.worktrees/dafc71ad/src/stages/brainstorm.js +0 -624
- package/.worktrees/dafc71ad/src/stages/cmd-existence.js +0 -145
- package/.worktrees/dafc71ad/src/stages/doctor.js +0 -540
- package/.worktrees/dafc71ad/src/stages/execute.js +0 -1277
- package/.worktrees/dafc71ad/src/stages/explore.js +0 -43
- package/.worktrees/dafc71ad/src/stages/index.js +0 -29
- package/.worktrees/dafc71ad/src/stages/knowledge.js +0 -514
- package/.worktrees/dafc71ad/src/stages/plan-postcheck.js +0 -1398
- package/.worktrees/dafc71ad/src/stages/plan.js +0 -655
- package/.worktrees/dafc71ad/src/stages/quick.js +0 -167
- package/.worktrees/dafc71ad/src/stages/scan.js +0 -608
- package/.worktrees/dafc71ad/src/stages/status.js +0 -64
- package/.worktrees/dafc71ad/src/stages/verify.js +0 -246
- package/.worktrees/dafc71ad/src/sync.js +0 -1470
- package/.worktrees/dafc71ad/src/task-review.js +0 -1498
- package/.worktrees/dafc71ad/src/taskcard-placeholders.js +0 -21
- package/.worktrees/dafc71ad/src/taskcard.js +0 -250
- package/.worktrees/dafc71ad/src/verify-postcheck.js +0 -1718
- package/.worktrees/dafc71ad/src/verify-probes.js +0 -327
- package/.worktrees/dafc71ad/src/version.js +0 -19
- package/.worktrees/dafc71ad/src/workflow.js +0 -600
- package/.worktrees/dafc71ad/src/workspace.js +0 -125
- package/.worktrees/dafc71ad/src/worktree-apply.js +0 -1611
- package/.worktrees/dafc71ad/src/worktree-deps.js +0 -668
- package/.worktrees/dafc71ad/src/worktree.js +0 -1849
- package/.worktrees/dafc71ad/templates/claude-instruction.md +0 -23
- package/.worktrees/dafc71ad/templates/prompts/taskcard-rules.md +0 -29
- package/.worktrees/dafc71ad/templates/prompts/testcase-design.md +0 -12
- package/.worktrees/dafc71ad/templates/prompts/verify-probes.md +0 -32
- package/.worktrees/dafc71ad/templates/workflows/archive-impact.yaml +0 -79
- package/.worktrees/dafc71ad/templates/workflows/scan-docs.yaml +0 -132
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-archive/SKILL.md +0 -87
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-auto/SKILL.md +0 -93
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-brainstorm/SKILL.md +0 -114
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-commit/SKILL.md +0 -67
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-continue/SKILL.md +0 -47
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-doctor/SKILL.md +0 -76
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-execute/SKILL.md +0 -214
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-explore/SKILL.md +0 -102
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-export/SKILL.md +0 -57
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-init/SKILL.md +0 -177
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-knowledge/SKILL.md +0 -270
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-plan/SKILL.md +0 -156
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-propose/SKILL.md +0 -87
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-quick/SKILL.md +0 -116
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-resume/SKILL.md +0 -70
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-scan/SKILL.md +0 -79
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-state/SKILL.md +0 -64
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-status/SKILL.md +0 -54
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-verify/SKILL.md +0 -87
- package/.worktrees/e58fcc4c/.claude/skills/sillyspec-workspace/SKILL.md +0 -175
- package/.worktrees/e58fcc4c/.gitattributes +0 -2
- package/.worktrees/e58fcc4c/.husky/pre-push +0 -20
- package/.worktrees/e58fcc4c/README.md +0 -203
- package/.worktrees/e58fcc4c/SKILL.md +0 -91
- package/.worktrees/e58fcc4c/architecture-analysis.md +0 -503
- package/.worktrees/e58fcc4c/bin/sillyspec.js +0 -2
- package/.worktrees/e58fcc4c/eval/README.md +0 -86
- package/.worktrees/e58fcc4c/eval/eval.config.json +0 -28
- package/.worktrees/e58fcc4c/eval/lib/adapters/cli.mjs +0 -63
- package/.worktrees/e58fcc4c/eval/lib/adapters/dryrun.mjs +0 -27
- package/.worktrees/e58fcc4c/eval/lib/config.mjs +0 -82
- package/.worktrees/e58fcc4c/eval/lib/db.mjs +0 -76
- package/.worktrees/e58fcc4c/eval/lib/report.mjs +0 -120
- package/.worktrees/e58fcc4c/eval/lib/runner.mjs +0 -157
- package/.worktrees/e58fcc4c/eval/lib/tasks.mjs +0 -73
- package/.worktrees/e58fcc4c/eval/lib/util.mjs +0 -107
- package/.worktrees/e58fcc4c/eval/lib/workdir.mjs +0 -30
- package/.worktrees/e58fcc4c/eval/run.mjs +0 -83
- package/.worktrees/e58fcc4c/eval/tasks/001-slugify/files/package.json +0 -6
- package/.worktrees/e58fcc4c/eval/tasks/001-slugify/solution/src/slugify.mjs +0 -26
- package/.worktrees/e58fcc4c/eval/tasks/001-slugify/task.json +0 -6
- package/.worktrees/e58fcc4c/eval/tasks/001-slugify/verify.mjs +0 -28
- package/.worktrees/e58fcc4c/eval/tasks/002-each-day/files/package.json +0 -6
- package/.worktrees/e58fcc4c/eval/tasks/002-each-day/files/src/dates.mjs +0 -4
- package/.worktrees/e58fcc4c/eval/tasks/002-each-day/solution/src/dates.mjs +0 -30
- package/.worktrees/e58fcc4c/eval/tasks/002-each-day/task.json +0 -6
- package/.worktrees/e58fcc4c/eval/tasks/002-each-day/verify.mjs +0 -31
- package/.worktrees/e58fcc4c/eval/tasks/003-word-report/files/data/notes.txt +0 -5
- package/.worktrees/e58fcc4c/eval/tasks/003-word-report/files/package.json +0 -6
- package/.worktrees/e58fcc4c/eval/tasks/003-word-report/solution/bin/report.mjs +0 -36
- package/.worktrees/e58fcc4c/eval/tasks/003-word-report/task.json +0 -6
- package/.worktrees/e58fcc4c/eval/tasks/003-word-report/verify.mjs +0 -38
- package/.worktrees/e58fcc4c/logo.jpg +0 -0
- package/.worktrees/e58fcc4c/package-lock.json +0 -977
- package/.worktrees/e58fcc4c/package.json +0 -41
- package/.worktrees/e58fcc4c/packages/dashboard/dist/assets/index-Bq_Z2hne.js +0 -7446
- package/.worktrees/e58fcc4c/packages/dashboard/dist/assets/index-O2W5RV4z.css +0 -1
- package/.worktrees/e58fcc4c/packages/dashboard/dist/favicon.jpg +0 -0
- package/.worktrees/e58fcc4c/packages/dashboard/dist/index.html +0 -16
- package/.worktrees/e58fcc4c/packages/dashboard/dist/logo.jpg +0 -0
- package/.worktrees/e58fcc4c/packages/dashboard/dist/prototype-dashboard.html +0 -836
- package/.worktrees/e58fcc4c/packages/dashboard/dist/prototype-overview.html +0 -256
- package/.worktrees/e58fcc4c/packages/dashboard/package.json +0 -25
- package/.worktrees/e58fcc4c/packages/dashboard/server/executor.js +0 -95
- package/.worktrees/e58fcc4c/packages/dashboard/server/index.js +0 -679
- package/.worktrees/e58fcc4c/packages/dashboard/server/parser.js +0 -526
- package/.worktrees/e58fcc4c/packages/dashboard/server/watcher.js +0 -357
- package/.worktrees/e58fcc4c/src/agent-session-log.js +0 -803
- package/.worktrees/e58fcc4c/src/change-list.js +0 -290
- package/.worktrees/e58fcc4c/src/change-risk-profile.js +0 -339
- package/.worktrees/e58fcc4c/src/check-primitives.js +0 -65
- package/.worktrees/e58fcc4c/src/classify-change.js +0 -109
- package/.worktrees/e58fcc4c/src/commit-suggest.js +0 -202
- package/.worktrees/e58fcc4c/src/config-cat.js +0 -88
- package/.worktrees/e58fcc4c/src/config-schema.js +0 -328
- package/.worktrees/e58fcc4c/src/constants.js +0 -97
- package/.worktrees/e58fcc4c/src/contract-matrix.js +0 -533
- package/.worktrees/e58fcc4c/src/datetime.js +0 -20
- package/.worktrees/e58fcc4c/src/db-engine.js +0 -55
- package/.worktrees/e58fcc4c/src/db.js +0 -381
- package/.worktrees/e58fcc4c/src/decision-distill.js +0 -517
- package/.worktrees/e58fcc4c/src/dispatch/backends/local-agent.js +0 -155
- package/.worktrees/e58fcc4c/src/dispatch/backends/sillyhub-mcp.js +0 -245
- package/.worktrees/e58fcc4c/src/dispatch/probe.js +0 -246
- package/.worktrees/e58fcc4c/src/dispatch/strategy.js +0 -121
- package/.worktrees/e58fcc4c/src/docs-check.js +0 -825
- package/.worktrees/e58fcc4c/src/docs-debt.js +0 -393
- package/.worktrees/e58fcc4c/src/docs-gate.js +0 -107
- package/.worktrees/e58fcc4c/src/doctor-diagnostics.js +0 -1099
- package/.worktrees/e58fcc4c/src/endpoint-extractor.js +0 -409
- package/.worktrees/e58fcc4c/src/foreign-declared.js +0 -155
- package/.worktrees/e58fcc4c/src/fs-atomic.js +0 -73
- package/.worktrees/e58fcc4c/src/git-helper.js +0 -150
- package/.worktrees/e58fcc4c/src/hooks/claude-pre-tool-use.cjs +0 -130
- package/.worktrees/e58fcc4c/src/hooks/worktree-guard.js +0 -892
- package/.worktrees/e58fcc4c/src/index.js +0 -2854
- package/.worktrees/e58fcc4c/src/init.js +0 -626
- package/.worktrees/e58fcc4c/src/knowledge-match.js +0 -231
- package/.worktrees/e58fcc4c/src/local-detect.js +0 -128
- package/.worktrees/e58fcc4c/src/local-register.js +0 -104
- package/.worktrees/e58fcc4c/src/machine-interface.js +0 -543
- package/.worktrees/e58fcc4c/src/migrate.js +0 -127
- package/.worktrees/e58fcc4c/src/module-impact.js +0 -166
- package/.worktrees/e58fcc4c/src/module-resolve.js +0 -222
- package/.worktrees/e58fcc4c/src/modules.js +0 -580
- package/.worktrees/e58fcc4c/src/plan-adopt-waves.js +0 -126
- package/.worktrees/e58fcc4c/src/progress/change-registry.js +0 -336
- package/.worktrees/e58fcc4c/src/progress/consistency-doctor.js +0 -355
- package/.worktrees/e58fcc4c/src/progress/shared.js +0 -36
- package/.worktrees/e58fcc4c/src/progress/stage-machine.js +0 -594
- package/.worktrees/e58fcc4c/src/progress/step-store.js +0 -265
- package/.worktrees/e58fcc4c/src/progress.js +0 -1304
- package/.worktrees/e58fcc4c/src/quick-recommend.js +0 -115
- package/.worktrees/e58fcc4c/src/quicklog.js +0 -883
- package/.worktrees/e58fcc4c/src/review-tier.js +0 -77
- package/.worktrees/e58fcc4c/src/run/command.js +0 -1641
- package/.worktrees/e58fcc4c/src/run/complete-handlers.js +0 -1552
- package/.worktrees/e58fcc4c/src/run/complete.js +0 -1259
- package/.worktrees/e58fcc4c/src/run/concurrent-detect.js +0 -156
- package/.worktrees/e58fcc4c/src/run/gates.js +0 -1111
- package/.worktrees/e58fcc4c/src/run/multi-repo-context.js +0 -208
- package/.worktrees/e58fcc4c/src/run/next.js +0 -128
- package/.worktrees/e58fcc4c/src/run/prompt.js +0 -843
- package/.worktrees/e58fcc4c/src/run/quick-audit.js +0 -186
- package/.worktrees/e58fcc4c/src/run/scan-profile.js +0 -269
- package/.worktrees/e58fcc4c/src/run/shared.js +0 -1562
- package/.worktrees/e58fcc4c/src/run/stage.js +0 -587
- package/.worktrees/e58fcc4c/src/run.js +0 -23
- package/.worktrees/e58fcc4c/src/scan-diff.js +0 -388
- package/.worktrees/e58fcc4c/src/scan-postcheck.js +0 -524
- package/.worktrees/e58fcc4c/src/scan-staleness.js +0 -95
- package/.worktrees/e58fcc4c/src/setup.js +0 -414
- package/.worktrees/e58fcc4c/src/sillyhub-mcp/client.js +0 -597
- package/.worktrees/e58fcc4c/src/sillyhub-mcp/config.js +0 -62
- package/.worktrees/e58fcc4c/src/spec-dir-typo.js +0 -50
- package/.worktrees/e58fcc4c/src/spec-sync.js +0 -358
- package/.worktrees/e58fcc4c/src/stage-contract-engine.js +0 -171
- package/.worktrees/e58fcc4c/src/stage-contract-spec.js +0 -551
- package/.worktrees/e58fcc4c/src/stage-contract.js +0 -948
- package/.worktrees/e58fcc4c/src/stage-review.js +0 -597
- package/.worktrees/e58fcc4c/src/stages/archive.js +0 -199
- package/.worktrees/e58fcc4c/src/stages/brainstorm-auto.js +0 -285
- package/.worktrees/e58fcc4c/src/stages/brainstorm.js +0 -624
- package/.worktrees/e58fcc4c/src/stages/cmd-existence.js +0 -145
- package/.worktrees/e58fcc4c/src/stages/doctor.js +0 -540
- package/.worktrees/e58fcc4c/src/stages/execute.js +0 -1277
- package/.worktrees/e58fcc4c/src/stages/explore.js +0 -43
- package/.worktrees/e58fcc4c/src/stages/index.js +0 -29
- package/.worktrees/e58fcc4c/src/stages/knowledge.js +0 -514
- package/.worktrees/e58fcc4c/src/stages/plan-postcheck.js +0 -1398
- package/.worktrees/e58fcc4c/src/stages/plan.js +0 -655
- package/.worktrees/e58fcc4c/src/stages/quick.js +0 -167
- package/.worktrees/e58fcc4c/src/stages/scan.js +0 -608
- package/.worktrees/e58fcc4c/src/stages/status.js +0 -64
- package/.worktrees/e58fcc4c/src/stages/verify.js +0 -246
- package/.worktrees/e58fcc4c/src/sync.js +0 -1470
- package/.worktrees/e58fcc4c/src/task-review.js +0 -1498
- package/.worktrees/e58fcc4c/src/taskcard-placeholders.js +0 -21
- package/.worktrees/e58fcc4c/src/taskcard.js +0 -250
- package/.worktrees/e58fcc4c/src/verify-postcheck.js +0 -1718
- package/.worktrees/e58fcc4c/src/verify-probes.js +0 -327
- package/.worktrees/e58fcc4c/src/version.js +0 -19
- package/.worktrees/e58fcc4c/src/workflow.js +0 -600
- package/.worktrees/e58fcc4c/src/workspace.js +0 -125
- package/.worktrees/e58fcc4c/src/worktree-apply.js +0 -1611
- package/.worktrees/e58fcc4c/src/worktree-deps.js +0 -668
- package/.worktrees/e58fcc4c/src/worktree.js +0 -1849
- package/.worktrees/e58fcc4c/templates/claude-instruction.md +0 -23
- package/.worktrees/e58fcc4c/templates/prompts/taskcard-rules.md +0 -29
- package/.worktrees/e58fcc4c/templates/prompts/testcase-design.md +0 -12
- package/.worktrees/e58fcc4c/templates/prompts/verify-probes.md +0 -32
- package/.worktrees/e58fcc4c/templates/workflows/archive-impact.yaml +0 -79
- package/.worktrees/e58fcc4c/templates/workflows/scan-docs.yaml +0 -132
|
@@ -26,12 +26,12 @@ import { basename, join, resolve, relative, isAbsolute } from 'node:path'
|
|
|
26
26
|
import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync, unlinkSync, rmSync } from 'node:fs'
|
|
27
27
|
import { renameSyncRetry, writeAtomicSync } from '../fs-atomic.js'
|
|
28
28
|
import { gitQuiet } from '../git-helper.js'
|
|
29
|
-
import { resolveChangeDir, resolveQuickSessionsDir, safeGit, auditQuickCompletion, triggerSync, isQuickMetadata, resolveRuntimeRoot, collectOtherQuickSessionDeclarations } from './shared.js'
|
|
29
|
+
import { resolveChangeDir, resolveQuickSessionsDir, safeGit, auditQuickCompletion, triggerSync, isQuickMetadata, resolveRuntimeRoot, collectOtherQuickSessionDeclarations, mergeQuickBoundaryFiles } from './shared.js'
|
|
30
30
|
import { detectConcurrentChanges, formatConcurrentWarning, resolveConcurrentAnchor } from './concurrent-detect.js'
|
|
31
31
|
import { stageRegistry } from '../stages/index.js'
|
|
32
32
|
import { SCAN_STATUS, POINTER_STATUS } from '../constants.js'
|
|
33
|
-
import { printQuickAuditReview } from './quick-audit.js'
|
|
34
|
-
import { validateQuickResult, allocateQuicklogEntry, findQuicklogEntry, completeQuicklogEntry, extractTitleFromResult } from '../quicklog.js'
|
|
33
|
+
import { printQuickAuditReview, runQuickTestLintGate, printQuickTestLintGate } from './quick-audit.js'
|
|
34
|
+
import { validateQuickResult, allocateQuicklogEntry, appendQuicklogEntryWithId, findQuicklogEntry, completeQuicklogEntry, extractTitleFromResult } from '../quicklog.js'
|
|
35
35
|
import { getRule } from '../stage-contract-spec.js'
|
|
36
36
|
import { archiveDestDirName } from '../stage-contract.js'
|
|
37
37
|
|
|
@@ -432,6 +432,31 @@ export async function handleArchiveConfirmStep({ stageName, steps, currentIdx, c
|
|
|
432
432
|
console.log('⚠️ 请添加 --confirm 确认归档,例如:sillyspec run archive --done --confirm --output "确认归档"')
|
|
433
433
|
return { stageCompleted: false, currentIdx, nextPendingIdx: currentIdx }
|
|
434
434
|
}
|
|
435
|
+
// ── 归档前 delta.md 自动生成(P3d task-02,fail-soft 零阻断)──
|
|
436
|
+
// 目录移走前在 changes/<name>/ 落一份 Before/Delta/After 三段式快照(四源采集容缺,
|
|
437
|
+
// buildDeltaReport 见 ../archive-delta.js),随归档包留存。失败只 console.error 留痕、
|
|
438
|
+
// 提示 sillyspec delta --change 手动补,绝不抛出——归档主流程既有失败面(rename/git/清理)
|
|
439
|
+
// 一个不叠加。specRoot 同 complete.js :87 口径(specBase 已含 platform specRoot);
|
|
440
|
+
// runtimeRoot 同本文件 archiveWorktreeCleanup 既有用法 resolveRuntimeRoot(platformOpts, specBase)。
|
|
441
|
+
const deltaChangeName = progress.currentChange || changeName
|
|
442
|
+
if (deltaChangeName) {
|
|
443
|
+
try {
|
|
444
|
+
const { buildDeltaReport } = await import('../archive-delta.js')
|
|
445
|
+
const deltaChangeDir = join(specBase, 'changes', deltaChangeName)
|
|
446
|
+
const deltaMd = buildDeltaReport({
|
|
447
|
+
changeDir: deltaChangeDir,
|
|
448
|
+
specRoot: specBase,
|
|
449
|
+
// project 缺参可 null(loadModuleMap null 降级路径已支持,报告内逐段降级注记)
|
|
450
|
+
project: progress?.project || null,
|
|
451
|
+
runtimeRoot: resolveRuntimeRoot(platformOpts, specBase),
|
|
452
|
+
})
|
|
453
|
+
writeFileSync(join(deltaChangeDir, 'delta.md'), deltaMd)
|
|
454
|
+
console.log(`📊 归档前已生成 delta.md: ${join(deltaChangeDir, 'delta.md')}`)
|
|
455
|
+
} catch (e) {
|
|
456
|
+
console.error(`⚠️ 归档前 delta.md 自动生成失败(不阻断归档): ${e.message}`)
|
|
457
|
+
console.error(` 可手动补: sillyspec delta --change ${deltaChangeName} --spec-dir ${specBase}`)
|
|
458
|
+
}
|
|
459
|
+
}
|
|
435
460
|
// 主仓互斥锁(坑 main-repo-no-mutex 二批):archiveChangeDirectory 改主仓共享状态(目录
|
|
436
461
|
// rename + 共享 index 的 git add + marker 删除 + worktree 清理),与并行会话的 apply/cleanup
|
|
437
462
|
// 互踩。exit 钩子兜底:其内部 guard 失败 exit(1) 时锁也会被清(见 withMainRepoLock)。
|
|
@@ -832,7 +857,7 @@ export async function handleWorkflowPostCheck({ stageName, steps, currentIdx, cw
|
|
|
832
857
|
* isForceBaseline/isAllowNew/platformOpts。辅助函数直接 import(safeGit/auditQuickCompletion ← shared,
|
|
833
858
|
* printQuickAuditReview ← quick-audit,4 个 quicklog fns ← quicklog,unlinkSync/rmSync ← fs 静态)。
|
|
834
859
|
*/
|
|
835
|
-
export async function handleQuickStageCompletion({ stageName, steps, currentIdx, cwd, progress, changeName, specBase, outputText, confirm, isForceBaseline, isAllowNew, isAllowDelete, platformOpts, pm }) {
|
|
860
|
+
export async function handleQuickStageCompletion({ stageName, steps, currentIdx, cwd, progress, changeName, specBase, outputText, confirm, isForceBaseline, isAllowNew, isAllowDelete, platformOpts, pm, quickFiles = [] }) {
|
|
836
861
|
// quick 收尾:强校验 QUICKLOG 条目 + 翻状态 + 勾 tasks.md(CLI 接管)
|
|
837
862
|
if (stageName === 'quick') {
|
|
838
863
|
// §4.6 从 session guard.json 读 guard(不依赖 progress.quickGuard)。
|
|
@@ -860,6 +885,18 @@ export async function handleQuickStageCompletion({ stageName, steps, currentIdx,
|
|
|
860
885
|
// review.changedFiles;brownfield 无 guard 时保持 null → 文件行不回填(降级,不报错)。
|
|
861
886
|
let review = null
|
|
862
887
|
|
|
888
|
+
// --done --files 一步并入边界(坑 quick-audit-warning-no-guidance 2026-09-03,与
|
|
889
|
+
// ql-20260713-002-7628 同族——flag 在 --done 被解析却不生效):此前追加声明只能先
|
|
890
|
+
// 「恢复会话带 --files」再 --done 两步走。并入语义与 stage.js 恢复路径同款(追加不
|
|
891
|
+
// 替换、去重保序 + allowedFilesHash 记录),持久化回 guard.json——本轮审计与他者会话
|
|
892
|
+
// 声明豁免同源消费。guard 缺失(brownfield)不补建,跳过并入。
|
|
893
|
+
if (guard && Array.isArray(quickFiles) && quickFiles.filter(Boolean).length > 0) {
|
|
894
|
+
const { added } = mergeQuickBoundaryFiles(guard, quickFiles, cwd)
|
|
895
|
+
if (added.length > 0) {
|
|
896
|
+
try { writeAtomicSync(sessionGuardFile, JSON.stringify(guard, null, 2)) } catch { /* 持久化失败降级:本轮审计仍用内存合并值 */ }
|
|
897
|
+
console.log(`🛡️ quick 边界已追加: ${added.length} 个文件(累计 ${guard.allowedFiles.length} 个): ${added.join(', ')}`)
|
|
898
|
+
}
|
|
899
|
+
}
|
|
863
900
|
// 审计:仅在有 guard 时跑(brownfield 无 guard 跳过,兼容 D-003 brownfield 行为)。
|
|
864
901
|
// task-02:mergedGuard 提升到 if 外声明,供下方并发预检钩子复用与 auditQuickCompletion
|
|
865
902
|
// 同源的 guard 字段(baselineFiles/linkedChanges)。brownfield 无 guard 时保持 null,
|
|
@@ -892,6 +929,22 @@ export async function handleQuickStageCompletion({ stageName, steps, currentIdx,
|
|
|
892
929
|
if (outputText) steps[currentIdx].output = null
|
|
893
930
|
process.exit(1)
|
|
894
931
|
}
|
|
932
|
+
// P0-2(2026-09-02 跨 agent 工单):触及 src/test 的 quick --done 内置 test+lint
|
|
933
|
+
// 实测门禁——把 CLAUDE.md 规则 8 从 agent 自律下沉为 CLI 卡点(fail → step 回
|
|
934
|
+
// pending + exit 1,重跑不丢进度;纯 doc/配置与未配置命令自动跳过不阻断)。
|
|
935
|
+
const gate = await runQuickTestLintGate({
|
|
936
|
+
cwd,
|
|
937
|
+
specBase,
|
|
938
|
+
changedFiles: review.changedFiles,
|
|
939
|
+
changeName,
|
|
940
|
+
})
|
|
941
|
+
printQuickTestLintGate(gate)
|
|
942
|
+
if (gate.action === 'fail') {
|
|
943
|
+
steps[currentIdx].status = 'pending'
|
|
944
|
+
steps[currentIdx].completedAt = null
|
|
945
|
+
if (outputText) steps[currentIdx].output = null
|
|
946
|
+
process.exit(1)
|
|
947
|
+
}
|
|
895
948
|
progress.lastQuickReview = review
|
|
896
949
|
}
|
|
897
950
|
|
|
@@ -960,7 +1013,27 @@ export async function handleQuickStageCompletion({ stageName, steps, currentIdx,
|
|
|
960
1013
|
}
|
|
961
1014
|
|
|
962
1015
|
if (!qlId) {
|
|
963
|
-
//
|
|
1016
|
+
// 坑 platform-takeover-phantom-progress-db 同日变体:guard 缺失时兜底**优先复用启动
|
|
1017
|
+
// 分配的 ql-ID**(进度库 changes.quicklog_id,quick 启动时 stage.js 回填)——落码
|
|
1018
|
+
// 注释/模块文档的 ql-ID 是启动时就给出的,补分配新号必然制造引用劈叉(同一次会话
|
|
1019
|
+
// 两个 ID、两份 QUICKLOG 各半)。ID 的条目不在当前 specBase(启动/完成分裂库形态)
|
|
1020
|
+
// → 用原 ID 补建骨架,完成态落在同一 ID 上。库中也无(真 brownfield/极老会话)才
|
|
1021
|
+
// 补分配。
|
|
1022
|
+
try {
|
|
1023
|
+
const dbQlId = pm.getQuicklogId(cwd, changeName)
|
|
1024
|
+
if (dbQlId) {
|
|
1025
|
+
const re = await appendQuicklogEntryWithId(specBase, gitUser, dbQlId, {
|
|
1026
|
+
description: guard?.taskDescription || '(guard 缺失补建)',
|
|
1027
|
+
linkedChanges,
|
|
1028
|
+
allowedFiles: Array.isArray(guard?.allowedFiles) ? guard.allowedFiles : [],
|
|
1029
|
+
})
|
|
1030
|
+
qlId = dbQlId
|
|
1031
|
+
console.log(`📝 QUICKLOG 兜底补写复用启动 ql-ID: ${qlId}(guard 缺失,ID 取自进度库 quicklog_id${re.existed ? '' : ',条目已补建'})`)
|
|
1032
|
+
}
|
|
1033
|
+
} catch { /* 读取/补建失败退回补分配,不阻断 */ }
|
|
1034
|
+
}
|
|
1035
|
+
if (!qlId) {
|
|
1036
|
+
// 无 ql-ID(库中也未回填,真 brownfield):补分配后立即完成,不阻断。
|
|
964
1037
|
try {
|
|
965
1038
|
const alloc = await allocateQuicklogEntry(specBase, gitUser, {
|
|
966
1039
|
description: guard?.taskDescription || '(补分配)',
|
|
@@ -1502,7 +1575,9 @@ export async function handleScanStageCompleted({ stageName, currentIdx, cwd, pro
|
|
|
1502
1575
|
try { unlinkSync(platformOptsFile) } catch {}
|
|
1503
1576
|
|
|
1504
1577
|
// CLI 层 post-check(替代旧的简单检查)
|
|
1505
|
-
const { runScanPostCheck, printScanPostCheckResult, formatStructuredResult, writeStructuredResult } = await import('../scan-postcheck.js')
|
|
1578
|
+
const { runScanPostCheck, printScanPostCheckResult, formatStructuredResult, writeStructuredResult, stampScanDocHeaders } = await import('../scan-postcheck.js')
|
|
1579
|
+
// ② frontmatter CLI 盖章(2026-09-05,幂等兜底——正常已在 scanFinalize / quick postcheck 盖过)
|
|
1580
|
+
stampScanDocHeaders({ cwd, specDir: platformOpts.specRoot, mode: stageData.scanProfile?.mode })
|
|
1506
1581
|
const postResult = runScanPostCheck({
|
|
1507
1582
|
cwd,
|
|
1508
1583
|
specDir: platformOpts.specRoot,
|
|
@@ -1585,7 +1660,9 @@ export async function handleScanStageCompleted({ stageName, currentIdx, cwd, pro
|
|
|
1585
1660
|
|
|
1586
1661
|
// 非 platform 模式 scan 也做轻量 post-check + 结构化输出
|
|
1587
1662
|
if (stageName === 'scan' && !platformOpts.specRoot && !platformOpts.runtimeRoot) {
|
|
1588
|
-
const { runScanPostCheck, printScanPostCheckResult, formatStructuredResult, writeStructuredResult } = await import('../scan-postcheck.js')
|
|
1663
|
+
const { runScanPostCheck, printScanPostCheckResult, formatStructuredResult, writeStructuredResult, stampScanDocHeaders } = await import('../scan-postcheck.js')
|
|
1664
|
+
// ② frontmatter CLI 盖章(2026-09-05,幂等兜底)
|
|
1665
|
+
stampScanDocHeaders({ cwd, specDir: null, mode: stageData.scanProfile?.mode })
|
|
1589
1666
|
const postResult = runScanPostCheck({ cwd, specDir: null, outputText, scanProfile: stageData.scanProfile || null })
|
|
1590
1667
|
printScanPostCheckResult(postResult)
|
|
1591
1668
|
// 结构化结果写入 .sillyspec/.runtime/
|
package/src/run/complete.js
CHANGED
|
@@ -21,12 +21,13 @@ import { existsSync, readFileSync, mkdirSync, writeFileSync, appendFileSync } fr
|
|
|
21
21
|
import { writeAtomicSync } from '../fs-atomic.js'
|
|
22
22
|
import { withFileLock } from '../quicklog.js'
|
|
23
23
|
import { triggerSync, WAIT_MARKER_RE, getStageSteps, formatWaitOptions, resolveRuntimeRoot, getOrCreateMultiRepoContext, resolveChangeDir } from './shared.js'
|
|
24
|
-
import { executeScanPreflight, executeScanPostcheck, computeScanProfile } from './scan-profile.js'
|
|
24
|
+
import { executeScanPreflight, executeScanPostcheck, computeScanProfile, executeScanDetectProjects, executeScanResumeCheck, executeScanFinalize } from './scan-profile.js'
|
|
25
25
|
import { executePlanPostcheck as runPlanPostcheckLib } from '../stages/plan-postcheck.js'
|
|
26
26
|
import { outputStep, collectStageWaitHistory } from './prompt.js'
|
|
27
27
|
import { enforceDepsGate, enforceReviewJsonGate, enforceSymbolImpactGate, warnMissingUiPrototype, completeStageGates, readDesignScale } from './gates.js'
|
|
28
28
|
import { handleArchiveConfirmStep, handlePlanGeneratePlanStep, handleScanProjectListStep, handleWorkflowPostCheck, handleQuickStageCompletion, handleExecuteWaveArtifact } from './complete-handlers.js'
|
|
29
29
|
import { formatExecuteSummary } from '../worktree-apply.js'
|
|
30
|
+
import { validateDecisionModuleRefs } from '../design-facts.js'
|
|
30
31
|
import { isEndToEndTaskText } from '../change-risk-profile.js'
|
|
31
32
|
import { deriveTitleFromLinkedChange } from '../quicklog.js'
|
|
32
33
|
import { gitQuiet } from '../git-helper.js'
|
|
@@ -79,7 +80,7 @@ export function resolveWaitingStepWithAnswer(steps, doneAnswer, nowStr) {
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
export async function completeStep(pm, progress, stageName, cwd, outputText, inputText = null, options = {}) {
|
|
82
|
-
const { printNext = true, confirm = false, changeName, platformOpts = {}, nonInteractive = false, isForceBaseline = false, isAllowNew = false, isAllowDelete = false } = options
|
|
83
|
+
const { printNext = true, confirm = false, changeName, platformOpts = {}, nonInteractive = false, isForceBaseline = false, isAllowNew = false, isAllowDelete = false, quickFiles = [] } = options
|
|
83
84
|
// specRoot(平台) > specDriftAnchor(worktree 漂移锚定主仓) > cwd/.sillyspec(本地)——
|
|
84
85
|
// 与 prompt.js resolvePromptSpecBase 同序:--done 收尾的 user-inputs.md/超长 artifact 落盘
|
|
85
86
|
// 必须与 prompt 渲染同一根,否则写进 worktree 副本目录、随 cleanup 整目录删除。
|
|
@@ -279,6 +280,37 @@ export async function completeStep(pm, progress, stageName, cwd, outputText, inp
|
|
|
279
280
|
await enforceSymbolImpactGate(stageName, changeName, steps[currentIdx]?.name, specBase)
|
|
280
281
|
// UI 原型软提醒(非阻断):brainstorm 收尾步 design.md 命中前端文件但无 prototype → 提示用户可否决
|
|
281
282
|
warnMissingUiPrototype(stageName, changeName, steps[currentIdx]?.name, specBase)
|
|
283
|
+
// 决策模块域核验硬门(task-02 接线 design-facts,FR-02/D-002):brainstorm「生成规范文件」步
|
|
284
|
+
// --done 时核验 decisions.md 模块域引用。ERROR(decision_module_ref_invalid,消息已内嵌前缀)
|
|
285
|
+
// = 模块幻觉/书写错误 → fail-closed exit 1(进度不推进,步骤保持 pending);WARNING
|
|
286
|
+
// (decision_module_domain_gap 声明×实改差异)→ warn 放行留人工裁量;skipped(无决策文件/
|
|
287
|
+
// 无 _module-map.yaml 索引)→ 单行 info 放行(无索引不误拦)。fail-soft:核验自身异常 →
|
|
288
|
+
// fail-open(warn 留痕后放行——门禁代码缺陷不应误拦真实完成,与「无索引跳过」同向)。
|
|
289
|
+
// project 解析与 handleWorkflowPostCheck 同链:progress.project(平台模式真实项目名)>
|
|
290
|
+
// steps[idx].project > null(brainstorm 非 perProject 展开,后两位常规为空)。
|
|
291
|
+
if (stageName === 'brainstorm' && steps[currentIdx]?.name?.includes('生成规范文件') && changeName) {
|
|
292
|
+
try {
|
|
293
|
+
const _dmProject = progress?.project || steps[currentIdx]?.project || null
|
|
294
|
+
const _dmResult = validateDecisionModuleRefs({
|
|
295
|
+
changeDir: join(specBase, 'changes', changeName),
|
|
296
|
+
specRoot: specBase,
|
|
297
|
+
project: _dmProject,
|
|
298
|
+
})
|
|
299
|
+
if ((_dmResult.errors || []).length > 0) {
|
|
300
|
+
console.error(`❌ ── 决策模块域核验阻断(本次 --done 未完成,进度未推进)──`)
|
|
301
|
+
for (const _dmErr of _dmResult.errors) console.error(` • ${_dmErr}`)
|
|
302
|
+
console.error(` 修复:更正 decisions.md 对应条目的「模块域」字段(模块 ID 取自 docs/${_dmProject || '<项目>'}/modules/_module-map.yaml),或以 NEW:<名> 前缀声明新模块后重跑:`)
|
|
303
|
+
console.error(` sillyspec run brainstorm --done${changeName ? ` --change ${changeName}` : ''} --output "修复说明"`)
|
|
304
|
+
process.exit(1)
|
|
305
|
+
}
|
|
306
|
+
for (const _dmWarn of (_dmResult.warnings || [])) console.warn(` ⚠️ ${_dmWarn}`)
|
|
307
|
+
if (_dmResult.skipped) {
|
|
308
|
+
console.log(`ℹ️ [decision_module_check_skipped] ${_dmResult.skipped}`)
|
|
309
|
+
}
|
|
310
|
+
} catch (_dmEx) {
|
|
311
|
+
console.warn(` ⚠️ 决策模块域核验自身异常,fail-open 放行(不误拦本次完成):${_dmEx && _dmEx.message ? _dmEx.message : _dmEx}`)
|
|
312
|
+
}
|
|
313
|
+
}
|
|
282
314
|
|
|
283
315
|
// ── noAI 步骤硬门(坑 noai-done-bypass):noAI 步骤的确定性校验不可被 --done 绕过 ──
|
|
284
316
|
// 正常路径 agent 跑 `run <stage>` 推进到 noAI step 时,runStage 自动执行 _cliAction
|
|
@@ -296,6 +328,12 @@ export async function completeStep(pm, progress, stageName, cwd, outputText, inp
|
|
|
296
328
|
await executeScanPreflight(cwd, platformOpts, stageData.scanProfile || computeScanProfile(cwd, platformOpts))
|
|
297
329
|
} else if (_cliAction === 'scanPostcheck') {
|
|
298
330
|
await executeScanPostcheck(cwd, platformOpts, stageData.scanProfile || computeScanProfile(cwd, platformOpts))
|
|
331
|
+
} else if (_cliAction === 'scanDetectProjects') {
|
|
332
|
+
await executeScanDetectProjects(cwd, platformOpts)
|
|
333
|
+
} else if (_cliAction === 'scanResumeCheck') {
|
|
334
|
+
await executeScanResumeCheck(cwd, platformOpts)
|
|
335
|
+
} else if (_cliAction === 'scanFinalize') {
|
|
336
|
+
await executeScanFinalize(cwd, platformOpts)
|
|
299
337
|
} else if (_cliAction === 'planPostcheck') {
|
|
300
338
|
await runPlanPostcheckLib({ cwd, specRoot: platformOpts?.specRoot, resolveChangeDir, progress })
|
|
301
339
|
} else {
|
|
@@ -401,7 +439,7 @@ export async function completeStep(pm, progress, stageName, cwd, outputText, inp
|
|
|
401
439
|
return { stageCompleted: false, currentIdx, nextPendingIdx: -1 }
|
|
402
440
|
}
|
|
403
441
|
// quick 收尾(W6 Step6b 抽至 complete-handlers.js handleQuickStageCompletion)
|
|
404
|
-
await handleQuickStageCompletion({ stageName, steps, currentIdx, cwd, progress, changeName, specBase, outputText, confirm, isForceBaseline, isAllowNew, isAllowDelete, platformOpts, pm })
|
|
442
|
+
await handleQuickStageCompletion({ stageName, steps, currentIdx, cwd, progress, changeName, specBase, outputText, confirm, isForceBaseline, isAllowNew, isAllowDelete, platformOpts, pm, quickFiles })
|
|
405
443
|
|
|
406
444
|
// ── reopen --done 回填(坑 brainstorm-reopen-step-state-desync)──
|
|
407
445
|
// nextPendingIdx === -1 且无 waiting,说明要进阶段完成分支。此时若存在 stale 步骤
|
|
@@ -507,6 +545,13 @@ export async function completeStep(pm, progress, stageName, cwd, outputText, inp
|
|
|
507
545
|
console.log(`\n👉 下一步:sillyspec run verify${changeName ? ` --change ${changeName}` : ''}(验证通过后才能归档)`)
|
|
508
546
|
}
|
|
509
547
|
} else if (stageName === 'archive') {
|
|
548
|
+
// 机械暂存 CLI 化(2026-09-05 全流程审计):原步骤 6 的 3 条固定路径 git add agent 指令
|
|
549
|
+
// 改为完成时 CLI 直做(未变更路径 git add 是无害 no-op)。平台模式跳过(specRoot 在源码仓外)。
|
|
550
|
+
if (!platformOpts?.specRoot && !platformOpts?.runtimeRoot) {
|
|
551
|
+
const { stageArchiveArtifacts } = await import('../git-helper.js')
|
|
552
|
+
const r = stageArchiveArtifacts(cwd)
|
|
553
|
+
if (r.staged.length > 0) console.log(` 📦 已暂存归档产物(${r.staged.length} 个路径,未提交,由统一提交工具处理)`)
|
|
554
|
+
}
|
|
510
555
|
console.log('\n👉 归档完成!现在可以提交了:git commit -m "..."')
|
|
511
556
|
} else if (stageName === 'verify') {
|
|
512
557
|
// verify 的"验证通过"提示延后到下方 validator 通过后才打印,
|
|
@@ -1081,7 +1126,15 @@ export async function continueStep(pm, progress, stageName, cwd, answer, options
|
|
|
1081
1126
|
const currentStep = stageData.steps[currentIdx]
|
|
1082
1127
|
const isRepeatableWait = currentStepDef.repeatableWait === true || currentStep.repeatableWait === true
|
|
1083
1128
|
const requiresWait = currentStepDef.requiresWait === true || currentStep.requiresWait === true
|
|
1084
|
-
|
|
1129
|
+
// conditionalWait 并入「回当前步」(坑 continue-conditionalwait-premature-complete,2026-09-01
|
|
1130
|
+
// 实证):waitStep 的提示对 requiresWait/conditionalWait 两类同文——「--continue --answer 后本步
|
|
1131
|
+
// 回到待执行,完成动作后需再 --done 收尾」,但此处谓词漏了 conditionalWait。审查计划
|
|
1132
|
+
// (conditionalWait、无 repeatableWait)被 --answer 直接收尾 completed,agent 手里已备好的
|
|
1133
|
+
// --done(本步真实产出摘要)随即落到下一步上:multi-agent-platform 2026-09-01-session-group-chat
|
|
1134
|
+
// plan 阶段 --continue 后 2 秒 --done 把「生成 TaskCard」假完成(08-31 两变更同形态 ×2),
|
|
1135
|
+
// 靠 --reopen --from-step 4 重做浪费一轮。对齐提示语义:conditionalWait 同样回 pending。
|
|
1136
|
+
const isConditionalWait = currentStepDef.conditionalWait === true || currentStep.conditionalWait === true
|
|
1137
|
+
const shouldReturnToCurrentStep = isRepeatableWait || requiresWait || isConditionalWait
|
|
1085
1138
|
|
|
1086
1139
|
const now = new Date().toLocaleString('zh-CN', { hour12: false })
|
|
1087
1140
|
const prevOutput = currentStep.output || ''
|
|
@@ -1136,7 +1189,7 @@ export async function continueStep(pm, progress, stageName, cwd, answer, options
|
|
|
1136
1189
|
console.warn('⚠️ user-inputs.md 追加失败(不阻断):', e.message)
|
|
1137
1190
|
}
|
|
1138
1191
|
|
|
1139
|
-
// shouldReturnToCurrentStep: 回到当前步骤继续执行(repeatable=多轮探索,requiresWait=确认后执行动作)
|
|
1192
|
+
// shouldReturnToCurrentStep: 回到当前步骤继续执行(repeatable=多轮探索,requiresWait/conditionalWait=确认后执行动作)
|
|
1140
1193
|
if (shouldReturnToCurrentStep) {
|
|
1141
1194
|
console.log(`\n🔁 Step ${currentIdx + 1}/${stageData.steps.length} 已收到用户输入,回到当前步骤继续执行。`)
|
|
1142
1195
|
if (isRepeatableWait) {
|
package/src/run/gates.js
CHANGED
|
@@ -666,6 +666,56 @@ export async function runStageCompletionGates({ stageName, cwd, changeName, plat
|
|
|
666
666
|
const { runVerifyRequiredEvidenceCheck, printVerifyRequiredEvidenceCheck } = await import('../verify-postcheck.js')
|
|
667
667
|
const evidenceCheck = runVerifyRequiredEvidenceCheck({ cwd, specBase, changeName })
|
|
668
668
|
printVerifyRequiredEvidenceCheck(evidenceCheck)
|
|
669
|
+
// ── target_files 声明 ↔ 实际改动 对账(task-05 / ir-stage-p3a:②ERROR 阻断 / ③WARNING 放行)──
|
|
670
|
+
// 「计划落空」(task 卡声明没做)此前全盲区:review.json changedFiles 是 agent 手写不能当
|
|
671
|
+
// 事实源,execute 的 scope creep 只有 symbol-impact 试图抓。reconcileTargetFiles 用 git 三源
|
|
672
|
+
// 口径亲自取 actual,与 plan 阶段 task 卡 target_files 声明做三类差集:②类(声明未做)在场
|
|
673
|
+
// 即阻断——verify 的语义是「按计划交付且客观核验」,声明没做不能盖章归档;③类(做了没
|
|
674
|
+
// 声明=scope creep)启发式噪音面大(并行 WIP 剔除后仍可能有工具产物),WARNING 放行留审计;
|
|
675
|
+
// skipped/degraded(无 task 卡 / 全无声明 / git 不可用)降级不误红(存量变更零红门禁)。
|
|
676
|
+
// 阻断形态照 runVerifyTestCheck 先例:逐条列 task + path + 修复提示 + rollbackCompletionAndReturn。
|
|
677
|
+
const { reconcileTargetFiles } = await import('../verify-postcheck.js')
|
|
678
|
+
const reconcileRuntimeRoot = resolveRuntimeRoot(platformOpts, specBase)
|
|
679
|
+
const reconcileCheck = reconcileTargetFiles({
|
|
680
|
+
cwd, specBase, changeName,
|
|
681
|
+
// runtimeRoot 口径与上方 parity 对账同源(B3 apply-pathspec 兜底源在此根下;平台模式下
|
|
682
|
+
// specBase 与 .runtime 分离,不传会读不到兜底清单 → 假降级)
|
|
683
|
+
runtimeRoot: reconcileRuntimeRoot,
|
|
684
|
+
})
|
|
685
|
+
const reconcileEnvelope = buildReconcileTargetFilesEnvelope(reconcileCheck)
|
|
686
|
+
const reconcileBlocked = printReconcileTargetFilesCheck(reconcileCheck, reconcileEnvelope)
|
|
687
|
+
// 结果落盘(design Wave 2 承诺:对齐 .runtime/verify-runs/<ts>/ 先例)——五状态全落(含
|
|
688
|
+
// 放行态),fail-soft 不影响 gate 判定;②类阻断回执同样留档供平台/审计消费
|
|
689
|
+
writeReconcileRunResult({ runtimeRoot: reconcileRuntimeRoot, changeName, envelope: reconcileEnvelope, result: reconcileCheck })
|
|
690
|
+
if (reconcileBlocked) {
|
|
691
|
+
return await rollbackCompletionAndReturn(pm, progress, stageData, steps, currentIdx, cwd, changeName, platformOpts)
|
|
692
|
+
}
|
|
693
|
+
// ── verify-result.md 探针预填段一致性抽查(task-03 / ir-stage-p3b D-002@v1 方案A)──
|
|
694
|
+
// 「#### 探针 N」机械预填段(verify-probes --init 生成)长在 agent 可编辑的正文里,其防篡改
|
|
695
|
+
// 基准是正文锚点而非 verify-facts.json(删底稿绕不过防护)。checkProbeConsistency 重跑只读
|
|
696
|
+
// 探针与正文锚点对账,分级(D-003):probe1/probe6 不符 = ERROR → 阻断回滚(正文预填段疑似
|
|
697
|
+
// 被篡改);probe3/probe5 环境敏感维度 + R-06 HEAD 前进降级 = WARNING → 放行告警(drift);
|
|
698
|
+
// skipped(存量旧格式报告/无 changeName)/degraded(重跑异常 fail-soft)→ 放行提示。
|
|
699
|
+
// 接线形态照上方 P3a reconcile 先例:envelope + print(ERROR 时 console.error 逐条 mismatch +
|
|
700
|
+
// supportedFixes)+ verify-runs 落盘 + rollbackCompletionAndReturn。
|
|
701
|
+
const { checkProbeConsistency } = await import('../verify-postcheck.js')
|
|
702
|
+
const probeCheck = checkProbeConsistency({
|
|
703
|
+
// 四参与 reconcile 同源取值:cwd/specBase/changeName 原样透传;runtimeRoot 复用上方
|
|
704
|
+
// reconcileRuntimeRoot(resolveRuntimeRoot(platformOpts, specBase))——checkProbeConsistency
|
|
705
|
+
// 的锚点产物实际都在 changeDir,此参为统一传参签名对齐预留,口径一处定义不二算
|
|
706
|
+
cwd, specBase, changeName,
|
|
707
|
+
runtimeRoot: reconcileRuntimeRoot,
|
|
708
|
+
})
|
|
709
|
+
const probeEnvelope = buildProbeConsistencyEnvelope(probeCheck)
|
|
710
|
+
const probeBlocked = printProbeConsistencyCheck(probeCheck, probeEnvelope)
|
|
711
|
+
// 结果落盘(对齐 writeReconcileRunResult 先例):独立文件 probe-consistency-result.json——
|
|
712
|
+
// 与 reconcile-result.json 同 gate 运行同目录组织(verify-runs/<ts>/),但不并入后者:
|
|
713
|
+
// reconcile-result.json 的 schema 已被 P3a 消费方锁定,塞探针字段(读改写/扩参)只会引入
|
|
714
|
+
// 两检查间耦合;各写各的回执、按文件名订阅更干净。fail-soft 不影响 gate 判定
|
|
715
|
+
writeProbeConsistencyRunResult({ runtimeRoot: reconcileRuntimeRoot, changeName, envelope: probeEnvelope, result: probeCheck })
|
|
716
|
+
if (probeBlocked) {
|
|
717
|
+
return await rollbackCompletionAndReturn(pm, progress, stageData, steps, currentIdx, cwd, changeName, platformOpts)
|
|
718
|
+
}
|
|
669
719
|
// ── module-impact 死信探针(blocking,债单 D-1/D-5):更新结果表 pending/待办行 → 阻断 verify ──
|
|
670
720
|
// 与 archive 移动前校验(extractPendingDocSyncRows)同一口径,把死信号从 archive 提前到 verify:
|
|
671
721
|
// agent 在 verify 阶段就须完成文档同步并回填 done/skipped,而非拖到归档被拦(修复 perf-remediation
|
|
@@ -726,7 +776,7 @@ export async function runStageCompletionGates({ stageName, cwd, changeName, plat
|
|
|
726
776
|
if (['brainstorm', 'plan', 'execute'].includes(stageName)) {
|
|
727
777
|
try {
|
|
728
778
|
const { classifyReviewTier } = await import('../review-tier.js')
|
|
729
|
-
const {
|
|
779
|
+
const { validateStageReviewWithAutoRefresh, getLatestStageReviewRunId, printStageReviewResult, generateStageReviewRunId, stageReviewMarkerPath } = await import('../stage-review.js')
|
|
730
780
|
const effectiveSpecBase = platformOpts?.specRoot || specBase
|
|
731
781
|
const reviewChangeDir = resolveChangeDir(cwd, progress, platformOpts?.specRoot)
|
|
732
782
|
const designPath = reviewChangeDir ? join(reviewChangeDir, 'design.md') : null
|
|
@@ -758,7 +808,16 @@ export async function runStageCompletionGates({ stageName, cwd, changeName, plat
|
|
|
758
808
|
: stageName === 'plan' ? 'plan'
|
|
759
809
|
: 'acceptance'
|
|
760
810
|
const searchDirs = [effectiveSpecBase, reviewChangeDir, cwd].filter(Boolean)
|
|
761
|
-
|
|
811
|
+
// docHash 失配自动刷新(坑 stage-review-refresh-hash-manual-forget,2026-09-04 ③):
|
|
812
|
+
// 主文档(design/plan.md)改版后忘跑 --refresh-hash 不再拦一轮——gate 机械重算放行
|
|
813
|
+
// (verdict 保留 + reviewerNotes 审计行 + 控制台留痕);主文档缺失/schema/verdict=fail
|
|
814
|
+
// 不在自动刷新范围,照常 fail-closed。
|
|
815
|
+
const gated = validateStageReviewWithAutoRefresh({ stage: stageName, reviewType, runtimeRoot, reviewRunId, searchDirs, autoRefresh: true })
|
|
816
|
+
if (gated.autoRefreshed) {
|
|
817
|
+
console.warn(`\n🔄 stage review docHash 失配已自动刷新(主文档改版后机械重算,verdict/checklist 保留——结论是否仍适用于新文档需人工确认)`)
|
|
818
|
+
console.warn(` 已就地更新: ${gated.refreshedPath}`)
|
|
819
|
+
}
|
|
820
|
+
const reviewResult = gated.result
|
|
762
821
|
printStageReviewResult(reviewResult, { stage: stageName, reviewRunId, runtimeRoot, changeName })
|
|
763
822
|
if (!reviewResult.ok) {
|
|
764
823
|
return await rollbackCompletionAndReturn(pm, progress, stageData, steps, currentIdx, cwd, changeName, platformOpts)
|
|
@@ -1169,6 +1228,278 @@ export function filterStaleBaselineOverlap(overlap, dirtySet, foreignDeclared) {
|
|
|
1169
1228
|
return (overlap || []).filter(f => dirtySet?.has(f) && !(foreignDeclared?.has(f)))
|
|
1170
1229
|
}
|
|
1171
1230
|
|
|
1231
|
+
/**
|
|
1232
|
+
* target_files 对账结果 → 诊断信封(task-05 接线配套)。
|
|
1233
|
+
*
|
|
1234
|
+
* verify 块既有五项检查是「单结果对象 + print 函数 + 状态判定」形态(runVerifyTestCheck 先例),
|
|
1235
|
+
* 无 scan-postcheck 那种 checks 数组聚合结构,故信封不进数组、字段命名对齐 scan-postcheck 的
|
|
1236
|
+
* checks 条目(name/severity/detail/evidence/supportedFixes)——机器可路由口径跨模块一致。
|
|
1237
|
+
* severity:②类阻断=error(产物级阻断而非流程崩溃,不取 critical);③类与降级=warning;ok=info。
|
|
1238
|
+
* evidence 携带三类清单计数 + actual 形态与源明细(③类误报排查先看 sources 归因)。
|
|
1239
|
+
* code:五状态→四 code 的机器路由键(reconcile_missing_declared / reconcile_undeclared_file /
|
|
1240
|
+
* reconcile_skipped / reconcile_ok,design 接口定义),写盘与平台消费按 code 分支。
|
|
1241
|
+
*
|
|
1242
|
+
* @param {object} r reconcileTargetFiles 返回值
|
|
1243
|
+
* @returns {{ code: string, name: string, severity: string, detail: string, evidence: object, supportedFixes: string[] }}
|
|
1244
|
+
*/
|
|
1245
|
+
export function buildReconcileTargetFilesEnvelope(r) {
|
|
1246
|
+
const severity = r.status === 'missing_declared' ? 'error'
|
|
1247
|
+
: (r.status === 'ok' ? 'info' : 'warning')
|
|
1248
|
+
// 修复提示按状态分级给「可执行」动作:②类=干活或改声明;③类=补声明或回退;降级=指引补声明
|
|
1249
|
+
const supportedFixes = []
|
|
1250
|
+
if (r.status === 'missing_declared') {
|
|
1251
|
+
supportedFixes.push('完成声明的工作:把上方清单中 task 卡 target_files 声明的文件真正改出来(NEW: 声明的新建文件要先创建)')
|
|
1252
|
+
supportedFixes.push('或修正声明:编辑 tasks/task-NN.md 的 target_files,移除不再交付的路径(改声明须与该 task 的 review 结论一致,不得为过门而删声明)')
|
|
1253
|
+
} else if (r.status === 'undeclared') {
|
|
1254
|
+
supportedFixes.push('补声明:把上方清单文件补进对应 task 卡的 target_files(存在的文件直接写仓根相对路径)')
|
|
1255
|
+
supportedFixes.push('或回退越权改动:不属于任何 task 交付的文件应 revert(并行会话声明文件已被剔除,剩余即本变更产出)')
|
|
1256
|
+
} else if (r.status === 'skipped' || r.status === 'degraded') {
|
|
1257
|
+
supportedFixes.push('新 task 卡请声明 target_files(每条为仓根相对精确文件路径,不存在的文件加 NEW: 前缀);存量卡无声明/跨仓卡跳过属预期,无需补')
|
|
1258
|
+
}
|
|
1259
|
+
return {
|
|
1260
|
+
// code 机器路由键(审查 gap 回流,design 接口定义):五状态→四 code(skipped/degraded 同
|
|
1261
|
+
// 一个 reconcile_skipped——两者对消费方语义一致:本次无对账结论),供平台/上游按 code 分支
|
|
1262
|
+
code: r.status === 'missing_declared' ? 'reconcile_missing_declared'
|
|
1263
|
+
: r.status === 'undeclared' ? 'reconcile_undeclared_file'
|
|
1264
|
+
: (r.status === 'ok' ? 'reconcile_ok' : 'reconcile_skipped'),
|
|
1265
|
+
name: 'target_files_reconcile',
|
|
1266
|
+
severity,
|
|
1267
|
+
detail: `target_files 声明 ↔ 实际改动对账:status=${r.status}` + (r.skipReason ? `(${r.skipReason})` : ''),
|
|
1268
|
+
evidence: {
|
|
1269
|
+
matched_count: r.matched.length,
|
|
1270
|
+
missing_declared_count: r.missing.length,
|
|
1271
|
+
undeclared_count: r.undeclared.length,
|
|
1272
|
+
form: r.form,
|
|
1273
|
+
sources: r.sources,
|
|
1274
|
+
},
|
|
1275
|
+
supportedFixes,
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
/**
|
|
1280
|
+
* target_files 对账结果落盘 .runtime/verify-runs/<ts>/reconcile-result.json(审查 gap 回流)。
|
|
1281
|
+
*
|
|
1282
|
+
* design「总体方案 Wave 2」承诺「结果落盘对齐 .runtime/verify-runs/<ts>/ 先例」——console 输出
|
|
1283
|
+
* 跨进程即失忆,落盘留审计痕迹供 SillyHub/平台消费。目录命名对齐 verify-postcheck.js
|
|
1284
|
+
* writeRunResult 先例(ts=UTC 紧凑 YYYYMMDDHHmmss,与 test-result.json 同目录组织)。
|
|
1285
|
+
* fail-soft:写失败只 console.error 留痕不阻断 gate(落盘是审计附件不是证据源,与
|
|
1286
|
+
* writeRunResult 的 best-effort 同口径);五状态全落(放行态也要留档——对账跳过/降级同样
|
|
1287
|
+
* 是审计事实,下次回看才知道为什么没有差集)。
|
|
1288
|
+
*
|
|
1289
|
+
* @param {{ runtimeRoot: string, changeName: string|null, envelope: object, result: object }} opts
|
|
1290
|
+
* @returns {string|null} 成功返回落盘路径;失败返回 null
|
|
1291
|
+
*/
|
|
1292
|
+
export function writeReconcileRunResult({ runtimeRoot, changeName, envelope, result }) {
|
|
1293
|
+
try {
|
|
1294
|
+
const ts = new Date().toISOString().slice(0, 19).replace(/[-T:]/g, '')
|
|
1295
|
+
const runDir = join(runtimeRoot, 'verify-runs', ts)
|
|
1296
|
+
mkdirSync(runDir, { recursive: true })
|
|
1297
|
+
const resultPath = join(runDir, 'reconcile-result.json')
|
|
1298
|
+
// 落盘字段 snake_case 对齐 writeRunResult 的 test-result.json 机器消费口径(信封内存字段
|
|
1299
|
+
// 保持 camelCase 不动,写盘这层做一次映射)
|
|
1300
|
+
writeFileSync(resultPath, JSON.stringify({
|
|
1301
|
+
change: changeName,
|
|
1302
|
+
code: envelope.code,
|
|
1303
|
+
severity: envelope.severity,
|
|
1304
|
+
status: result.status,
|
|
1305
|
+
evidence: envelope.evidence,
|
|
1306
|
+
supported_fixes: envelope.supportedFixes,
|
|
1307
|
+
matched: result.matched,
|
|
1308
|
+
missing: result.missing,
|
|
1309
|
+
undeclared: result.undeclared,
|
|
1310
|
+
notes: result.notes,
|
|
1311
|
+
form: result.form,
|
|
1312
|
+
sources: result.sources,
|
|
1313
|
+
ran_at: new Date().toISOString(),
|
|
1314
|
+
}, null, 2) + '\n')
|
|
1315
|
+
console.log(`📄 target_files 对账结果已写入: ${resultPath}`)
|
|
1316
|
+
return resultPath
|
|
1317
|
+
} catch (e) {
|
|
1318
|
+
console.error(`⚠️ target_files 对账结果落盘失败(不影响 verify gate): ${e.message}`)
|
|
1319
|
+
return null
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
|
|
1323
|
+
/**
|
|
1324
|
+
* 打印 target_files 对账结果(task-05 接线配套的打印层)。
|
|
1325
|
+
*
|
|
1326
|
+
* reconcileTargetFiles 是纯函数无配套 print(verify-postcheck 导出消费、打印归接线方),本函数
|
|
1327
|
+
* 即其在 verify 块的打印层:②类阻断明细照 runVerifyTestCheck 的失败输出形态(状态行 + 逐条
|
|
1328
|
+
* task + path + 修复行),③类/skipped/degraded 走 console.warn(advisory 形态照
|
|
1329
|
+
* printVerifyRequiredEvidenceCheck 先例)。返回 true = ②类在场应阻断(调用方据此走
|
|
1330
|
+
* rollbackCompletionAndReturn,与 testCheck.status==='failed' 分支同形)。
|
|
1331
|
+
*
|
|
1332
|
+
* @param {object} r reconcileTargetFiles 返回值
|
|
1333
|
+
* @param {object} [envelope] 预构造信封(缺省现算;显式传入便于调用方先断言再打印)
|
|
1334
|
+
* @returns {boolean} true = 阻断(status='missing_declared')
|
|
1335
|
+
*/
|
|
1336
|
+
export function printReconcileTargetFilesCheck(r, envelope = buildReconcileTargetFilesEnvelope(r)) {
|
|
1337
|
+
// ②类(声明未做=计划落空):ERROR 阻断
|
|
1338
|
+
if (r.status === 'missing_declared') {
|
|
1339
|
+
console.error(`\n❌ target_files 对账阻断:${r.missing.length} 条「声明未做」(②类,计划落空)——声明的交付文件在实际改动中不存在。`)
|
|
1340
|
+
for (const m of r.missing) {
|
|
1341
|
+
console.error(` - ${m.task}: ${m.path}${m.isNew ? '(NEW: 声明新建,文件未创建)' : ''}`)
|
|
1342
|
+
}
|
|
1343
|
+
console.error(` evidence: matched=${envelope.evidence.matched_count} missing=${envelope.evidence.missing_declared_count} undeclared=${envelope.evidence.undeclared_count}`)
|
|
1344
|
+
for (const fix of envelope.supportedFixes) console.error(` 修复:${fix}`)
|
|
1345
|
+
console.error(` 对账口径 actual=${(r.sources || []).join(' + ') || 'n/a'};修复后重新完成 verify。`)
|
|
1346
|
+
return true
|
|
1347
|
+
}
|
|
1348
|
+
// ③类(做了没声明=scope creep):WARNING 放行,suspectTask 尽力归因随行列出
|
|
1349
|
+
if (r.status === 'undeclared') {
|
|
1350
|
+
console.warn(`\n⚠️ target_files 对账发现 ${r.undeclared.length} 个实际改动未在任何 task 卡声明(③类 scope creep,advisory 不阻断):`)
|
|
1351
|
+
for (const u of r.undeclared.slice(0, 20)) {
|
|
1352
|
+
console.warn(` - ${u.path}${u.suspectTask ? `(疑似 ${u.suspectTask} 的改动——该 task 的 review.json changedFiles 提及)` : ''}`)
|
|
1353
|
+
}
|
|
1354
|
+
if (r.undeclared.length > 20) console.warn(` …还有 ${r.undeclared.length - 20} 个`)
|
|
1355
|
+
console.warn(` evidence: matched=${envelope.evidence.matched_count} missing=${envelope.evidence.missing_declared_count} undeclared=${envelope.evidence.undeclared_count}`)
|
|
1356
|
+
for (const fix of envelope.supportedFixes) console.warn(` 提示:${fix}`)
|
|
1357
|
+
console.warn(` 对账口径 actual=${(r.sources || []).join(' + ') || 'n/a'}(③类误报先核对 sources 与并行会话剔除提示)。`)
|
|
1358
|
+
return false
|
|
1359
|
+
}
|
|
1360
|
+
// 降级(skipped/degraded):WARNING 放行,skipReason 一句话(存量卡/git 不可用,不误红)
|
|
1361
|
+
if (r.status === 'skipped' || r.status === 'degraded') {
|
|
1362
|
+
console.warn(`\n⚠️ target_files 对账${r.status === 'degraded' ? '降级' : '跳过'}(不阻断):${r.skipReason}`)
|
|
1363
|
+
return false
|
|
1364
|
+
}
|
|
1365
|
+
// ok:①交集全落地
|
|
1366
|
+
console.log(`\n✅ target_files 对账通过:${r.matched.length} 个声明文件全部落地${r.form ? `(actual 形态=${r.form})` : ''}`)
|
|
1367
|
+
for (const n of (r.notes || [])) console.log(` ℹ️ ${n}`)
|
|
1368
|
+
return false
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
/**
|
|
1372
|
+
* 探针一致性抽查结果 → 诊断信封(task-03 接线配套,形态对齐 buildReconcileTargetFilesEnvelope)。
|
|
1373
|
+
*
|
|
1374
|
+
* code 路由键(task-02 JSDoc 接线约定):mismatch+error → probe_consistency_mismatch(阻断,
|
|
1375
|
+
* 正文预填段疑似被篡改);mismatch+warning → probe_consistency_drift(probe3/probe5 环境敏感
|
|
1376
|
+
* 维度 + R-06 HEAD 前进降级,放行告警);skipped/degraded → probe_consistency_skipped(放行
|
|
1377
|
+
* 提示——两态对消费方语义一致:本次无对账结论,照 P3a 五状态→四 code 的合流先例);ok →
|
|
1378
|
+
* probe_consistency_ok。severity 分级照 reconcile 先例:阻断=error、非阻断非 ok=warning、ok=info。
|
|
1379
|
+
* evidence 携带 mismatch 计数(总/error/warning)+ subsections 在场性(task-02 返回值的诊断字段,
|
|
1380
|
+
* 判别子 D-003 排查先看它——「哪个探针子节在场」决定走逐探针对账还是 prefill 整段缺失分支)。
|
|
1381
|
+
*
|
|
1382
|
+
* @param {object} r checkProbeConsistency 返回值
|
|
1383
|
+
* @returns {{ code: string, name: string, severity: string, detail: string, evidence: object, supportedFixes: string[] }}
|
|
1384
|
+
*/
|
|
1385
|
+
export function buildProbeConsistencyEnvelope(r) {
|
|
1386
|
+
const blocked = r.status === 'mismatch' && r.severity === 'error'
|
|
1387
|
+
const drifted = r.status === 'mismatch' && !blocked
|
|
1388
|
+
const supportedFixes = []
|
|
1389
|
+
if (blocked) {
|
|
1390
|
+
supportedFixes.push('如实重生成:跑 `sillyspec verify-probes --change <变更名> --init` 重新落盘机械预填段,再基于新预填段如实补写正文结论(删改预填段过门是 Step7 防篡改纪律红线)')
|
|
1391
|
+
supportedFixes.push('若重生成后仍不符:核对 mismatch 的 expected(CLI 重跑指标)与 actual(正文锚点值)——确属环境变化(worktree 存活态/测试布局)时在 verify-result.md 注明差异原因')
|
|
1392
|
+
} else if (drifted) {
|
|
1393
|
+
supportedFixes.push('环境敏感维度漂移(probe3 测试布局 / probe5 扫描根 / probe6 HEAD 前进):跑 `sillyspec verify-probes --change <变更名> --init` 刷新预填段对齐当前环境(不阻断,留审计)')
|
|
1394
|
+
} else if (r.status === 'skipped' || r.status === 'degraded') {
|
|
1395
|
+
supportedFixes.push('新变更走 `sillyspec verify-probes --change <变更名> --init` 生成带探针预填段的骨架后再写结论;存量旧格式报告/无 changeName 跳过属预期,无需补')
|
|
1396
|
+
}
|
|
1397
|
+
return {
|
|
1398
|
+
// code 机器路由键(task-02 JSDoc):四状态→四 code,供平台/上游按 code 分支
|
|
1399
|
+
code: blocked ? 'probe_consistency_mismatch'
|
|
1400
|
+
: drifted ? 'probe_consistency_drift'
|
|
1401
|
+
: (r.status === 'ok' ? 'probe_consistency_ok' : 'probe_consistency_skipped'),
|
|
1402
|
+
name: 'probe_consistency',
|
|
1403
|
+
severity: blocked ? 'error' : (r.status === 'ok' ? 'info' : 'warning'),
|
|
1404
|
+
detail: `verify-result.md 探针预填段一致性抽查:status=${r.status}`
|
|
1405
|
+
+ (r.status === 'mismatch' ? `(${(r.mismatches || []).length} 项不符,severity=${r.severity})` : '')
|
|
1406
|
+
+ (r.skipReason ? `(${r.skipReason})` : ''),
|
|
1407
|
+
evidence: {
|
|
1408
|
+
mismatch_count: (r.mismatches || []).length,
|
|
1409
|
+
error_count: (r.mismatches || []).filter(m => m && m.severity === 'error').length,
|
|
1410
|
+
warning_count: (r.mismatches || []).filter(m => m && m.severity === 'warning').length,
|
|
1411
|
+
subsections: r.subsections ?? null,
|
|
1412
|
+
},
|
|
1413
|
+
supportedFixes,
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
/**
|
|
1418
|
+
* 探针一致性抽查结果落盘 .runtime/verify-runs/<ts>/probe-consistency-result.json(task-03)。
|
|
1419
|
+
*
|
|
1420
|
+
* 形态选型(二选一取独立文件):与 reconcile-result.json 同 gate 运行、同目录组织
|
|
1421
|
+
* (verify-runs/<ts>/,ts=UTC 紧凑 YYYYMMDDHHmmss 对齐 writeRunResult 先例),但不并入后者——
|
|
1422
|
+
* reconcile-result.json 的 schema 已被 P3a 消费方锁定,并入(读改写/扩参)引入两检查间耦合;
|
|
1423
|
+
* 独立文件各写各的回执,平台/审计按文件名订阅(与 test-result.json 同一目录约定)。
|
|
1424
|
+
* fail-soft:写失败只 console.error 留痕不阻断 gate(对齐 writeReconcileRunResult);四状态全落
|
|
1425
|
+
* (放行态同样留档——跳过/降级是审计事实,下次回看才知道为什么没有对账结论)。
|
|
1426
|
+
*
|
|
1427
|
+
* @param {{ runtimeRoot: string, changeName: string|null, envelope: object, result: object }} opts
|
|
1428
|
+
* @returns {string|null} 成功返回落盘路径;失败返回 null
|
|
1429
|
+
*/
|
|
1430
|
+
export function writeProbeConsistencyRunResult({ runtimeRoot, changeName, envelope, result }) {
|
|
1431
|
+
try {
|
|
1432
|
+
const ts = new Date().toISOString().slice(0, 19).replace(/[-T:]/g, '')
|
|
1433
|
+
const runDir = join(runtimeRoot, 'verify-runs', ts)
|
|
1434
|
+
mkdirSync(runDir, { recursive: true })
|
|
1435
|
+
const resultPath = join(runDir, 'probe-consistency-result.json')
|
|
1436
|
+
// 落盘字段 snake_case 对齐 reconcile-result.json 机器消费口径(信封内存字段保持 camelCase
|
|
1437
|
+
// 不动,写盘这层做一次映射);mismatches 逐条落盘供平台按 probe/severity 细读
|
|
1438
|
+
writeFileSync(resultPath, JSON.stringify({
|
|
1439
|
+
change: changeName,
|
|
1440
|
+
code: envelope.code,
|
|
1441
|
+
severity: envelope.severity,
|
|
1442
|
+
status: result.status,
|
|
1443
|
+
result_severity: result.severity ?? null,
|
|
1444
|
+
evidence: envelope.evidence,
|
|
1445
|
+
supported_fixes: envelope.supportedFixes,
|
|
1446
|
+
mismatches: result.mismatches || [],
|
|
1447
|
+
skip_reason: result.skipReason ?? null,
|
|
1448
|
+
subsections: result.subsections ?? null,
|
|
1449
|
+
ran_at: new Date().toISOString(),
|
|
1450
|
+
}, null, 2) + '\n')
|
|
1451
|
+
console.log(`📄 探针一致性抽查结果已写入: ${resultPath}`)
|
|
1452
|
+
return resultPath
|
|
1453
|
+
} catch (e) {
|
|
1454
|
+
console.error(`⚠️ 探针一致性抽查结果落盘失败(不影响 verify gate): ${e.message}`)
|
|
1455
|
+
return null
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
|
|
1459
|
+
/**
|
|
1460
|
+
* 打印探针一致性抽查结果(task-03 接线配套的打印层,阻断语义同 printReconcileTargetFilesCheck)。
|
|
1461
|
+
*
|
|
1462
|
+
* ERROR 级 mismatch:console.error 状态行 + 逐条 mismatch(probe/expected/actual/note,reconcile
|
|
1463
|
+
* 先例同形)+ evidence 计数 + supportedFixes,返回 true(调用方据此走 rollbackCompletionAndReturn);
|
|
1464
|
+
* WARNING 级 mismatch:console.warn 同形明细返回 false 放行;skipped/degraded:一句 skipReason 放行
|
|
1465
|
+
* (对齐 reconcile 降级分支形态);ok:静默返回 false(task-02 JSDoc 接线约定「'ok' → 静默」——
|
|
1466
|
+
* 正文锚点全符是常态,不刷存在感)。
|
|
1467
|
+
*
|
|
1468
|
+
* @param {object} r checkProbeConsistency 返回值
|
|
1469
|
+
* @param {object} [envelope] 预构造信封(缺省现算;显式传入便于调用方先断言再打印)
|
|
1470
|
+
* @returns {boolean} true = 阻断(status='mismatch' 且 severity='error')
|
|
1471
|
+
*/
|
|
1472
|
+
export function printProbeConsistencyCheck(r, envelope = buildProbeConsistencyEnvelope(r)) {
|
|
1473
|
+
// ERROR 级 mismatch:正文预填段与 CLI 重跑事实不符,疑似篡改 → 阻断
|
|
1474
|
+
if (r.status === 'mismatch' && r.severity === 'error') {
|
|
1475
|
+
console.error(`\n❌ 探针一致性抽查阻断:${(r.mismatches || []).length} 项与 CLI 重跑事实不符(其中 ERROR 级 ${envelope.evidence.error_count} 项)——verify-result.md 探针预填段疑似被篡改。`)
|
|
1476
|
+
for (const m of (r.mismatches || [])) {
|
|
1477
|
+
console.error(` - ${m.probe}: 重跑 ${JSON.stringify(m.expected)} vs 正文 ${JSON.stringify(m.actual)}(${m.severity})——${m.note}`)
|
|
1478
|
+
}
|
|
1479
|
+
console.error(` evidence: mismatches=${envelope.evidence.mismatch_count}(error=${envelope.evidence.error_count} warning=${envelope.evidence.warning_count})subsections=${JSON.stringify(envelope.evidence.subsections)}`)
|
|
1480
|
+
for (const fix of envelope.supportedFixes) console.error(` 修复:${fix}`)
|
|
1481
|
+
console.error(` 对比基准是正文锚点(删 verify-facts.json 绕不过防护);如实重生成预填段后重新完成 verify。`)
|
|
1482
|
+
return true
|
|
1483
|
+
}
|
|
1484
|
+
// WARNING 级 mismatch:环境敏感维度漂移 → 放行告警
|
|
1485
|
+
if (r.status === 'mismatch') {
|
|
1486
|
+
console.warn(`\n⚠️ 探针一致性抽查发现 ${(r.mismatches || []).length} 项漂移(环境敏感维度,advisory 不阻断):`)
|
|
1487
|
+
for (const m of (r.mismatches || [])) {
|
|
1488
|
+
console.warn(` - ${m.probe}: 重跑 ${JSON.stringify(m.expected)} vs 正文 ${JSON.stringify(m.actual)}——${m.note}`)
|
|
1489
|
+
}
|
|
1490
|
+
console.warn(` evidence: mismatches=${envelope.evidence.mismatch_count}(error=${envelope.evidence.error_count} warning=${envelope.evidence.warning_count})`)
|
|
1491
|
+
for (const fix of envelope.supportedFixes) console.warn(` 提示:${fix}`)
|
|
1492
|
+
return false
|
|
1493
|
+
}
|
|
1494
|
+
// 降级(skipped/degraded):放行,skipReason 一句话(存量旧报告/重跑异常,不误红)
|
|
1495
|
+
if (r.status === 'skipped' || r.status === 'degraded') {
|
|
1496
|
+
console.warn(`\n⚠️ 探针一致性抽查${r.status === 'degraded' ? '降级' : '跳过'}(不阻断):${r.skipReason}`)
|
|
1497
|
+
return false
|
|
1498
|
+
}
|
|
1499
|
+
// ok:①正文锚点与重跑全符——静默放行
|
|
1500
|
+
return false
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1172
1503
|
/**
|
|
1173
1504
|
* verify 服务进程回收(verify --done 收尾调用)。
|
|
1174
1505
|
*
|