@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,510 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// `caws events migrate | rotate | verify-archive` — the maintenance
|
|
3
|
+
// command surface for the v11.2 event-log writer (CAWS-MIGRATE-V10-EVENTS-001
|
|
4
|
+
// A10/A11). See docs/architecture/caws-vnext-command-surface.md §6
|
|
5
|
+
// invariant 14 + the Maintenance / control-plane subsection.
|
|
6
|
+
//
|
|
7
|
+
// Three commands, with distinct semantics:
|
|
8
|
+
//
|
|
9
|
+
// events migrate — v10→v11 chain migration. Reads the log, scans
|
|
10
|
+
// specs (MUST succeed, refuses on scan-unavailable),
|
|
11
|
+
// runs the planner, prints a dry-run report. With
|
|
12
|
+
// --apply, invokes rotateEvents iff the plan was
|
|
13
|
+
// 'rotate'. Refuses unparseable_only (migration
|
|
14
|
+
// cannot claim it found a v10 chain).
|
|
15
|
+
//
|
|
16
|
+
// events rotate — lower-level maintenance rotation. Bypasses the
|
|
17
|
+
// planner; calls rotateEvents directly. Admits
|
|
18
|
+
// fully-unparseable logs under prior_chain_status:
|
|
19
|
+
// 'unparseable' (evidence quarantine). Distinct
|
|
20
|
+
// semantic from migration. --reason is required;
|
|
21
|
+
// --allow-clean is the friction flag.
|
|
22
|
+
//
|
|
23
|
+
// events verify-archive — recompute the archive file's sha256 and
|
|
24
|
+
// line count, compare against the values committed
|
|
25
|
+
// in the most recent chain_rotated event. Five
|
|
26
|
+
// distinguishable failure modes (digest mismatch,
|
|
27
|
+
// line-count mismatch, missing archive, no rotation
|
|
28
|
+
// event in chain, current chain unloadable).
|
|
29
|
+
//
|
|
30
|
+
// All three commands invoke kernel-validated paths. The shell never
|
|
31
|
+
// writes events.jsonl directly; rotateEvents (via prepareAppend) is
|
|
32
|
+
// the only mutation surface. See invariant 14.
|
|
33
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
34
|
+
if (k2 === undefined) k2 = k;
|
|
35
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
36
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
37
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
38
|
+
}
|
|
39
|
+
Object.defineProperty(o, k2, desc);
|
|
40
|
+
}) : (function(o, m, k, k2) {
|
|
41
|
+
if (k2 === undefined) k2 = k;
|
|
42
|
+
o[k2] = m[k];
|
|
43
|
+
}));
|
|
44
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
45
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
46
|
+
}) : function(o, v) {
|
|
47
|
+
o["default"] = v;
|
|
48
|
+
});
|
|
49
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
50
|
+
var ownKeys = function(o) {
|
|
51
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
52
|
+
var ar = [];
|
|
53
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
54
|
+
return ar;
|
|
55
|
+
};
|
|
56
|
+
return ownKeys(o);
|
|
57
|
+
};
|
|
58
|
+
return function (mod) {
|
|
59
|
+
if (mod && mod.__esModule) return mod;
|
|
60
|
+
var result = {};
|
|
61
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
62
|
+
__setModuleDefault(result, mod);
|
|
63
|
+
return result;
|
|
64
|
+
};
|
|
65
|
+
})();
|
|
66
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
67
|
+
exports.runEventsMigrateCommand = runEventsMigrateCommand;
|
|
68
|
+
exports.runEventsRotateCommand = runEventsRotateCommand;
|
|
69
|
+
exports.runEventsVerifyArchiveCommand = runEventsVerifyArchiveCommand;
|
|
70
|
+
const crypto = __importStar(require("crypto"));
|
|
71
|
+
const fs = __importStar(require("fs"));
|
|
72
|
+
const path = __importStar(require("path"));
|
|
73
|
+
const caws_kernel_1 = require("@paths.design/caws-kernel");
|
|
74
|
+
const store_1 = require("../../store");
|
|
75
|
+
const events_migration_1 = require("../../store/events-migration");
|
|
76
|
+
const actor_1 = require("../session/actor");
|
|
77
|
+
const resolve_session_1 = require("../session/resolve-session");
|
|
78
|
+
const diagnostic_1 = require("../render/diagnostic");
|
|
79
|
+
function defaults(opts) {
|
|
80
|
+
return {
|
|
81
|
+
cwd: opts.cwd ?? process.cwd(),
|
|
82
|
+
now: opts.now ?? (() => new Date()),
|
|
83
|
+
env: opts.env ?? process.env,
|
|
84
|
+
out: opts.out ?? ((s) => process.stdout.write(s + '\n')),
|
|
85
|
+
err: opts.err ?? ((s) => process.stderr.write(s + '\n')),
|
|
86
|
+
showData: opts.showData === true,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function scanSpecsDirectory(cawsDir) {
|
|
90
|
+
const specsDir = path.join(cawsDir, 'specs');
|
|
91
|
+
let entries;
|
|
92
|
+
try {
|
|
93
|
+
entries = fs.readdirSync(specsDir, { withFileTypes: true });
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
const cause = e;
|
|
97
|
+
return {
|
|
98
|
+
ok: false,
|
|
99
|
+
diagnostic: (0, caws_kernel_1.diagnostic)({
|
|
100
|
+
rule: events_migration_1.MIGRATION_RULES.SPEC_SCAN_UNAVAILABLE,
|
|
101
|
+
authority: 'kernel/diagnostics',
|
|
102
|
+
message: `caws events migrate: cannot scan .caws/specs/ for v10-shape YAMLs (${cause.code ?? 'unknown error'}: ${cause.message ?? 'no message'}). The half-upgrade refusal cannot be enforced without a complete scan; refusing rather than silently bypassing the guard. Run from a checkout where .caws/specs/ is visible (sparse-checkout exclusion of .caws/specs/ counts as missing).`,
|
|
103
|
+
subject: specsDir,
|
|
104
|
+
data: { code: cause.code },
|
|
105
|
+
}),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const files = [];
|
|
109
|
+
for (const entry of entries) {
|
|
110
|
+
if (!entry.isFile())
|
|
111
|
+
continue;
|
|
112
|
+
if (!entry.name.endsWith('.yaml') && !entry.name.endsWith('.yml'))
|
|
113
|
+
continue;
|
|
114
|
+
const fullPath = path.join(specsDir, entry.name);
|
|
115
|
+
let raw;
|
|
116
|
+
try {
|
|
117
|
+
raw = fs.readFileSync(fullPath, 'utf8');
|
|
118
|
+
}
|
|
119
|
+
catch (e) {
|
|
120
|
+
const cause = e;
|
|
121
|
+
return {
|
|
122
|
+
ok: false,
|
|
123
|
+
diagnostic: (0, caws_kernel_1.diagnostic)({
|
|
124
|
+
rule: events_migration_1.MIGRATION_RULES.SPEC_SCAN_UNAVAILABLE,
|
|
125
|
+
authority: 'kernel/diagnostics',
|
|
126
|
+
message: `caws events migrate: failed to read ${entry.name} during spec scan (${cause.code ?? 'unknown error'}). Refusing rather than bypassing the half-upgrade guard.`,
|
|
127
|
+
subject: fullPath,
|
|
128
|
+
data: { code: cause.code },
|
|
129
|
+
}),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
files.push({ path: fullPath, raw });
|
|
133
|
+
}
|
|
134
|
+
return { ok: true, files };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Pipeline:
|
|
138
|
+
* 1. Resolve repo root + session + actor (apply only needs session;
|
|
139
|
+
* dry-run reads cleanly without minting a capsule).
|
|
140
|
+
* 2. Read events.jsonl raw bytes.
|
|
141
|
+
* 3. detectEventsLogShape — pure classification.
|
|
142
|
+
* 4. Scan .caws/specs/ — MANDATORY. Refuse on scan-unavailable.
|
|
143
|
+
* 5. planEventsRotation — pure planning. Refuses on
|
|
144
|
+
* unparseable_only / partial_corruption / v10_specs / clean_chain.
|
|
145
|
+
* 6. Print plan.
|
|
146
|
+
* 7. If --apply AND plan === 'rotate': call rotateEvents. Assert the
|
|
147
|
+
* returned event_hash + archive_name matches what the planner
|
|
148
|
+
* proposed. A mismatch is a bug-class internal failure
|
|
149
|
+
* (INTERNAL_DRYRUN_APPLY_MISMATCH).
|
|
150
|
+
*
|
|
151
|
+
* Exit codes:
|
|
152
|
+
* 0 = dry-run successful OR --apply rotation succeeded
|
|
153
|
+
* 1 = refusal (any planner refusal, spec-scan unavailable, --apply
|
|
154
|
+
* with no reason, --apply with plan === refuse)
|
|
155
|
+
* 2 = composition failure (repo-root, session, IO failure on read)
|
|
156
|
+
*/
|
|
157
|
+
function runEventsMigrateCommand(opts) {
|
|
158
|
+
const { cwd, now, env, out, err, showData } = defaults(opts);
|
|
159
|
+
const isApply = opts.apply === true;
|
|
160
|
+
const isDryRun = !isApply; // default
|
|
161
|
+
if (opts.from !== 'v10') {
|
|
162
|
+
err(`caws events migrate: only --from v10 is supported in v11.2; got ${JSON.stringify(opts.from)}.`);
|
|
163
|
+
return 1;
|
|
164
|
+
}
|
|
165
|
+
if (isApply && (typeof opts.reason !== 'string' || opts.reason.length === 0)) {
|
|
166
|
+
err('caws events migrate --apply: --reason "<text>" is required (the value is recorded verbatim into the chain_rotated payload).');
|
|
167
|
+
return 1;
|
|
168
|
+
}
|
|
169
|
+
// 1. Repo root.
|
|
170
|
+
const rootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
171
|
+
if (!rootResult.ok) {
|
|
172
|
+
err('caws events migrate: failed to resolve repo root.');
|
|
173
|
+
err((0, diagnostic_1.renderDiagnostics)(rootResult.errors, { showData }));
|
|
174
|
+
return 2;
|
|
175
|
+
}
|
|
176
|
+
const { cawsDir } = rootResult.value;
|
|
177
|
+
// 2. Read events.jsonl.
|
|
178
|
+
const eventsPath = path.join(cawsDir, 'events.jsonl');
|
|
179
|
+
let raw;
|
|
180
|
+
try {
|
|
181
|
+
raw = fs.readFileSync(eventsPath, 'utf8');
|
|
182
|
+
}
|
|
183
|
+
catch (e) {
|
|
184
|
+
const cause = e;
|
|
185
|
+
if (cause.code === 'ENOENT') {
|
|
186
|
+
err('caws events migrate: events.jsonl does not exist. There is nothing to migrate.');
|
|
187
|
+
err(`(rule: ${events_migration_1.MIGRATION_RULES.EMPTY_INPUT})`);
|
|
188
|
+
return 1;
|
|
189
|
+
}
|
|
190
|
+
err(`caws events migrate: failed to read events.jsonl (${cause.code ?? 'unknown error'}): ${cause.message ?? 'no message'}.`);
|
|
191
|
+
return 2;
|
|
192
|
+
}
|
|
193
|
+
// 3. Detect.
|
|
194
|
+
const detection = (0, events_migration_1.detectEventsLogShape)(raw);
|
|
195
|
+
if (!detection.ok) {
|
|
196
|
+
err('caws events migrate: refuse.');
|
|
197
|
+
err((0, diagnostic_1.renderDiagnostics)(detection.errors, { showData }));
|
|
198
|
+
return 1;
|
|
199
|
+
}
|
|
200
|
+
// Honor the "events migrate refuses fully-unparseable" semantic. The
|
|
201
|
+
// planner already refuses unparseable_only with UNPARSEABLE_INPUT;
|
|
202
|
+
// we re-route the diagnostic through MIGRATE_UNPARSEABLE_REFUSED so
|
|
203
|
+
// the shell-facing rule reflects the migration-command framing rather
|
|
204
|
+
// than the generic planner rule.
|
|
205
|
+
if (detection.value.kind === 'unparseable_only') {
|
|
206
|
+
err('caws events migrate: refuse — fully-unparseable events.jsonl.');
|
|
207
|
+
err((0, diagnostic_1.renderDiagnostics)([
|
|
208
|
+
(0, caws_kernel_1.diagnostic)({
|
|
209
|
+
rule: events_migration_1.MIGRATION_RULES.MIGRATE_UNPARSEABLE_REFUSED,
|
|
210
|
+
authority: 'kernel/diagnostics',
|
|
211
|
+
message: `events.jsonl has no JSON-parseable lines (${detection.value.stats.unparseable} unparseable, ${detection.value.lineCount} total). Migration cannot claim it found a v10 chain. If you want to archive the corrupt log as evidence quarantine, use 'caws events rotate --reason "<text>"' (which admits fully-unparseable logs under the honest 'unparseable' status).`,
|
|
212
|
+
subject: eventsPath,
|
|
213
|
+
}),
|
|
214
|
+
], { showData }));
|
|
215
|
+
return 1;
|
|
216
|
+
}
|
|
217
|
+
// 4. Scan .caws/specs/ — MANDATORY.
|
|
218
|
+
const specScan = scanSpecsDirectory(cawsDir);
|
|
219
|
+
if (!specScan.ok) {
|
|
220
|
+
err('caws events migrate: refuse.');
|
|
221
|
+
err((0, diagnostic_1.renderDiagnostics)([specScan.diagnostic], { showData }));
|
|
222
|
+
return 1;
|
|
223
|
+
}
|
|
224
|
+
const v10Specs = (0, events_migration_1.detectV10SpecsPresent)(specScan.files);
|
|
225
|
+
// 5. Plan.
|
|
226
|
+
const plan = (0, events_migration_1.planEventsRotation)(detection.value, {
|
|
227
|
+
reason: opts.reason ?? '',
|
|
228
|
+
now: now(),
|
|
229
|
+
v10Specs,
|
|
230
|
+
...(opts.allowPartialUpgrade === true ? { allowPartialUpgrade: true } : {}),
|
|
231
|
+
// allowClean is NOT a migrate-mode option; rotate users may use it.
|
|
232
|
+
});
|
|
233
|
+
// 6. Print plan.
|
|
234
|
+
printMigratePlan(plan, isDryRun, out);
|
|
235
|
+
if (plan.kind === 'refuse') {
|
|
236
|
+
err((0, diagnostic_1.renderDiagnostics)([plan.diagnostic], { showData }));
|
|
237
|
+
return 1;
|
|
238
|
+
}
|
|
239
|
+
if (isDryRun) {
|
|
240
|
+
out(`[dry-run] No filesystem changes. Re-run with --apply --reason "<text>" to execute the rotation.`);
|
|
241
|
+
return 0;
|
|
242
|
+
}
|
|
243
|
+
// 7. Apply path: resolve session + actor, call rotateEvents.
|
|
244
|
+
const sessionResult = (0, resolve_session_1.resolveSession)({
|
|
245
|
+
cawsDir,
|
|
246
|
+
worktreeRoot: cwd,
|
|
247
|
+
env,
|
|
248
|
+
now,
|
|
249
|
+
allowMint: true,
|
|
250
|
+
});
|
|
251
|
+
if (!sessionResult.ok) {
|
|
252
|
+
err('caws events migrate: failed to resolve session identity.');
|
|
253
|
+
err((0, diagnostic_1.renderDiagnostics)(sessionResult.errors, { showData }));
|
|
254
|
+
return 2;
|
|
255
|
+
}
|
|
256
|
+
const actor = (0, actor_1.buildActor)({
|
|
257
|
+
session: sessionResult.value,
|
|
258
|
+
kind: opts.actorKind ?? 'agent',
|
|
259
|
+
...(opts.actorId !== undefined ? { id: opts.actorId } : {}),
|
|
260
|
+
});
|
|
261
|
+
// For dry-run/apply agreement, capture the plan's proposed archive
|
|
262
|
+
// name now and pass the SAME `now` through to rotateEvents. If the
|
|
263
|
+
// resulting archive name differs from the proposed name, that is a
|
|
264
|
+
// bug-class internal failure (programmer error, not operator).
|
|
265
|
+
const planNow = plan.now;
|
|
266
|
+
const proposedArchive = plan.proposedArchiveName;
|
|
267
|
+
const rotateResult = (0, store_1.rotateEvents)(cawsDir, {
|
|
268
|
+
reason: opts.reason,
|
|
269
|
+
actor,
|
|
270
|
+
now: planNow,
|
|
271
|
+
// migrate path never auto-rotates a clean v11 chain — the planner
|
|
272
|
+
// would have refused with clean_chain_requires_allow_clean above.
|
|
273
|
+
});
|
|
274
|
+
if (!rotateResult.ok) {
|
|
275
|
+
err('caws events migrate --apply: rotateEvents failed after dry-run admitted the plan. This indicates state changed between plan and apply (concurrent writer? operator edit?).');
|
|
276
|
+
err((0, diagnostic_1.renderDiagnostics)(rotateResult.errors, { showData }));
|
|
277
|
+
return 1;
|
|
278
|
+
}
|
|
279
|
+
const event = rotateResult.value;
|
|
280
|
+
const actualArchive = event.data['prior_file_path'];
|
|
281
|
+
if (actualArchive !== proposedArchive) {
|
|
282
|
+
err(`caws events migrate --apply: INTERNAL FAILURE — dry-run proposed archive name "${proposedArchive}" but rotateEvents produced "${actualArchive}". This is a programmer error; investigate windowsSafeIso parity between events-migration.ts and events-store.ts.`);
|
|
283
|
+
err(`(rule: ${events_migration_1.MIGRATION_RULES.INTERNAL_DRYRUN_APPLY_MISMATCH})`);
|
|
284
|
+
return 2;
|
|
285
|
+
}
|
|
286
|
+
out(`applied. chain_rotated genesis written.`);
|
|
287
|
+
out(` seq=${event.seq}`);
|
|
288
|
+
out(` event_hash=${event.event_hash}`);
|
|
289
|
+
out(` archive=${actualArchive}`);
|
|
290
|
+
return 0;
|
|
291
|
+
}
|
|
292
|
+
function printMigratePlan(plan, isDryRun, out) {
|
|
293
|
+
const tag = isDryRun ? '[dry-run]' : '[apply]';
|
|
294
|
+
if (plan.kind === 'refuse') {
|
|
295
|
+
out(`${tag} plan: refuse (${plan.cause})`);
|
|
296
|
+
if (plan.detection) {
|
|
297
|
+
out(` detection: ${plan.detection.kind}, ${plan.detection.lineCount} lines`);
|
|
298
|
+
out(` v10_string_actor=${plan.detection.stats.v10_string_actor}, v11_object_actor=${plan.detection.stats.v11_object_actor}, unparseable=${plan.detection.stats.unparseable}`);
|
|
299
|
+
}
|
|
300
|
+
if (plan.v10Specs) {
|
|
301
|
+
out(` v10 specs: ${plan.v10Specs.v10Paths.length} detected (${plan.v10Specs.v10Paths.join(', ')})`);
|
|
302
|
+
}
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
out(`${tag} plan: rotate`);
|
|
306
|
+
out(` detection: ${plan.detection.kind}, ${plan.detection.lineCount} lines`);
|
|
307
|
+
out(` v10_string_actor=${plan.detection.stats.v10_string_actor}, v11_object_actor=${plan.detection.stats.v11_object_actor}, unparseable=${plan.detection.stats.unparseable}`);
|
|
308
|
+
out(` proposed archive: ${plan.proposedArchiveName}`);
|
|
309
|
+
if (plan.v10Specs) {
|
|
310
|
+
out(` v10 specs scan: ${plan.v10Specs.v10Paths.length} v10, ${plan.v10Specs.v11Paths.length} v11, ${plan.v10Specs.unclassifiedPaths.length} unclassified`);
|
|
311
|
+
}
|
|
312
|
+
if (plan.allowClean) {
|
|
313
|
+
out(` flags: --allow-clean`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Lower-level maintenance rotation. Bypasses the migration planner;
|
|
318
|
+
* calls rotateEvents directly. Admits fully-unparseable logs (under
|
|
319
|
+
* prior_chain_status: 'unparseable', the honest label) for evidence-
|
|
320
|
+
* quarantine use cases. Does NOT scan .caws/specs/ — that's a
|
|
321
|
+
* migrate-mode concern.
|
|
322
|
+
*
|
|
323
|
+
* Required: --reason. Friction flag: --allow-clean.
|
|
324
|
+
*
|
|
325
|
+
* Exit codes:
|
|
326
|
+
* 0 = rotation succeeded
|
|
327
|
+
* 1 = rotateEvents refused (empty, partial_corruption, clean-chain
|
|
328
|
+
* without --allow-clean) OR --reason missing
|
|
329
|
+
* 2 = composition failure (repo-root, session)
|
|
330
|
+
*/
|
|
331
|
+
function runEventsRotateCommand(opts) {
|
|
332
|
+
const { cwd, now, env, out, err, showData } = defaults(opts);
|
|
333
|
+
if (typeof opts.reason !== 'string' || opts.reason.length === 0) {
|
|
334
|
+
err('caws events rotate: --reason "<text>" is required (recorded verbatim into the chain_rotated payload).');
|
|
335
|
+
return 1;
|
|
336
|
+
}
|
|
337
|
+
const rootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
338
|
+
if (!rootResult.ok) {
|
|
339
|
+
err('caws events rotate: failed to resolve repo root.');
|
|
340
|
+
err((0, diagnostic_1.renderDiagnostics)(rootResult.errors, { showData }));
|
|
341
|
+
return 2;
|
|
342
|
+
}
|
|
343
|
+
const { cawsDir } = rootResult.value;
|
|
344
|
+
const sessionResult = (0, resolve_session_1.resolveSession)({
|
|
345
|
+
cawsDir,
|
|
346
|
+
worktreeRoot: cwd,
|
|
347
|
+
env,
|
|
348
|
+
now,
|
|
349
|
+
allowMint: true,
|
|
350
|
+
});
|
|
351
|
+
if (!sessionResult.ok) {
|
|
352
|
+
err('caws events rotate: failed to resolve session identity.');
|
|
353
|
+
err((0, diagnostic_1.renderDiagnostics)(sessionResult.errors, { showData }));
|
|
354
|
+
return 2;
|
|
355
|
+
}
|
|
356
|
+
const actor = (0, actor_1.buildActor)({
|
|
357
|
+
session: sessionResult.value,
|
|
358
|
+
kind: opts.actorKind ?? 'agent',
|
|
359
|
+
...(opts.actorId !== undefined ? { id: opts.actorId } : {}),
|
|
360
|
+
});
|
|
361
|
+
const rotateResult = (0, store_1.rotateEvents)(cawsDir, {
|
|
362
|
+
reason: opts.reason,
|
|
363
|
+
actor,
|
|
364
|
+
now: now(),
|
|
365
|
+
...(opts.allowClean === true ? { allowClean: true } : {}),
|
|
366
|
+
});
|
|
367
|
+
if (!rotateResult.ok) {
|
|
368
|
+
err('caws events rotate: refuse.');
|
|
369
|
+
err((0, diagnostic_1.renderDiagnostics)(rotateResult.errors, { showData }));
|
|
370
|
+
return 1;
|
|
371
|
+
}
|
|
372
|
+
const event = rotateResult.value;
|
|
373
|
+
out(`rotated. chain_rotated genesis written.`);
|
|
374
|
+
out(` seq=${event.seq}`);
|
|
375
|
+
out(` event_hash=${event.event_hash}`);
|
|
376
|
+
out(` archive=${event.data['prior_file_path']}`);
|
|
377
|
+
out(` prior_chain_status=${event.data['prior_chain_status']}`);
|
|
378
|
+
out(` prior_line_count=${event.data['prior_line_count']}`);
|
|
379
|
+
return 0;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Pipeline:
|
|
383
|
+
* 1. resolveRepoRoot
|
|
384
|
+
* 2. loadEvents — if the load itself fails (malformed JSON, bad
|
|
385
|
+
* chain shape), surface VERIFY_CURRENT_CHAIN_INVALID.
|
|
386
|
+
* 3. Find the most recent event with event === 'chain_rotated'. If
|
|
387
|
+
* none, surface VERIFY_NO_ROTATION_EVENT.
|
|
388
|
+
* 4. Stat the archive file named in prior_file_path. If missing,
|
|
389
|
+
* surface VERIFY_ARCHIVE_MISSING.
|
|
390
|
+
* 5. Recompute sha256 + line count of the archive file. Compare
|
|
391
|
+
* against prior_file_digest and prior_line_count.
|
|
392
|
+
* - digest mismatch → EVENTS_ARCHIVE_DIGEST_MISMATCH
|
|
393
|
+
* - line-count mismatch → EVENTS_ARCHIVE_LINE_COUNT_MISMATCH
|
|
394
|
+
* 6. If both match, print verification summary.
|
|
395
|
+
*
|
|
396
|
+
* Each of the five failure modes is a distinct exit-1 diagnostic, so
|
|
397
|
+
* operators and tooling can discriminate without parsing message text.
|
|
398
|
+
*
|
|
399
|
+
* Exit codes:
|
|
400
|
+
* 0 = verification succeeded
|
|
401
|
+
* 1 = any verification failure (one of the 5 modes)
|
|
402
|
+
* 2 = composition failure
|
|
403
|
+
*/
|
|
404
|
+
function runEventsVerifyArchiveCommand(opts) {
|
|
405
|
+
const { cwd, out, err, showData } = defaults(opts);
|
|
406
|
+
const rootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
407
|
+
if (!rootResult.ok) {
|
|
408
|
+
err('caws events verify-archive: failed to resolve repo root.');
|
|
409
|
+
err((0, diagnostic_1.renderDiagnostics)(rootResult.errors, { showData }));
|
|
410
|
+
return 2;
|
|
411
|
+
}
|
|
412
|
+
const { cawsDir } = rootResult.value;
|
|
413
|
+
// 2. Load events. If the current chain itself can't be parsed/validated,
|
|
414
|
+
// we cannot identify the most recent chain_rotated.
|
|
415
|
+
const loaded = (0, store_1.loadEvents)(cawsDir);
|
|
416
|
+
if (!loaded.ok) {
|
|
417
|
+
err('caws events verify-archive: cannot load current events.jsonl; verification depends on locating the most recent chain_rotated event.');
|
|
418
|
+
err((0, diagnostic_1.renderDiagnostics)([
|
|
419
|
+
(0, caws_kernel_1.diagnostic)({
|
|
420
|
+
rule: events_migration_1.MIGRATION_RULES.VERIFY_CURRENT_CHAIN_INVALID,
|
|
421
|
+
authority: 'kernel/diagnostics',
|
|
422
|
+
message: `events.jsonl could not be loaded as a valid hash-chained log. The underlying store diagnostics follow.`,
|
|
423
|
+
subject: path.join(cawsDir, 'events.jsonl'),
|
|
424
|
+
}),
|
|
425
|
+
...loaded.errors,
|
|
426
|
+
], { showData }));
|
|
427
|
+
return 1;
|
|
428
|
+
}
|
|
429
|
+
// 3. Walk events backward to find the most recent chain_rotated.
|
|
430
|
+
let mostRecentRotation = null;
|
|
431
|
+
for (let i = loaded.value.events.length - 1; i >= 0; i--) {
|
|
432
|
+
if (loaded.value.events[i].event === 'chain_rotated') {
|
|
433
|
+
mostRecentRotation = loaded.value.events[i];
|
|
434
|
+
break;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
if (mostRecentRotation === null) {
|
|
438
|
+
err('caws events verify-archive: no chain_rotated event found in current events.jsonl. Nothing to verify against.');
|
|
439
|
+
err((0, diagnostic_1.renderDiagnostics)([
|
|
440
|
+
(0, caws_kernel_1.diagnostic)({
|
|
441
|
+
rule: events_migration_1.MIGRATION_RULES.VERIFY_NO_ROTATION_EVENT,
|
|
442
|
+
authority: 'kernel/diagnostics',
|
|
443
|
+
message: `The current events.jsonl chain contains ${loaded.value.events.length} event(s) but no chain_rotated event. verify-archive needs at least one rotation event to know what to verify.`,
|
|
444
|
+
}),
|
|
445
|
+
], { showData }));
|
|
446
|
+
return 1;
|
|
447
|
+
}
|
|
448
|
+
// 4. Locate the archive.
|
|
449
|
+
const archiveName = mostRecentRotation.data['prior_file_path'];
|
|
450
|
+
const expectedDigest = mostRecentRotation.data['prior_file_digest'];
|
|
451
|
+
const expectedLineCount = mostRecentRotation.data['prior_line_count'];
|
|
452
|
+
const archivePath = path.join(cawsDir, archiveName);
|
|
453
|
+
if (!fs.existsSync(archivePath)) {
|
|
454
|
+
err('caws events verify-archive: archive file is missing.');
|
|
455
|
+
err((0, diagnostic_1.renderDiagnostics)([
|
|
456
|
+
(0, caws_kernel_1.diagnostic)({
|
|
457
|
+
rule: events_migration_1.MIGRATION_RULES.VERIFY_ARCHIVE_MISSING,
|
|
458
|
+
authority: 'kernel/diagnostics',
|
|
459
|
+
message: `Archive file ${archiveName} (named by chain_rotated event seq=${mostRecentRotation.seq}) does not exist at ${archivePath}.`,
|
|
460
|
+
subject: archivePath,
|
|
461
|
+
}),
|
|
462
|
+
], { showData }));
|
|
463
|
+
return 1;
|
|
464
|
+
}
|
|
465
|
+
// 5. Recompute sha256 + line count and compare.
|
|
466
|
+
const archiveBytes = fs.readFileSync(archivePath);
|
|
467
|
+
const actualDigest = `sha256:${crypto.createHash('sha256').update(archiveBytes).digest('hex')}`;
|
|
468
|
+
const actualLineCount = countNonEmptyLines(archiveBytes.toString('utf8'));
|
|
469
|
+
if (actualDigest !== expectedDigest) {
|
|
470
|
+
err('caws events verify-archive: archive digest mismatch (tamper detection).');
|
|
471
|
+
err((0, diagnostic_1.renderDiagnostics)([
|
|
472
|
+
(0, caws_kernel_1.diagnostic)({
|
|
473
|
+
rule: store_1.STORE_RULES.EVENTS_ARCHIVE_DIGEST_MISMATCH,
|
|
474
|
+
authority: 'kernel/diagnostics',
|
|
475
|
+
message: `Archive ${archiveName} sha256 does not match the chain_rotated committed digest. Expected ${expectedDigest}, got ${actualDigest}. The archive may have been edited after rotation.`,
|
|
476
|
+
subject: archivePath,
|
|
477
|
+
data: { expected: expectedDigest, actual: actualDigest },
|
|
478
|
+
}),
|
|
479
|
+
], { showData }));
|
|
480
|
+
return 1;
|
|
481
|
+
}
|
|
482
|
+
if (actualLineCount !== expectedLineCount) {
|
|
483
|
+
err('caws events verify-archive: archive line-count mismatch.');
|
|
484
|
+
err((0, diagnostic_1.renderDiagnostics)([
|
|
485
|
+
(0, caws_kernel_1.diagnostic)({
|
|
486
|
+
rule: store_1.STORE_RULES.EVENTS_ARCHIVE_LINE_COUNT_MISMATCH,
|
|
487
|
+
authority: 'kernel/diagnostics',
|
|
488
|
+
message: `Archive ${archiveName} non-empty line count does not match the chain_rotated committed count. Expected ${expectedLineCount}, got ${actualLineCount}.`,
|
|
489
|
+
subject: archivePath,
|
|
490
|
+
data: { expected: expectedLineCount, actual: actualLineCount },
|
|
491
|
+
}),
|
|
492
|
+
], { showData }));
|
|
493
|
+
return 1;
|
|
494
|
+
}
|
|
495
|
+
out(`verified. archive matches chain_rotated payload.`);
|
|
496
|
+
out(` archive: ${archiveName}`);
|
|
497
|
+
out(` sha256: ${actualDigest}`);
|
|
498
|
+
out(` lines: ${actualLineCount}`);
|
|
499
|
+
out(` rotation event seq: ${mostRecentRotation.seq}`);
|
|
500
|
+
return 0;
|
|
501
|
+
}
|
|
502
|
+
function countNonEmptyLines(raw) {
|
|
503
|
+
if (raw.length === 0)
|
|
504
|
+
return 0;
|
|
505
|
+
const trailingNewline = raw.endsWith('\n');
|
|
506
|
+
const parts = raw.split('\n');
|
|
507
|
+
const lines = trailingNewline ? parts.slice(0, -1) : parts;
|
|
508
|
+
return lines.filter((l) => l.length > 0).length;
|
|
509
|
+
}
|
|
510
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/shell/commands/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,9 @@ export interface GatesRunCommandOptions {
|
|
|
5
5
|
readonly env?: NodeJS.ProcessEnv;
|
|
6
6
|
readonly out?: (line: string) => void;
|
|
7
7
|
readonly err?: (line: string) => void;
|
|
8
|
-
/**
|
|
8
|
+
/** Legacy test-only args to pass to an injected report runner. */
|
|
9
9
|
readonly subprocessArgs?: readonly string[];
|
|
10
|
-
/** Injected
|
|
10
|
+
/** Injected legacy report runner (tests). Production omits this. */
|
|
11
11
|
readonly runner?: QualityGatesRunner;
|
|
12
12
|
/** Show structured data on rendered diagnostics. */
|
|
13
13
|
readonly showData?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/gates.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/gates.ts"],"names":[],"mappings":"AA6DA,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAMxC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kEAAkE;IAClE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IACrC,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAyDD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,sBAAsB,EAC/B,IAAI,GAAE,sBAA2B,GAChC,MAAM,CA4NR"}
|