@paths.design/caws-cli 11.1.7 → 11.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +55 -58
- package/dist/init/hook-packs/manifest-claude-code.d.ts +1 -1
- package/dist/init/hook-packs/manifest-claude-code.d.ts.map +1 -1
- package/dist/init/hook-packs/manifest-claude-code.js +260 -2
- package/dist/init/hook-packs/manifest-claude-code.js.map +1 -1
- package/dist/shell/binding/resolve-binding.d.ts.map +1 -1
- package/dist/shell/binding/resolve-binding.js +105 -1
- package/dist/shell/binding/resolve-binding.js.map +1 -1
- package/dist/shell/binding/types.d.ts +47 -3
- package/dist/shell/binding/types.d.ts.map +1 -1
- package/dist/shell/command-metadata.d.ts +93 -0
- package/dist/shell/command-metadata.d.ts.map +1 -0
- package/dist/shell/command-metadata.js +687 -0
- package/dist/shell/command-metadata.js.map +1 -0
- package/dist/shell/commands/agents.d.ts +1 -2
- package/dist/shell/commands/agents.d.ts.map +1 -1
- package/dist/shell/commands/claim.d.ts +16 -0
- package/dist/shell/commands/claim.d.ts.map +1 -1
- package/dist/shell/commands/claim.js +85 -26
- package/dist/shell/commands/claim.js.map +1 -1
- package/dist/shell/commands/events.d.ts +106 -0
- package/dist/shell/commands/events.d.ts.map +1 -0
- package/dist/shell/commands/events.js +510 -0
- package/dist/shell/commands/events.js.map +1 -0
- package/dist/shell/commands/gates.d.ts +2 -2
- package/dist/shell/commands/gates.d.ts.map +1 -1
- package/dist/shell/commands/gates.js +106 -25
- package/dist/shell/commands/gates.js.map +1 -1
- package/dist/shell/commands/init.d.ts.map +1 -1
- package/dist/shell/commands/init.js +26 -0
- package/dist/shell/commands/init.js.map +1 -1
- package/dist/shell/commands/prepush.d.ts +26 -0
- package/dist/shell/commands/prepush.d.ts.map +1 -0
- package/dist/shell/commands/prepush.js +373 -0
- package/dist/shell/commands/prepush.js.map +1 -0
- package/dist/shell/commands/scope.d.ts.map +1 -1
- package/dist/shell/commands/scope.js +31 -1
- package/dist/shell/commands/scope.js.map +1 -1
- package/dist/shell/commands/specs.d.ts +44 -3
- package/dist/shell/commands/specs.d.ts.map +1 -1
- package/dist/shell/commands/specs.js +411 -15
- package/dist/shell/commands/specs.js.map +1 -1
- package/dist/shell/commands/worktree.d.ts.map +1 -1
- package/dist/shell/commands/worktree.js +51 -1
- package/dist/shell/commands/worktree.js.map +1 -1
- package/dist/shell/gates/disposition.d.ts.map +1 -1
- package/dist/shell/gates/disposition.js +43 -2
- package/dist/shell/gates/disposition.js.map +1 -1
- package/dist/shell/index.d.ts +10 -4
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +22 -2
- package/dist/shell/index.js.map +1 -1
- package/dist/shell/legacy-command-map.js +832 -0
- package/dist/shell/push-range/classify-range.d.ts +99 -0
- package/dist/shell/push-range/classify-range.d.ts.map +1 -0
- package/dist/shell/push-range/classify-range.js +155 -0
- package/dist/shell/push-range/classify-range.js.map +1 -0
- package/dist/shell/push-range/scope-match.d.ts +13 -0
- package/dist/shell/push-range/scope-match.d.ts.map +1 -0
- package/dist/shell/push-range/scope-match.js +53 -0
- package/dist/shell/push-range/scope-match.js.map +1 -0
- package/dist/shell/register.d.ts.map +1 -1
- package/dist/shell/register.js +263 -228
- package/dist/shell/register.js.map +1 -1
- package/dist/shell/registered-command-groups.js +48 -0
- package/dist/shell/rules.d.ts +19 -0
- package/dist/shell/rules.d.ts.map +1 -1
- package/dist/shell/rules.js +27 -0
- package/dist/shell/rules.js.map +1 -1
- package/dist/shell/session/resolve-session.d.ts +29 -1
- package/dist/shell/session/resolve-session.d.ts.map +1 -1
- package/dist/shell/session/resolve-session.js +817 -11
- package/dist/shell/session/resolve-session.js.map +1 -1
- package/dist/shell/session/types.d.ts +127 -1
- package/dist/shell/session/types.d.ts.map +1 -1
- package/dist/shell/session/types.js +10 -4
- package/dist/shell/session/types.js.map +1 -1
- package/dist/store/doctor-snapshot.d.ts.map +1 -1
- package/dist/store/doctor-snapshot.js +26 -0
- package/dist/store/doctor-snapshot.js.map +1 -1
- package/dist/store/events-migration.d.ts +207 -0
- package/dist/store/events-migration.d.ts.map +1 -0
- package/dist/store/events-migration.js +358 -0
- package/dist/store/events-migration.js.map +1 -0
- package/dist/store/events-store.d.ts +47 -1
- package/dist/store/events-store.d.ts.map +1 -1
- package/dist/store/events-store.js +278 -0
- package/dist/store/events-store.js.map +1 -1
- package/dist/store/git-autocommit.d.ts +46 -0
- package/dist/store/git-autocommit.d.ts.map +1 -0
- package/dist/store/git-autocommit.js +198 -0
- package/dist/store/git-autocommit.js.map +1 -0
- package/dist/store/index.d.ts +4 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +7 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/leases-store.d.ts.map +1 -1
- package/dist/store/leases-store.js +58 -0
- package/dist/store/leases-store.js.map +1 -1
- package/dist/store/rules.d.ts +53 -0
- package/dist/store/rules.d.ts.map +1 -1
- package/dist/store/rules.js +54 -0
- package/dist/store/rules.js.map +1 -1
- package/dist/store/specs-migration.d.ts +128 -0
- package/dist/store/specs-migration.d.ts.map +1 -0
- package/dist/store/specs-migration.js +481 -0
- package/dist/store/specs-migration.js.map +1 -0
- package/dist/store/specs-store.d.ts.map +1 -1
- package/dist/store/specs-store.js +14 -2
- package/dist/store/specs-store.js.map +1 -1
- package/dist/store/specs-writer.d.ts +130 -3
- package/dist/store/specs-writer.d.ts.map +1 -1
- package/dist/store/specs-writer.js +941 -102
- package/dist/store/specs-writer.js.map +1 -1
- package/dist/store/types.d.ts +6 -0
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/waivers-store.d.ts.map +1 -1
- package/dist/store/waivers-store.js +8 -1
- package/dist/store/waivers-store.js.map +1 -1
- package/dist/store/worktrees-writer.d.ts +28 -0
- package/dist/store/worktrees-writer.d.ts.map +1 -1
- package/dist/store/worktrees-writer.js +110 -12
- package/dist/store/worktrees-writer.js.map +1 -1
- package/package.json +5 -2
- package/templates/hook-packs/claude-code/CLAUDE.md +7 -1
- package/templates/hook-packs/claude-code/agent-heartbeat.sh +1 -1
- package/templates/hook-packs/claude-code/agent-register.sh +1 -1
- package/templates/hook-packs/claude-code/agent-stop.sh +1 -1
- package/templates/hook-packs/claude-code/audit.sh +1 -1
- package/templates/hook-packs/claude-code/block-dangerous.sh +1 -1
- package/templates/hook-packs/claude-code/classify_command.py +1 -1
- package/templates/hook-packs/claude-code/cwd-guard.sh +30 -0
- package/templates/hook-packs/claude-code/dispatch/post_tool_use.sh +15 -4
- package/templates/hook-packs/claude-code/dispatch/pre_tool_use.sh +10 -2
- package/templates/hook-packs/claude-code/dispatch/session_start.sh +1 -1
- package/templates/hook-packs/claude-code/dispatch/stop.sh +2 -2
- package/templates/hook-packs/claude-code/duplicate-export-check.sh +156 -0
- package/templates/hook-packs/claude-code/god-object-check.sh +102 -0
- package/templates/hook-packs/claude-code/guard-strikes.sh +1 -1
- package/templates/hook-packs/claude-code/lib/parse-input.sh +115 -1
- package/templates/hook-packs/claude-code/lib/run-handlers.sh +1 -1
- package/templates/hook-packs/claude-code/loc-delta-check.sh +91 -0
- package/templates/hook-packs/claude-code/naming-check.sh +128 -0
- package/templates/hook-packs/claude-code/plan-transcript-finalize.sh +59 -0
- package/templates/hook-packs/claude-code/plan-transcript-snapshot.sh +86 -0
- package/templates/hook-packs/claude-code/protected-paths.sh +59 -0
- package/templates/hook-packs/claude-code/quiet-merge.sh +68 -0
- package/templates/hook-packs/claude-code/reset-danger-latch.sh +1 -1
- package/templates/hook-packs/claude-code/reset-strikes.sh +1 -1
- package/templates/hook-packs/claude-code/runtime-paths.sh +1 -1
- package/templates/hook-packs/claude-code/scan-secrets.sh +98 -0
- package/templates/hook-packs/claude-code/scope-guard.sh +47 -65
- package/templates/hook-packs/claude-code/session-caws-status.sh +1 -1
- package/templates/hook-packs/claude-code/session-log.sh +1 -1
- package/templates/hook-packs/claude-code/session_log_renderer.py +956 -0
- package/templates/hook-packs/claude-code/shortcut-language-check.sh +147 -0
- package/templates/hook-packs/claude-code/worktree-guard.sh +1 -1
- package/templates/hook-packs/claude-code/worktree-write-guard.sh +1 -1
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// CAWS-MIGRATE-V10-SPECS-001 — CLI store layer for the specs migrator.
|
|
3
|
+
//
|
|
4
|
+
// Boundary:
|
|
5
|
+
// - The transformer (packages/caws-kernel/src/spec/migrate-v10.ts) is pure.
|
|
6
|
+
// - This module owns ALL filesystem I/O: scan, atomic write, durable report,
|
|
7
|
+
// post-write validation.
|
|
8
|
+
// - The shell layer (commit 4) owns flag parsing and rendering.
|
|
9
|
+
//
|
|
10
|
+
// Doctrine sources:
|
|
11
|
+
// - .caws/specs/CAWS-MIGRATE-V10-SPECS-001.yaml acceptance A8-A11 + contract
|
|
12
|
+
// spec-v10-migration-output.
|
|
13
|
+
// - non_functional.reliability: atomic per-file write; partial failures
|
|
14
|
+
// leave already-written files in v11 form (intentional — no per-batch
|
|
15
|
+
// in-memory rollback for scaling reasons).
|
|
16
|
+
//
|
|
17
|
+
// What this module does NOT do:
|
|
18
|
+
// - Read any file outside .caws/specs/ and .caws/migrations/.
|
|
19
|
+
// - Write to the events log (migrations are not lifecycle events).
|
|
20
|
+
// - Hold locks (per-file atomic write is sufficient since each spec file
|
|
21
|
+
// is independent).
|
|
22
|
+
// - Touch .caws/specs/.archive/ (active spec migration only — invariant 9).
|
|
23
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
+
}
|
|
29
|
+
Object.defineProperty(o, k2, desc);
|
|
30
|
+
}) : (function(o, m, k, k2) {
|
|
31
|
+
if (k2 === undefined) k2 = k;
|
|
32
|
+
o[k2] = m[k];
|
|
33
|
+
}));
|
|
34
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
+
}) : function(o, v) {
|
|
37
|
+
o["default"] = v;
|
|
38
|
+
});
|
|
39
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
40
|
+
var ownKeys = function(o) {
|
|
41
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
42
|
+
var ar = [];
|
|
43
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
44
|
+
return ar;
|
|
45
|
+
};
|
|
46
|
+
return ownKeys(o);
|
|
47
|
+
};
|
|
48
|
+
return function (mod) {
|
|
49
|
+
if (mod && mod.__esModule) return mod;
|
|
50
|
+
var result = {};
|
|
51
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
52
|
+
__setModuleDefault(result, mod);
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
})();
|
|
56
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
+
exports.MIGRATION_REPORT_SCHEMA_VERSION = void 0;
|
|
58
|
+
exports.runSpecsMigrateScan = runSpecsMigrateScan;
|
|
59
|
+
exports.runSpecsMigrateApply = runSpecsMigrateApply;
|
|
60
|
+
const crypto = __importStar(require("crypto"));
|
|
61
|
+
const fs = __importStar(require("fs"));
|
|
62
|
+
const path = __importStar(require("path"));
|
|
63
|
+
const yaml = __importStar(require("js-yaml"));
|
|
64
|
+
const caws_kernel_1 = require("@paths.design/caws-kernel");
|
|
65
|
+
const atomic_write_1 = require("./atomic-write");
|
|
66
|
+
const repo_root_1 = require("./repo-root");
|
|
67
|
+
const rules_1 = require("./rules");
|
|
68
|
+
// --- Public types ---------------------------------------------------------
|
|
69
|
+
/**
|
|
70
|
+
* Schema_version 1 of the durable migration report.
|
|
71
|
+
* Stable contract per contract spec-v10-migration-output.
|
|
72
|
+
*/
|
|
73
|
+
exports.MIGRATION_REPORT_SCHEMA_VERSION = 1;
|
|
74
|
+
// --- Scan -----------------------------------------------------------------
|
|
75
|
+
/**
|
|
76
|
+
* Read-only scan of .caws/specs/. Classifies each YAML via the kernel
|
|
77
|
+
* detectSpecVersion + migrateSpecV10 pipeline; reports non-YAML files
|
|
78
|
+
* as observations (markdown_sidecar for *.md, unknown_non_yaml for the
|
|
79
|
+
* rest, EXCEPT registry.json which is the CLI's own bookkeeping and is
|
|
80
|
+
* silently ignored).
|
|
81
|
+
*
|
|
82
|
+
* Per A8: explicitly excludes .archive/ if present. Does NOT recurse.
|
|
83
|
+
* The scan is read-only — no files are modified and no events are appended.
|
|
84
|
+
*
|
|
85
|
+
* Failure mode: if the specs directory cannot be listed (permission
|
|
86
|
+
* denied, etc.), returns err with SPECS_MIGRATE_SCAN_FAILED. Refuses
|
|
87
|
+
* rather than returning an empty scan so an apply-default can't masquerade
|
|
88
|
+
* as "no v10 specs found."
|
|
89
|
+
*/
|
|
90
|
+
function runSpecsMigrateScan(opts) {
|
|
91
|
+
// Defensive substrate assertion: cawsDir must point at a `.caws`
|
|
92
|
+
// directory. The store does NOT trust the shell to validate this —
|
|
93
|
+
// any caller (test harness, future SDK, in-process consumer) must
|
|
94
|
+
// pass an absolute path whose basename is exactly `.caws`. A wrong
|
|
95
|
+
// root would cause repo-root-relative paths in the report to be
|
|
96
|
+
// garbage and would cause the report write to land in the wrong
|
|
97
|
+
// .caws/migrations/ directory.
|
|
98
|
+
const cawsDirCheck = assertCawsDirShape(opts.cawsDir);
|
|
99
|
+
if (!(0, caws_kernel_1.isOk)(cawsDirCheck))
|
|
100
|
+
return cawsDirCheck;
|
|
101
|
+
const specsDir = path.join(opts.cawsDir, 'specs');
|
|
102
|
+
let entries;
|
|
103
|
+
try {
|
|
104
|
+
entries = fs.readdirSync(specsDir, { withFileTypes: true });
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
const cause = e;
|
|
108
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_SCAN_FAILED, `Failed to read ${specsDir}: ${cause.message ?? 'unknown error'}.`, {
|
|
109
|
+
subject: specsDir,
|
|
110
|
+
data: { code: cause.code },
|
|
111
|
+
narrowRepair: 'Verify the .caws/specs/ directory exists and is readable. The scan refuses to proceed on a directory it cannot list (so apply-default bypass cannot masquerade as "no v10 specs found").',
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
// Sort for deterministic per-file order in the report.
|
|
115
|
+
entries.sort((a, b) => a.name.localeCompare(b.name));
|
|
116
|
+
const scanEntries = [];
|
|
117
|
+
const nonYaml = [];
|
|
118
|
+
const parseErrors = [];
|
|
119
|
+
let migrated = 0;
|
|
120
|
+
let migratedWithWarnings = 0;
|
|
121
|
+
let refused = 0;
|
|
122
|
+
for (const dirent of entries) {
|
|
123
|
+
// Skip subdirectories (including .archive/).
|
|
124
|
+
if (!dirent.isFile())
|
|
125
|
+
continue;
|
|
126
|
+
const fullPath = path.join(specsDir, dirent.name);
|
|
127
|
+
// Path is repo-root-relative (e.g., ".caws/specs/X.yaml"), not
|
|
128
|
+
// cawsDir-relative ("specs/X.yaml"). User-facing diagnostics and
|
|
129
|
+
// report entries reference the path the operator would type at
|
|
130
|
+
// the shell, which is repo-root-relative.
|
|
131
|
+
const repoRoot = path.dirname(opts.cawsDir);
|
|
132
|
+
const relPath = path.relative(repoRoot, fullPath);
|
|
133
|
+
// Non-YAML files: classify and skip.
|
|
134
|
+
if (!dirent.name.endsWith('.yaml') && !dirent.name.endsWith('.yml')) {
|
|
135
|
+
// registry.json is CLI bookkeeping — silently ignore.
|
|
136
|
+
if (dirent.name === 'registry.json')
|
|
137
|
+
continue;
|
|
138
|
+
const kind = dirent.name.endsWith('.md')
|
|
139
|
+
? 'markdown_sidecar'
|
|
140
|
+
: 'unknown_non_yaml';
|
|
141
|
+
nonYaml.push({ file: relPath, kind });
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
// Read raw bytes (preserves YAML formatting for digest stability).
|
|
145
|
+
let raw;
|
|
146
|
+
try {
|
|
147
|
+
raw = fs.readFileSync(fullPath, 'utf8');
|
|
148
|
+
}
|
|
149
|
+
catch (e) {
|
|
150
|
+
const cause = e;
|
|
151
|
+
parseErrors.push({
|
|
152
|
+
file: relPath,
|
|
153
|
+
diagnostics: [
|
|
154
|
+
(0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_PARSE_FAILED, `Failed to read ${relPath}: ${cause.message ?? 'unknown error'}.`, { subject: relPath, data: { code: cause.code } }),
|
|
155
|
+
],
|
|
156
|
+
});
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
const oldDigest = sha256Hex(raw);
|
|
160
|
+
// Parse the YAML so the transformer has an object input.
|
|
161
|
+
const parseResult = (0, caws_kernel_1.parseSpecYaml)(raw, { sourcePath: relPath });
|
|
162
|
+
if (!(0, caws_kernel_1.isOk)(parseResult)) {
|
|
163
|
+
parseErrors.push({ file: relPath, diagnostics: parseResult.errors });
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
// Classification + transform. detectSpecVersion is the pure kernel
|
|
167
|
+
// classifier; the transformer's idempotency guard (A7) refuses
|
|
168
|
+
// already-v11 specs with a structured "no-op" outcome (severity=info).
|
|
169
|
+
const version = (0, caws_kernel_1.detectSpecVersion)(parseResult.value);
|
|
170
|
+
if (version === 'v11') {
|
|
171
|
+
// Already v11 — outside this migrator's job. Don't emit as refused;
|
|
172
|
+
// the transformer would emit kind=refused with rule ALREADY_V11
|
|
173
|
+
// (severity=info), but for scan-report distribution counts we
|
|
174
|
+
// exclude already-v11 specs from the totals so the operator's
|
|
175
|
+
// mental model "scan said X refusals" matches "X actionable items".
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const migrateResult = (0, caws_kernel_1.migrateSpecV10)(parseResult.value, { path: relPath, contentDigest: oldDigest }, opts.lifecycleMapping !== undefined
|
|
179
|
+
? { lifecycleMapping: opts.lifecycleMapping }
|
|
180
|
+
: {});
|
|
181
|
+
if (!(0, caws_kernel_1.isOk)(migrateResult)) {
|
|
182
|
+
// Transformer returned err (non-object input, etc.) — record as
|
|
183
|
+
// parse error so the scan stays usable.
|
|
184
|
+
parseErrors.push({ file: relPath, diagnostics: migrateResult.errors });
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
const outcome = migrateResult.value;
|
|
188
|
+
const specId = typeof parseResult.value === 'object' &&
|
|
189
|
+
parseResult.value !== null &&
|
|
190
|
+
'id' in parseResult.value &&
|
|
191
|
+
typeof parseResult.value['id'] === 'string'
|
|
192
|
+
? parseResult.value['id']
|
|
193
|
+
: null;
|
|
194
|
+
scanEntries.push({ file: relPath, spec_id: specId, old_digest: oldDigest, outcome, raw });
|
|
195
|
+
if (outcome.kind === 'migrated')
|
|
196
|
+
migrated++;
|
|
197
|
+
else if (outcome.kind === 'migrated_with_warnings')
|
|
198
|
+
migratedWithWarnings++;
|
|
199
|
+
else
|
|
200
|
+
refused++;
|
|
201
|
+
}
|
|
202
|
+
return (0, caws_kernel_1.ok)({
|
|
203
|
+
cawsDir: opts.cawsDir,
|
|
204
|
+
entries: scanEntries,
|
|
205
|
+
distribution: {
|
|
206
|
+
migrated,
|
|
207
|
+
migrated_with_warnings: migratedWithWarnings,
|
|
208
|
+
refused,
|
|
209
|
+
total: scanEntries.length,
|
|
210
|
+
},
|
|
211
|
+
non_yaml: nonYaml,
|
|
212
|
+
parse_errors: parseErrors,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
// --- Apply ----------------------------------------------------------------
|
|
216
|
+
/**
|
|
217
|
+
* Run a scan, then optionally write the migrated YAMLs to disk + a
|
|
218
|
+
* durable migration report.
|
|
219
|
+
*
|
|
220
|
+
* apply=false (dry-run): produces an in-memory MigrationReport but
|
|
221
|
+
* writes NOTHING to disk (no spec writes, no report file).
|
|
222
|
+
*
|
|
223
|
+
* apply=true, partial=false: refuses if any scan entry is 'refused';
|
|
224
|
+
* no writes occur. Returns err with SPECS_MIGRATE_REFUSALS_PRESENT
|
|
225
|
+
* naming the first refused file and count.
|
|
226
|
+
*
|
|
227
|
+
* apply=true, partial=true: writes only the auto-migratable specs.
|
|
228
|
+
* Each write is preceded by post-write validation via the canonical
|
|
229
|
+
* parseAndValidateSpec; failure rolls back that single file (the
|
|
230
|
+
* on-disk YAML is byte-identical to the pre-call state) and records
|
|
231
|
+
* verdict='post_write_validation_failed' in the report. Other files
|
|
232
|
+
* in the batch are NOT rolled back (per non_functional reliability).
|
|
233
|
+
*
|
|
234
|
+
* The report is written ATOMICALLY via writeFileAtomic to
|
|
235
|
+
* .caws/migrations/v10-specs/<ISO>.json, ONCE per apply invocation,
|
|
236
|
+
* AFTER all per-file decisions are recorded.
|
|
237
|
+
*/
|
|
238
|
+
function runSpecsMigrateApply(opts) {
|
|
239
|
+
// --- Scan first --------------------------------------------------------
|
|
240
|
+
const scanResult = runSpecsMigrateScan(opts);
|
|
241
|
+
if (!(0, caws_kernel_1.isOk)(scanResult)) {
|
|
242
|
+
return scanResult;
|
|
243
|
+
}
|
|
244
|
+
const scan = scanResult.value;
|
|
245
|
+
// --- A9: refusal-by-default for apply without partial ------------------
|
|
246
|
+
if (opts.apply && !opts.partial && scan.distribution.refused > 0) {
|
|
247
|
+
const firstRefused = scan.entries.find((e) => e.outcome.kind === 'refused');
|
|
248
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_REFUSALS_PRESENT, `caws specs migrate --apply refused: ${scan.distribution.refused} of ${scan.distribution.total} spec(s) hit a 'refused' verdict (first: ${firstRefused?.file ?? 'unknown'}). Re-run with --partial to write the auto-migratable subset and skip refused, OR with --lifecycle-mapping <path> to unblock the unmapped-lifecycle cluster.`, {
|
|
249
|
+
subject: opts.cawsDir,
|
|
250
|
+
data: {
|
|
251
|
+
refused_count: scan.distribution.refused,
|
|
252
|
+
total: scan.distribution.total,
|
|
253
|
+
first_refused: firstRefused?.file ?? null,
|
|
254
|
+
},
|
|
255
|
+
narrowRepair: 'Either fix the refused specs by hand (read the refusal reasons in the dry-run report), or re-run with --partial to apply the migratable subset, or supply --lifecycle-mapping to resolve the unmapped-lifecycle cluster.',
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
// --- Build per-file report entries -------------------------------------
|
|
259
|
+
const reportEntries = [];
|
|
260
|
+
let postWriteFailed = 0;
|
|
261
|
+
for (const entry of scan.entries) {
|
|
262
|
+
const reportEntry = buildBaseReportEntry(entry);
|
|
263
|
+
// Dry-run or refused: don't attempt the write. The report records
|
|
264
|
+
// the outcome as-is.
|
|
265
|
+
if (!opts.apply || entry.outcome.kind === 'refused') {
|
|
266
|
+
reportEntries.push(reportEntry);
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
// apply=true && (migrated || migrated_with_warnings):
|
|
270
|
+
// Serialize, post-write-validate, atomic write.
|
|
271
|
+
const serializedSpec = entry.outcome.kind === 'migrated'
|
|
272
|
+
? entry.outcome.value
|
|
273
|
+
: entry.outcome.value;
|
|
274
|
+
let serialized;
|
|
275
|
+
try {
|
|
276
|
+
serialized = yaml.dump(serializedSpec, {
|
|
277
|
+
noRefs: true,
|
|
278
|
+
sortKeys: false,
|
|
279
|
+
lineWidth: 100,
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
catch (e) {
|
|
283
|
+
const cause = e;
|
|
284
|
+
reportEntries.push({
|
|
285
|
+
...reportEntry,
|
|
286
|
+
verdict: 'post_write_validation_failed',
|
|
287
|
+
post_write_validation_errors: [
|
|
288
|
+
(0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_POST_WRITE_VALIDATION_FAILED, `Failed to serialize migrated spec to YAML: ${cause.message ?? 'unknown error'}.`, { subject: entry.file }),
|
|
289
|
+
],
|
|
290
|
+
});
|
|
291
|
+
postWriteFailed++;
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
// Post-write validation: run the canonical parseAndValidateSpec
|
|
295
|
+
// on the serialized output BEFORE the disk write. If validation
|
|
296
|
+
// fails, the file is never written (transformer-bug guard).
|
|
297
|
+
const validationResult = (0, caws_kernel_1.parseAndValidateSpec)(serialized, {
|
|
298
|
+
sourcePath: entry.file,
|
|
299
|
+
});
|
|
300
|
+
if (!(0, caws_kernel_1.isOk)(validationResult)) {
|
|
301
|
+
reportEntries.push({
|
|
302
|
+
...reportEntry,
|
|
303
|
+
verdict: 'post_write_validation_failed',
|
|
304
|
+
post_write_validation_errors: validationResult.errors,
|
|
305
|
+
});
|
|
306
|
+
postWriteFailed++;
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
// Atomic write.
|
|
310
|
+
const fullPath = path.join(opts.cawsDir, '..', entry.file);
|
|
311
|
+
const writeResult = (0, atomic_write_1.writeFileAtomic)(fullPath, serialized);
|
|
312
|
+
if (!(0, caws_kernel_1.isOk)(writeResult)) {
|
|
313
|
+
// Write failed — record as post_write_validation_failed (the
|
|
314
|
+
// write didn't happen, so the file is byte-identical to pre-call).
|
|
315
|
+
reportEntries.push({
|
|
316
|
+
...reportEntry,
|
|
317
|
+
verdict: 'post_write_validation_failed',
|
|
318
|
+
post_write_validation_errors: writeResult.errors,
|
|
319
|
+
});
|
|
320
|
+
postWriteFailed++;
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
// Success — compute new digest from what we wrote.
|
|
324
|
+
reportEntries.push({
|
|
325
|
+
...reportEntry,
|
|
326
|
+
new_digest: sha256Hex(serialized),
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
// --- Build the report --------------------------------------------------
|
|
330
|
+
const report = {
|
|
331
|
+
schema_version: exports.MIGRATION_REPORT_SCHEMA_VERSION,
|
|
332
|
+
generated_at: opts.now.toISOString(),
|
|
333
|
+
command: buildCommandString(opts),
|
|
334
|
+
cwd: opts.cawsDir,
|
|
335
|
+
distribution: {
|
|
336
|
+
...scan.distribution,
|
|
337
|
+
post_write_validation_failed: postWriteFailed,
|
|
338
|
+
},
|
|
339
|
+
non_yaml_observations: scan.non_yaml,
|
|
340
|
+
entries: reportEntries,
|
|
341
|
+
};
|
|
342
|
+
// --- Write the durable report (apply only) ----------------------------
|
|
343
|
+
let reportPath = null;
|
|
344
|
+
if (opts.apply) {
|
|
345
|
+
const writeRes = writeMigrationReport(opts.cawsDir, report);
|
|
346
|
+
if (!(0, caws_kernel_1.isOk)(writeRes)) {
|
|
347
|
+
// Report write failed AFTER spec writes succeeded — surface as
|
|
348
|
+
// err so the caller knows the audit trail is incomplete even
|
|
349
|
+
// though the migrations landed.
|
|
350
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_REPORT_WRITE_FAILED, `Spec migrations were written to disk, but writing the durable migration report failed: ${writeRes.errors[0]?.message ?? 'unknown error'}. The migrations are on disk; only the audit trail is missing.`, {
|
|
351
|
+
subject: opts.cawsDir,
|
|
352
|
+
data: {
|
|
353
|
+
partial: opts.partial,
|
|
354
|
+
spec_write_count: reportEntries.filter((e) => e.verdict === 'migrated' || e.verdict === 'migrated_with_warnings').length,
|
|
355
|
+
},
|
|
356
|
+
narrowRepair: 'Investigate the .caws/migrations/v10-specs/ directory permissions. The spec writes themselves cannot be rolled back; treat this as an audit-trail gap and document the migration manually.',
|
|
357
|
+
}));
|
|
358
|
+
}
|
|
359
|
+
reportPath = writeRes.value;
|
|
360
|
+
}
|
|
361
|
+
return (0, caws_kernel_1.ok)({
|
|
362
|
+
cawsDir: opts.cawsDir,
|
|
363
|
+
partial: opts.partial,
|
|
364
|
+
report_path: reportPath,
|
|
365
|
+
report,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
// --- Helpers --------------------------------------------------------------
|
|
369
|
+
function sha256Hex(input) {
|
|
370
|
+
return crypto.createHash('sha256').update(input, 'utf8').digest('hex');
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Substrate assertion: cawsDir must be a path whose basename is
|
|
374
|
+
* exactly `.caws`. Refuses with SPECS_MIGRATE_SCAN_FAILED if not,
|
|
375
|
+
* naming the exact path passed and the expected shape.
|
|
376
|
+
*
|
|
377
|
+
* This is intentionally NOT a soft warning — a wrong root corrupts
|
|
378
|
+
* every relative-path computation downstream (report entries, write
|
|
379
|
+
* targets, the migrations-report directory itself). Failing hard at
|
|
380
|
+
* the substrate boundary is the right answer.
|
|
381
|
+
*/
|
|
382
|
+
function assertCawsDirShape(cawsDir) {
|
|
383
|
+
if (typeof cawsDir !== 'string' || cawsDir.length === 0) {
|
|
384
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_SCAN_FAILED, 'cawsDir must be a non-empty string path.', {
|
|
385
|
+
subject: String(cawsDir),
|
|
386
|
+
narrowRepair: 'Pass cawsDir as an absolute path whose basename is exactly ".caws" (e.g. "/path/to/repo/.caws").',
|
|
387
|
+
}));
|
|
388
|
+
}
|
|
389
|
+
const base = path.basename(cawsDir);
|
|
390
|
+
if (base !== '.caws') {
|
|
391
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_SCAN_FAILED, `cawsDir basename must be exactly ".caws"; got "${base}" for path "${cawsDir}".`, {
|
|
392
|
+
subject: cawsDir,
|
|
393
|
+
data: { basename: base, expected: '.caws' },
|
|
394
|
+
narrowRepair: 'Pass cawsDir as the path to the .caws directory itself, not the repo root or a subdirectory. The shell layer (caws specs migrate) should compute this from resolveRepoRoot + path.join(repoRoot, ".caws").',
|
|
395
|
+
}));
|
|
396
|
+
}
|
|
397
|
+
return (0, caws_kernel_1.ok)(true);
|
|
398
|
+
}
|
|
399
|
+
function buildCommandString(opts) {
|
|
400
|
+
const parts = ['caws specs migrate', `--from ${opts.from}`];
|
|
401
|
+
if (opts.apply)
|
|
402
|
+
parts.push('--apply');
|
|
403
|
+
if (opts.partial)
|
|
404
|
+
parts.push('--partial');
|
|
405
|
+
if (opts.lifecycleMapping !== undefined)
|
|
406
|
+
parts.push('--lifecycle-mapping <path>');
|
|
407
|
+
return parts.join(' ');
|
|
408
|
+
}
|
|
409
|
+
function buildBaseReportEntry(entry) {
|
|
410
|
+
const o = entry.outcome;
|
|
411
|
+
if (o.kind === 'migrated') {
|
|
412
|
+
return {
|
|
413
|
+
file: entry.file,
|
|
414
|
+
spec_id: entry.spec_id,
|
|
415
|
+
old_digest: entry.old_digest,
|
|
416
|
+
new_digest: null, // populated post-write
|
|
417
|
+
verdict: 'migrated',
|
|
418
|
+
safe_renames: o.safe_renames,
|
|
419
|
+
coercions: o.coercions,
|
|
420
|
+
mode_source: o.mode_source,
|
|
421
|
+
lifecycle_mapping_used: o.lifecycle_mapping_used,
|
|
422
|
+
report_only_fields: o.report_only_fields,
|
|
423
|
+
refusal_reasons: [],
|
|
424
|
+
post_write_validation_errors: [],
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
if (o.kind === 'migrated_with_warnings') {
|
|
428
|
+
return {
|
|
429
|
+
file: entry.file,
|
|
430
|
+
spec_id: entry.spec_id,
|
|
431
|
+
old_digest: entry.old_digest,
|
|
432
|
+
new_digest: null,
|
|
433
|
+
verdict: 'migrated_with_warnings',
|
|
434
|
+
safe_renames: o.safe_renames,
|
|
435
|
+
coercions: o.coercions,
|
|
436
|
+
mode_source: o.mode_source,
|
|
437
|
+
lifecycle_mapping_used: o.lifecycle_mapping_used,
|
|
438
|
+
report_only_fields: o.report_only_fields,
|
|
439
|
+
refusal_reasons: [],
|
|
440
|
+
post_write_validation_errors: [],
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
// refused
|
|
444
|
+
return {
|
|
445
|
+
file: entry.file,
|
|
446
|
+
spec_id: entry.spec_id,
|
|
447
|
+
old_digest: entry.old_digest,
|
|
448
|
+
new_digest: null,
|
|
449
|
+
verdict: 'refused',
|
|
450
|
+
safe_renames: [],
|
|
451
|
+
coercions: [],
|
|
452
|
+
mode_source: null,
|
|
453
|
+
lifecycle_mapping_used: null,
|
|
454
|
+
report_only_fields: {},
|
|
455
|
+
refusal_reasons: o.reasons.map((r) => r.rule),
|
|
456
|
+
post_write_validation_errors: [],
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
function writeMigrationReport(cawsDir, report) {
|
|
460
|
+
// Windows-safe ISO timestamp (colons → hyphens), matching the events
|
|
461
|
+
// archive naming convention.
|
|
462
|
+
const safeStamp = report.generated_at.replace(/:/g, '-');
|
|
463
|
+
const dir = path.join(cawsDir, 'migrations', 'v10-specs');
|
|
464
|
+
const filePath = path.join(dir, `${safeStamp}.json`);
|
|
465
|
+
// Create directory (idempotent).
|
|
466
|
+
try {
|
|
467
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
468
|
+
}
|
|
469
|
+
catch (e) {
|
|
470
|
+
const cause = e;
|
|
471
|
+
return (0, caws_kernel_1.err)((0, repo_root_1.storeDiagnostic)(rules_1.STORE_RULES.SPECS_MIGRATE_REPORT_WRITE_FAILED, `Failed to create migration report directory ${dir}: ${cause.message ?? 'unknown error'}.`, { subject: dir, data: { code: cause.code } }));
|
|
472
|
+
}
|
|
473
|
+
const writeResult = (0, atomic_write_1.writeFileAtomic)(filePath, JSON.stringify(report, null, 2));
|
|
474
|
+
if (!(0, caws_kernel_1.isOk)(writeResult)) {
|
|
475
|
+
return (0, caws_kernel_1.err)(writeResult.errors);
|
|
476
|
+
}
|
|
477
|
+
return (0, caws_kernel_1.ok)(filePath);
|
|
478
|
+
}
|
|
479
|
+
// --- Unused-import suppression (isErr referenced for clarity in design) ---
|
|
480
|
+
void caws_kernel_1.isErr;
|
|
481
|
+
//# sourceMappingURL=specs-migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specs-migration.js","sourceRoot":"","sources":["../../src/store/specs-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specs-store.d.ts","sourceRoot":"","sources":["../../src/store/specs-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"specs-store.d.ts","sourceRoot":"","sources":["../../src/store/specs-store.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAM/C,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAuG1D"}
|
|
@@ -88,12 +88,24 @@ function loadSpecs(cawsDir) {
|
|
|
88
88
|
continue;
|
|
89
89
|
// Explicit guard: working-spec.yaml is forbidden in vNext.
|
|
90
90
|
if (entry.name === 'working-spec.yaml' || entry.name === 'working-spec.yml') {
|
|
91
|
-
diagnostics.push((0,
|
|
91
|
+
diagnostics.push((0, caws_kernel_1.diagnostic)({
|
|
92
|
+
rule: rules_1.STORE_RULES.SPECS_NON_YAML_SKIPPED,
|
|
93
|
+
authority: 'kernel/diagnostics',
|
|
94
|
+
severity: 'info',
|
|
95
|
+
message: `Skipping ${entry.name}: project-level working spec is not supported in vNext.`,
|
|
96
|
+
subject: path.join(specsDir, entry.name),
|
|
97
|
+
}));
|
|
92
98
|
continue;
|
|
93
99
|
}
|
|
94
100
|
const fullPath = path.join(specsDir, entry.name);
|
|
95
101
|
if (!isYamlPath(entry.name)) {
|
|
96
|
-
diagnostics.push((0,
|
|
102
|
+
diagnostics.push((0, caws_kernel_1.diagnostic)({
|
|
103
|
+
rule: rules_1.STORE_RULES.SPECS_NON_YAML_SKIPPED,
|
|
104
|
+
authority: 'kernel/diagnostics',
|
|
105
|
+
severity: 'info',
|
|
106
|
+
message: `Skipping non-YAML file in .caws/specs/: ${entry.name}.`,
|
|
107
|
+
subject: fullPath,
|
|
108
|
+
}));
|
|
97
109
|
continue;
|
|
98
110
|
}
|
|
99
111
|
const source = (0, yaml_store_1.readYamlSource)(fullPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"specs-store.js","sourceRoot":"","sources":["../../src/store/specs-store.ts"],"names":[],"mappings":";AAAA,gBAAgB;AAChB,EAAE;AACF,sEAAsE;AACtE,4EAA4E;AAC5E,4BAA4B;AAC5B,EAAE;AACF,cAAc;AACd,sEAAsE;AACtE,0EAA0E;AAC1E,gCAAgC;AAChC,yEAAyE;AACzE,kCAAkC;AAClC,oEAAoE;AACpE,oEAAoE;AACpE,kEAAkE;AAClE,mFAAmF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"specs-store.js","sourceRoot":"","sources":["../../src/store/specs-store.ts"],"names":[],"mappings":"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"}
|