@indigoai-us/hq-cloud 6.0.2 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/rescue-drift-reconcile.test.js +1 -1
- package/dist/cli/rescue-drift-reconcile.test.js.map +1 -1
- package/dist/cli/rescue-mtime-preserve.test.d.ts +2 -0
- package/dist/cli/rescue-mtime-preserve.test.d.ts.map +1 -0
- package/dist/cli/rescue-mtime-preserve.test.js +162 -0
- package/dist/cli/rescue-mtime-preserve.test.js.map +1 -0
- package/dist/skill-telemetry.d.ts +27 -0
- package/dist/skill-telemetry.d.ts.map +1 -1
- package/dist/skill-telemetry.js +117 -4
- package/dist/skill-telemetry.js.map +1 -1
- package/dist/skill-telemetry.test.js +159 -7
- package/dist/skill-telemetry.test.js.map +1 -1
- package/package.json +1 -1
- package/scripts/replace-rescue.sh +90 -11
- package/src/cli/rescue-drift-reconcile.test.ts +1 -1
- package/src/cli/rescue-mtime-preserve.test.ts +182 -0
- package/src/skill-telemetry.test.ts +220 -7
- package/src/skill-telemetry.ts +129 -4
|
@@ -2,7 +2,7 @@ import { describe, it, expect } from "vitest";
|
|
|
2
2
|
import { promises as fs } from "node:fs";
|
|
3
3
|
import * as os from "node:os";
|
|
4
4
|
import * as path from "node:path";
|
|
5
|
-
import { extractSkillEvents, collectAndSendSkillTelemetry } from "./skill-telemetry.js";
|
|
5
|
+
import { extractSkillEvents, extractCodexSkillEvents, parseCodexSessionMeta, collectAndSendSkillTelemetry, } from "./skill-telemetry.js";
|
|
6
6
|
describe("extractSkillEvents", () => {
|
|
7
7
|
it("extracts a user-typed slash command with args", () => {
|
|
8
8
|
const row = {
|
|
@@ -86,6 +86,60 @@ describe("extractSkillEvents", () => {
|
|
|
86
86
|
expect(extractSkillEvents("nope")).toEqual([]);
|
|
87
87
|
});
|
|
88
88
|
});
|
|
89
|
+
describe("extractCodexSkillEvents (Codex CLI rollouts)", () => {
|
|
90
|
+
const ctx = { sessionId: "019ea34e-4a2b-7241-b8e3-1023abb57c6b", cwd: "/home/ec2-user/hq" };
|
|
91
|
+
it("extracts a typed slash skill from a user_message, attributing session ctx", () => {
|
|
92
|
+
const row = {
|
|
93
|
+
timestamp: "2026-06-07T18:17:57.722Z",
|
|
94
|
+
type: "event_msg",
|
|
95
|
+
payload: { type: "user_message", message: "/indigo:hello-world", images: [], local_images: [], text_elements: [] },
|
|
96
|
+
};
|
|
97
|
+
expect(extractCodexSkillEvents(row, ctx)).toEqual([
|
|
98
|
+
{
|
|
99
|
+
skill: "indigo:hello-world",
|
|
100
|
+
source: "typed",
|
|
101
|
+
sessionId: ctx.sessionId,
|
|
102
|
+
timestamp: "2026-06-07T18:17:57.722Z",
|
|
103
|
+
cwd: ctx.cwd,
|
|
104
|
+
uuid: `codex:${ctx.sessionId}:2026-06-07T18:17:57.722Z:indigo:hello-world`,
|
|
105
|
+
hasArgs: false,
|
|
106
|
+
},
|
|
107
|
+
]);
|
|
108
|
+
});
|
|
109
|
+
it("sets hasArgs true when the command has trailing args, without leaking them", () => {
|
|
110
|
+
const row = {
|
|
111
|
+
timestamp: "2026-06-07T18:18:00.000Z",
|
|
112
|
+
type: "event_msg",
|
|
113
|
+
payload: { type: "user_message", message: "/indigo:signals refresh secret-arg-value" },
|
|
114
|
+
};
|
|
115
|
+
const ev = extractCodexSkillEvents(row, ctx)[0];
|
|
116
|
+
expect(ev).toMatchObject({ skill: "indigo:signals", source: "typed", hasArgs: true });
|
|
117
|
+
expect(JSON.stringify(ev)).not.toContain("secret-arg-value");
|
|
118
|
+
});
|
|
119
|
+
it("rejects file-path-like and non-command user messages", () => {
|
|
120
|
+
const mk = (message) => ({ type: "event_msg", payload: { type: "user_message", message } });
|
|
121
|
+
expect(extractCodexSkillEvents(mk("/etc/hosts please read this"), ctx)).toEqual([]);
|
|
122
|
+
expect(extractCodexSkillEvents(mk("just a normal prompt"), ctx)).toEqual([]);
|
|
123
|
+
expect(extractCodexSkillEvents(mk(""), ctx)).toEqual([]);
|
|
124
|
+
});
|
|
125
|
+
it("ignores non-user_message rows (session_meta, lifecycle, assistant)", () => {
|
|
126
|
+
expect(extractCodexSkillEvents({ type: "session_meta", payload: { id: "x", cwd: "/y" } }, ctx)).toEqual([]);
|
|
127
|
+
expect(extractCodexSkillEvents({ type: "event_msg", payload: { type: "task_started" } }, ctx)).toEqual([]);
|
|
128
|
+
// The duplicate `response_item` (role:user) Codex also writes must NOT
|
|
129
|
+
// double-count — only the `event_msg` user_message is the signal.
|
|
130
|
+
expect(extractCodexSkillEvents({ type: "response_item", payload: { type: "message", role: "user", content: [{ type: "input_text", text: "/indigo:hello-world" }] } }, ctx)).toEqual([]);
|
|
131
|
+
expect(extractCodexSkillEvents(null, ctx)).toEqual([]);
|
|
132
|
+
});
|
|
133
|
+
it("omits the synthesized uuid when session ctx is missing (safe-fail)", () => {
|
|
134
|
+
const row = { timestamp: "2026-06-07T18:17:57.722Z", type: "event_msg", payload: { type: "user_message", message: "/deploy" } };
|
|
135
|
+
expect(extractCodexSkillEvents(row, {})[0]).toMatchObject({ skill: "deploy", source: "typed", uuid: undefined });
|
|
136
|
+
});
|
|
137
|
+
it("parseCodexSessionMeta reads id + cwd, and returns null for other rows", () => {
|
|
138
|
+
expect(parseCodexSessionMeta({ type: "session_meta", payload: { id: "sess-x", cwd: "/home/ec2-user/hq", originator: "codex_exec" } })).toEqual({ sessionId: "sess-x", cwd: "/home/ec2-user/hq" });
|
|
139
|
+
expect(parseCodexSessionMeta({ type: "event_msg", payload: {} })).toBeNull();
|
|
140
|
+
expect(parseCodexSessionMeta(null)).toBeNull();
|
|
141
|
+
});
|
|
142
|
+
});
|
|
89
143
|
describe("collectAndSendSkillTelemetry — hqRoot scoping", () => {
|
|
90
144
|
function stubClient(captured) {
|
|
91
145
|
return {
|
|
@@ -123,6 +177,7 @@ describe("collectAndSendSkillTelemetry — hqRoot scoping", () => {
|
|
|
123
177
|
installerVersion: "test",
|
|
124
178
|
hqRoot,
|
|
125
179
|
claudeProjectsRoot: projects,
|
|
180
|
+
codexSessionsRoot: path.join(tmp, "codex"),
|
|
126
181
|
cursorPath: path.join(tmp, "cursor.json"),
|
|
127
182
|
});
|
|
128
183
|
const skills = captured.flatMap((b) => b.events.map((e) => e.skill));
|
|
@@ -141,9 +196,9 @@ describe("collectAndSendSkillTelemetry — hqRoot scoping", () => {
|
|
|
141
196
|
const cursorPath = path.join(tmp, "cursor.json");
|
|
142
197
|
const captured = [];
|
|
143
198
|
const client = stubClient(captured);
|
|
144
|
-
const r1 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, cursorPath });
|
|
199
|
+
const r1 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, codexSessionsRoot: path.join(tmp, "codex"), cursorPath });
|
|
145
200
|
expect(r1.eventsSent).toBe(1);
|
|
146
|
-
const r2 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, cursorPath });
|
|
201
|
+
const r2 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, codexSessionsRoot: path.join(tmp, "codex"), cursorPath });
|
|
147
202
|
expect(r2.eventsSent).toBe(0); // cursor at EOF → nothing re-sent
|
|
148
203
|
await fs.rm(tmp, { recursive: true, force: true });
|
|
149
204
|
});
|
|
@@ -169,10 +224,10 @@ describe("collectAndSendSkillTelemetry — hqRoot scoping", () => {
|
|
|
169
224
|
return { ok: true, written: batch.events.length, skipped: [] };
|
|
170
225
|
},
|
|
171
226
|
};
|
|
172
|
-
const r1 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, cursorPath });
|
|
227
|
+
const r1 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, codexSessionsRoot: path.join(tmp, "codex"), cursorPath });
|
|
173
228
|
expect(r1.eventsSent).toBe(0); // post threw → nothing committed
|
|
174
229
|
expect(captured).toHaveLength(0);
|
|
175
|
-
const r2 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, cursorPath });
|
|
230
|
+
const r2 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, codexSessionsRoot: path.join(tmp, "codex"), cursorPath });
|
|
176
231
|
expect(r2.eventsSent).toBe(1); // re-scanned from offset 0 and delivered
|
|
177
232
|
expect(captured.flatMap((b) => b.events.map((e) => e.skill))).toEqual(["deploy"]);
|
|
178
233
|
await fs.rm(tmp, { recursive: true, force: true });
|
|
@@ -187,10 +242,10 @@ describe("collectAndSendSkillTelemetry — hqRoot scoping", () => {
|
|
|
187
242
|
const cursorPath = path.join(tmp, "cursor.json");
|
|
188
243
|
const captured = [];
|
|
189
244
|
const client = stubClient(captured);
|
|
190
|
-
await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, cursorPath });
|
|
245
|
+
await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, codexSessionsRoot: path.join(tmp, "codex"), cursorPath });
|
|
191
246
|
// New invocation appended after the first clean run.
|
|
192
247
|
await fs.appendFile(file, row({ type: "assistant", sessionId: "s1", timestamp: "2026-06-04T09:05:00Z", cwd: "/x", message: { role: "assistant", content: [{ type: "tool_use", id: "t9", name: "Skill", input: { skill: "land" } }] } }) + "\n", "utf-8");
|
|
193
|
-
const r2 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, cursorPath });
|
|
248
|
+
const r2 = await collectAndSendSkillTelemetry({ client, machineId: "m", installerVersion: "t", claudeProjectsRoot: projects, codexSessionsRoot: path.join(tmp, "codex"), cursorPath });
|
|
194
249
|
expect(r2.eventsSent).toBe(1);
|
|
195
250
|
// Only the appended event — not the original — is re-sent.
|
|
196
251
|
const lastBatch = captured[captured.length - 1];
|
|
@@ -209,11 +264,108 @@ describe("collectAndSendSkillTelemetry — hqRoot scoping", () => {
|
|
|
209
264
|
machineId: "m-test",
|
|
210
265
|
installerVersion: "test",
|
|
211
266
|
claudeProjectsRoot: projects,
|
|
267
|
+
codexSessionsRoot: path.join(tmp, "codex"),
|
|
212
268
|
cursorPath: path.join(tmp, "cursor.json"),
|
|
213
269
|
});
|
|
214
270
|
expect(result.eventsSent).toBe(1);
|
|
215
271
|
expect(captured[0].events[0].skill).toBe("anywhere-skill");
|
|
216
272
|
await fs.rm(tmp, { recursive: true, force: true });
|
|
217
273
|
});
|
|
274
|
+
// ── Codex CLI rollouts ────────────────────────────────────────────────────
|
|
275
|
+
// Build a realistic Codex rollout: a leading session_meta, the environment
|
|
276
|
+
// boilerplate Codex writes (which must be ignored), then the typed commands.
|
|
277
|
+
function codexRollout(sessionId, cwd, messages) {
|
|
278
|
+
const lines = [
|
|
279
|
+
row({ timestamp: "2026-06-07T18:16:56.480Z", type: "session_meta", payload: { id: sessionId, cwd, originator: "codex_exec", cli_version: "0.137.0", source: "exec" } }),
|
|
280
|
+
row({ timestamp: "2026-06-07T18:16:56.718Z", type: "response_item", payload: { type: "message", role: "user", content: [{ type: "input_text", text: "<environment_context>\n <cwd>" + cwd + "</cwd>\n</environment_context>" }] } }),
|
|
281
|
+
...messages.flatMap((message, i) => [
|
|
282
|
+
// Codex writes BOTH a response_item (role:user) and an event_msg for the
|
|
283
|
+
// same input; only the event_msg must be counted (no double-count).
|
|
284
|
+
row({ timestamp: `2026-06-07T18:17:0${i}.000Z`, type: "response_item", payload: { type: "message", role: "user", content: [{ type: "input_text", text: message }] } }),
|
|
285
|
+
row({ timestamp: `2026-06-07T18:17:0${i}.000Z`, type: "event_msg", payload: { type: "user_message", message, images: [], local_images: [], text_elements: [] } }),
|
|
286
|
+
]),
|
|
287
|
+
];
|
|
288
|
+
return lines.join("\n") + "\n";
|
|
289
|
+
}
|
|
290
|
+
it("captures Codex typed slash skills scoped to hqRoot, excluding other cwds + dupes", async () => {
|
|
291
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "skill-tel-codex-"));
|
|
292
|
+
const codex = path.join(tmp, "sessions", "2026", "06", "07");
|
|
293
|
+
await fs.mkdir(codex, { recursive: true });
|
|
294
|
+
const hqRoot = "/home/ec2-user/hq";
|
|
295
|
+
await fs.writeFile(path.join(codex, "rollout-2026-06-07T18-16-56-aaaa.jsonl"), codexRollout("sess-codex-1", hqRoot, ["/indigo:hello-world", "/indigo:signals refresh"]), "utf-8");
|
|
296
|
+
// A second rollout from a different repo — must be excluded by hqRoot scope.
|
|
297
|
+
await fs.writeFile(path.join(codex, "rollout-2026-06-07T18-20-00-bbbb.jsonl"), codexRollout("sess-codex-2", "/home/ec2-user/other", ["/secret-skill"]), "utf-8");
|
|
298
|
+
const captured = [];
|
|
299
|
+
const result = await collectAndSendSkillTelemetry({
|
|
300
|
+
client: stubClient(captured),
|
|
301
|
+
machineId: "m",
|
|
302
|
+
installerVersion: "t",
|
|
303
|
+
hqRoot,
|
|
304
|
+
claudeProjectsRoot: path.join(tmp, "no-claude"),
|
|
305
|
+
codexSessionsRoot: path.join(tmp, "sessions"),
|
|
306
|
+
cursorPath: path.join(tmp, "cursor.json"),
|
|
307
|
+
});
|
|
308
|
+
const events = captured.flatMap((b) => b.events);
|
|
309
|
+
// No double-count from the duplicate response_item rows.
|
|
310
|
+
expect(result.eventsSent).toBe(2);
|
|
311
|
+
expect(events.map((e) => e.skill).sort()).toEqual(["indigo:hello-world", "indigo:signals"]);
|
|
312
|
+
// Codex invocations are recorded as the typed source.
|
|
313
|
+
expect(events.every((e) => e.source === "typed")).toBe(true);
|
|
314
|
+
// The other-repo Codex invocation never leaves the machine.
|
|
315
|
+
expect(events.map((e) => e.skill)).not.toContain("secret-skill");
|
|
316
|
+
await fs.rm(tmp, { recursive: true, force: true });
|
|
317
|
+
});
|
|
318
|
+
it("captures Claude and Codex skills together in a single run", async () => {
|
|
319
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "skill-tel-both-"));
|
|
320
|
+
const projects = path.join(tmp, "projects", "-home-ec2-user-hq");
|
|
321
|
+
const codex = path.join(tmp, "sessions", "2026", "06", "07");
|
|
322
|
+
await fs.mkdir(projects, { recursive: true });
|
|
323
|
+
await fs.mkdir(codex, { recursive: true });
|
|
324
|
+
const hqRoot = "/home/ec2-user/hq";
|
|
325
|
+
await fs.writeFile(path.join(projects, "a.jsonl"), row({ type: "assistant", sessionId: "s1", timestamp: "2026-06-07T10:00:00Z", cwd: hqRoot, message: { role: "assistant", content: [{ type: "tool_use", id: "t1", name: "Skill", input: { skill: "indigo:crm-management" } }] } }) + "\n", "utf-8");
|
|
326
|
+
await fs.writeFile(path.join(codex, "rollout-x.jsonl"), codexRollout("sess-codex-1", hqRoot, ["/indigo:hello-world"]), "utf-8");
|
|
327
|
+
const captured = [];
|
|
328
|
+
const result = await collectAndSendSkillTelemetry({
|
|
329
|
+
client: stubClient(captured),
|
|
330
|
+
machineId: "m",
|
|
331
|
+
installerVersion: "t",
|
|
332
|
+
hqRoot,
|
|
333
|
+
claudeProjectsRoot: path.join(tmp, "projects"),
|
|
334
|
+
codexSessionsRoot: path.join(tmp, "sessions"),
|
|
335
|
+
cursorPath: path.join(tmp, "cursor.json"),
|
|
336
|
+
});
|
|
337
|
+
expect(result.eventsSent).toBe(2);
|
|
338
|
+
const events = captured.flatMap((b) => b.events);
|
|
339
|
+
expect(events.find((e) => e.skill === "indigo:crm-management")?.source).toBe("model");
|
|
340
|
+
expect(events.find((e) => e.skill === "indigo:hello-world")?.source).toBe("typed");
|
|
341
|
+
await fs.rm(tmp, { recursive: true, force: true });
|
|
342
|
+
});
|
|
343
|
+
it("reads Codex session ctx from the top on an incremental (cursor mid-file) run", async () => {
|
|
344
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), "skill-tel-incr-"));
|
|
345
|
+
const codex = path.join(tmp, "sessions", "2026", "06", "07");
|
|
346
|
+
await fs.mkdir(codex, { recursive: true });
|
|
347
|
+
const hqRoot = "/home/ec2-user/hq";
|
|
348
|
+
const file = path.join(codex, "rollout-incr.jsonl");
|
|
349
|
+
await fs.writeFile(file, codexRollout("sess-incr", hqRoot, ["/indigo:hello-world"]), "utf-8");
|
|
350
|
+
const cursorPath = path.join(tmp, "cursor.json");
|
|
351
|
+
const captured = [];
|
|
352
|
+
const client = stubClient(captured);
|
|
353
|
+
const base = { client, machineId: "m", installerVersion: "t", hqRoot, claudeProjectsRoot: path.join(tmp, "no-claude"), codexSessionsRoot: path.join(tmp, "sessions"), cursorPath };
|
|
354
|
+
const r1 = await collectAndSendSkillTelemetry(base);
|
|
355
|
+
expect(r1.eventsSent).toBe(1);
|
|
356
|
+
// Append a new typed command AFTER the session_meta line. The cursor now
|
|
357
|
+
// sits mid-file, so the new event's cwd/sessionId must still come from the
|
|
358
|
+
// session_meta at the top — proving readCodexSessionContext reads offset 0.
|
|
359
|
+
await fs.appendFile(file, row({ timestamp: "2026-06-07T18:30:00.000Z", type: "event_msg", payload: { type: "user_message", message: "/indigo:action-items" } }) + "\n", "utf-8");
|
|
360
|
+
const r2 = await collectAndSendSkillTelemetry(base);
|
|
361
|
+
expect(r2.eventsSent).toBe(1);
|
|
362
|
+
const last = captured[captured.length - 1].events[0];
|
|
363
|
+
expect(last.skill).toBe("indigo:action-items");
|
|
364
|
+
// cwd survived → it passed the hqRoot scope filter (would be dropped if the
|
|
365
|
+
// session_meta weren't re-read from the top on this mid-file run).
|
|
366
|
+
expect(last.cwd).toBe(hqRoot);
|
|
367
|
+
expect(last.sessionId).toBe("sess-incr");
|
|
368
|
+
await fs.rm(tmp, { recursive: true, force: true });
|
|
369
|
+
});
|
|
218
370
|
});
|
|
219
371
|
//# sourceMappingURL=skill-telemetry.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-telemetry.test.js","sourceRoot":"","sources":["../src/skill-telemetry.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skill-telemetry.test.js","sourceRoot":"","sources":["../src/skill-telemetry.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -467,12 +467,20 @@ fi
|
|
|
467
467
|
TMPDIR="$(mktemp -d -t hq-replace-rescue-XXXXXX)"
|
|
468
468
|
trap 'rm -rf "$TMPDIR"' EXIT
|
|
469
469
|
|
|
470
|
-
# Append-only record of every file the walk MOVES (rescue) or
|
|
470
|
+
# Append-only record of every file the walk MOVES (rescue) or LEAVES in place
|
|
471
471
|
# (unchanged). Folded into the snapshot's RECOVERY.md manifest after the run
|
|
472
472
|
# so a user can see exactly what changed and restore any single file.
|
|
473
473
|
RESCUE_LOG="$TMPDIR/rescue-actions.log"
|
|
474
474
|
: > "$RESCUE_LOG"
|
|
475
475
|
|
|
476
|
+
# Paths the walk classified UNCHANGED (left in place). Fed to the overlay as an
|
|
477
|
+
# --exclude-from so rsync never touches them — preserving their on-disk mtime
|
|
478
|
+
# exactly (Layer 1). rsync's -t re-stamps even a checksum-skipped file to the
|
|
479
|
+
# source's time, so excluding is the only way to leave the local mtime truly
|
|
480
|
+
# untouched.
|
|
481
|
+
UNCHANGED_LIST="$TMPDIR/unchanged-paths.txt"
|
|
482
|
+
: > "$UNCHANGED_LIST"
|
|
483
|
+
|
|
476
484
|
# Build the clone URL. If GH_TOKEN is set in the environment, inject it as
|
|
477
485
|
# the basic-auth user so `git clone` can access private staging repos
|
|
478
486
|
# without an interactive credential prompt. This is the form the GitHub
|
|
@@ -518,6 +526,51 @@ fi
|
|
|
518
526
|
SRC_SHA="$(cd "$TMPDIR/src" && git rev-parse HEAD)"
|
|
519
527
|
echo "==> Source SHA: $SRC_SHA"
|
|
520
528
|
|
|
529
|
+
# --- Restore file mtimes from git history (mtime-preservation fix) -----------
|
|
530
|
+
#
|
|
531
|
+
# A bare `git clone`/checkout stamps every working-tree file with clone-time
|
|
532
|
+
# (git stores no per-file mtimes), so the `rsync -a` overlay below would reset
|
|
533
|
+
# every rescued file's mtime to "whenever rescue ran" — collapsing all history
|
|
534
|
+
# onto one instant and breaking "newer-than" comparisons, mtime-keyed caches,
|
|
535
|
+
# and reproducible state across machines. This is the rescue-path analogue of
|
|
536
|
+
# the 5.37.0 `hq-mtime` fix on the sync/S3 path, sourced from git commit times
|
|
537
|
+
# because the rescue source is a clone, not the vault.
|
|
538
|
+
#
|
|
539
|
+
# Single history walk, newest-first: the first commit a path appears in is its
|
|
540
|
+
# last-modifying commit, and that commit's committer-date becomes the file's
|
|
541
|
+
# mtime. Applied via perl's utime() — portable across macOS/Linux, unlike
|
|
542
|
+
# `touch -d @epoch` (GNU-only). Symlinks are skipped (utime follows the link
|
|
543
|
+
# to its target). Deleted-then-readded paths resolve correctly: newest wins.
|
|
544
|
+
restore_mtimes_from_git() {
|
|
545
|
+
local src="$1"
|
|
546
|
+
if ! command -v perl >/dev/null 2>&1; then
|
|
547
|
+
echo " (perl unavailable; skipping mtime restore — overlay mtimes stay clone-time)"
|
|
548
|
+
return 0
|
|
549
|
+
fi
|
|
550
|
+
|
|
551
|
+
# Correct per-file granularity needs full history. A shallow clone knows
|
|
552
|
+
# only the tip commit, so every file would collapse to the release time;
|
|
553
|
+
# deepen (blob:none keeps it to cheap commit/tree metadata) when shallow.
|
|
554
|
+
if [ "$(git -C "$src" rev-parse --is-shallow-repository 2>/dev/null)" = "true" ]; then
|
|
555
|
+
echo "==> Deepening clone for per-file mtime history (blob:none) ..."
|
|
556
|
+
git -C "$src" fetch --unshallow --filter=blob:none >/dev/null 2>&1 \
|
|
557
|
+
|| echo " (unshallow failed; mtimes fall back to release tip-commit time)"
|
|
558
|
+
fi
|
|
559
|
+
|
|
560
|
+
echo "==> Restoring file mtimes from git commit history ..."
|
|
561
|
+
git -C "$src" log --no-renames --pretty=format:'C:%ct' --name-only --diff-filter=ACMR 2>/dev/null \
|
|
562
|
+
| awk '/^C:/ { ts = substr($0, 3); next } NF { if (!seen[$0]++) print ts "\t" $0 }' \
|
|
563
|
+
| SRC="$src" perl -ne '
|
|
564
|
+
chomp;
|
|
565
|
+
my ($ts, $rel) = split(/\t/, $_, 2);
|
|
566
|
+
next unless defined $rel and length $rel;
|
|
567
|
+
my $f = "$ENV{SRC}/$rel";
|
|
568
|
+
next if -l $f or not -f $f;
|
|
569
|
+
utime $ts, $ts, $f;
|
|
570
|
+
' || true
|
|
571
|
+
}
|
|
572
|
+
restore_mtimes_from_git "$TMPDIR/src"
|
|
573
|
+
|
|
521
574
|
# --- Resolve the history floor (last-sync SHA reachable in clone?) ----------
|
|
522
575
|
#
|
|
523
576
|
# The v0.1.104 algorithm drops the path → all-time-SHA index in favour of
|
|
@@ -1090,13 +1143,30 @@ process_one() {
|
|
|
1090
1143
|
fi
|
|
1091
1144
|
fi
|
|
1092
1145
|
else
|
|
1093
|
-
#
|
|
1146
|
+
# user_edited=0: local matches the floor baseline (user didn't touch it).
|
|
1147
|
+
# That does NOT mean it matches upstream HEAD — upstream may have advanced
|
|
1148
|
+
# or removed it. Split on byte-equality to the HEAD version the overlay
|
|
1149
|
+
# would write ($TMPDIR/src is checked out at HEAD):
|
|
1150
|
+
# identical to HEAD -> overlay is a content no-op; leave it untouched and
|
|
1151
|
+
# protect it from the overlay so its mtime is preserved (Layer 1).
|
|
1152
|
+
# differs from HEAD -> keep the original delete semantics: rm now; the
|
|
1153
|
+
# no-delete overlay re-lays it from source (with a git-commit mtime)
|
|
1154
|
+
# when still upstream, or leaves it gone when upstream removed it.
|
|
1094
1155
|
COUNT_UNCHANGED=$((COUNT_UNCHANGED + 1))
|
|
1095
|
-
if
|
|
1096
|
-
|
|
1156
|
+
if cmp -s "$local_path" "$TMPDIR/src/$rel" 2>/dev/null; then
|
|
1157
|
+
if [ "$DRY_RUN" = "1" ]; then
|
|
1158
|
+
echo " unchanged (preserved in place): $rel"
|
|
1159
|
+
else
|
|
1160
|
+
printf '/%s\n' "$rel" >> "$UNCHANGED_LIST"
|
|
1161
|
+
printf 'unchanged\t%s\t(identical to upstream; left in place, mtime preserved)\n' "$rel" >> "$RESCUE_LOG" 2>/dev/null || true
|
|
1162
|
+
fi
|
|
1097
1163
|
else
|
|
1098
|
-
|
|
1099
|
-
|
|
1164
|
+
if [ "$DRY_RUN" = "1" ]; then
|
|
1165
|
+
echo " unchanged (delete + replace): $rel"
|
|
1166
|
+
else
|
|
1167
|
+
rm -f "$local_path"
|
|
1168
|
+
printf 'deleted\t%s\t(unchanged vs baseline; re-laid by overlay if still upstream)\n' "$rel" >> "$RESCUE_LOG" 2>/dev/null || true
|
|
1169
|
+
fi
|
|
1100
1170
|
fi
|
|
1101
1171
|
fi
|
|
1102
1172
|
}
|
|
@@ -1211,7 +1281,7 @@ if [ "$DRY_RUN" = "1" ]; then
|
|
|
1211
1281
|
echo ""
|
|
1212
1282
|
echo "==> DRY RUN classification summary:"
|
|
1213
1283
|
echo " user-only (leave in place): $COUNT_USER_ONLY files"
|
|
1214
|
-
echo " unchanged (
|
|
1284
|
+
echo " unchanged (preserved/re-laid): $COUNT_UNCHANGED files"
|
|
1215
1285
|
echo " user-edit (rescue / diff-append): $COUNT_USER_EDIT files"
|
|
1216
1286
|
echo " user-edit (conflict quarantine): $COUNT_USER_CONFLICT files"
|
|
1217
1287
|
echo " user-edit (overwrite-safe): $COUNT_USER_OVERWRITE files"
|
|
@@ -1270,7 +1340,7 @@ for sp in "${PRESERVE_SUBPATHS[@]+"${PRESERVE_SUBPATHS[@]}"}"; do
|
|
|
1270
1340
|
done
|
|
1271
1341
|
|
|
1272
1342
|
echo ""
|
|
1273
|
-
echo "==> Walk complete (user-only: $COUNT_USER_ONLY, unchanged
|
|
1343
|
+
echo "==> Walk complete (user-only: $COUNT_USER_ONLY, unchanged: $COUNT_UNCHANGED, user-edit-rescued: $COUNT_USER_EDIT, conflict-quarantined: $COUNT_USER_CONFLICT, overwrite-safe: $COUNT_USER_OVERWRITE, cloud-symlink-reconciled: $COUNT_CLOUD_SYMLINK_RECONCILED, symlinks-dropped: $COUNT_SYMLINK_DROPPED)"
|
|
1274
1344
|
# Note: v0.1.103-and-earlier did a wholesale `rm -rf` of every wipe-set
|
|
1275
1345
|
# top-level entry here. The new walk_and_process does per-file deletion
|
|
1276
1346
|
# (only files that exist in upstream + are unchanged are deleted; user-only
|
|
@@ -1279,7 +1349,16 @@ echo "==> Walk complete (user-only: $COUNT_USER_ONLY, unchanged-deleted: $COUNT_
|
|
|
1279
1349
|
# the walk left alone.
|
|
1280
1350
|
|
|
1281
1351
|
echo "==> Overlaying source onto HQ root ..."
|
|
1282
|
-
|
|
1352
|
+
# Protect UNCHANGED (identical-to-HEAD) files: feed their paths as an
|
|
1353
|
+
# --exclude-from (FIRST in the filter chain, so it wins) so rsync never touches
|
|
1354
|
+
# them — -a's -t would otherwise re-stamp their mtime to the source's time, and
|
|
1355
|
+
# excluding is the only way to leave the local mtime truly untouched (Layer 1).
|
|
1356
|
+
# Every other file under the wipe set was already rm'd by the walk, so the
|
|
1357
|
+
# overlay writes into an absent slot and -a carries the git-commit mtimes
|
|
1358
|
+
# restore_mtimes_from_git stamped onto the source.
|
|
1359
|
+
OVERLAY_PROTECT=()
|
|
1360
|
+
[ -s "$UNCHANGED_LIST" ] && OVERLAY_PROTECT=( --exclude-from="$UNCHANGED_LIST" )
|
|
1361
|
+
rsync -a "${OVERLAY_PROTECT[@]+"${OVERLAY_PROTECT[@]}"}" "${RSYNC_EXCLUDES[@]}" "$TMPDIR/src/" "$HQ_ROOT/"
|
|
1283
1362
|
|
|
1284
1363
|
if [ -s "$TMPDIR/preserve.map" ]; then
|
|
1285
1364
|
echo "==> Restoring preserved sub-paths ..."
|
|
@@ -1355,7 +1434,7 @@ done
|
|
|
1355
1434
|
echo ""
|
|
1356
1435
|
echo "==> Classification:"
|
|
1357
1436
|
echo " user-only (left in place): $COUNT_USER_ONLY files"
|
|
1358
|
-
echo " unchanged (
|
|
1437
|
+
echo " unchanged (preserved/re-laid): $COUNT_UNCHANGED files"
|
|
1359
1438
|
echo " user-edits (rescued): $COUNT_USER_EDIT files"
|
|
1360
1439
|
echo " user-edits (conflict quarantine): $COUNT_USER_CONFLICT files"
|
|
1361
1440
|
echo " user-edits (overwrite-safe): $COUNT_USER_OVERWRITE files"
|
|
@@ -1390,7 +1469,7 @@ if [ "$DO_BACKUP" = "1" ] && [ -n "$BACKUP_DIR" ] && [ -d "$BACKUP_DIR" ]; then
|
|
|
1390
1469
|
echo ""
|
|
1391
1470
|
echo "## What the rescue did"
|
|
1392
1471
|
echo " user-only (left in place): $COUNT_USER_ONLY"
|
|
1393
|
-
echo " unchanged (
|
|
1472
|
+
echo " unchanged (preserved/re-laid): $COUNT_UNCHANGED"
|
|
1394
1473
|
echo " user-edit (rescued into personal/): $COUNT_USER_EDIT"
|
|
1395
1474
|
echo " user-edit (conflict quarantine): $COUNT_USER_CONFLICT"
|
|
1396
1475
|
echo " user-edit (overwrite-safe): $COUNT_USER_OVERWRITE"
|
|
@@ -150,7 +150,7 @@ exec ${JSON.stringify(realGit)} "$@"
|
|
|
150
150
|
expect(out).toContain("user-edit (rescue): core/edited.md -> personal/edited.md");
|
|
151
151
|
|
|
152
152
|
// Untouched file classified UNCHANGED.
|
|
153
|
-
expect(out).toContain("unchanged (
|
|
153
|
+
expect(out).toContain("unchanged (preserved in place): core/keep.md");
|
|
154
154
|
|
|
155
155
|
// Summary reflects exactly one reconcile.
|
|
156
156
|
expect(out).toMatch(/drift reconciled \(== upstream\):\s+1 files/);
|