things-api 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +2 -2
  2. package/dist/cli/commands/area.d.ts +5 -5
  3. package/dist/cli/commands/area.js +12 -7
  4. package/dist/cli/commands/area.js.map +1 -1
  5. package/dist/cli/commands/project.js +1 -1
  6. package/dist/cli/commands/project.js.map +1 -1
  7. package/dist/cli/commands/reads.js +21 -12
  8. package/dist/cli/commands/reads.js.map +1 -1
  9. package/dist/cli/commands/show.js +6 -2
  10. package/dist/cli/commands/show.js.map +1 -1
  11. package/dist/cli/commands/todo.js +1 -1
  12. package/dist/cli/commands/todo.js.map +1 -1
  13. package/dist/cli/commands/writes.js +116 -70
  14. package/dist/cli/commands/writes.js.map +1 -1
  15. package/dist/cli/glyphs.d.ts +9 -2
  16. package/dist/cli/glyphs.js +11 -5
  17. package/dist/cli/glyphs.js.map +1 -1
  18. package/dist/cli/read-driver.d.ts +39 -9
  19. package/dist/cli/read-driver.js +37 -16
  20. package/dist/cli/read-driver.js.map +1 -1
  21. package/dist/cli/render.d.ts +25 -26
  22. package/dist/cli/render.js +57 -56
  23. package/dist/cli/render.js.map +1 -1
  24. package/dist/client.d.ts +92 -35
  25. package/dist/client.js +61 -18
  26. package/dist/client.js.map +1 -1
  27. package/dist/contracts.d.ts +23 -33
  28. package/dist/contracts.js +1 -1
  29. package/dist/contracts.js.map +1 -1
  30. package/dist/index.d.ts +5 -4
  31. package/dist/index.js +2 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/mcp/server.js +158 -144
  34. package/dist/mcp/server.js.map +1 -1
  35. package/dist/model/dates.d.ts +26 -0
  36. package/dist/model/dates.js +46 -4
  37. package/dist/model/dates.js.map +1 -1
  38. package/dist/read/area-filter.d.ts +1 -1
  39. package/dist/read/area-filter.js +5 -4
  40. package/dist/read/area-filter.js.map +1 -1
  41. package/dist/read/area-view.d.ts +0 -11
  42. package/dist/read/area-view.js +1 -5
  43. package/dist/read/area-view.js.map +1 -1
  44. package/dist/read/project-view.d.ts +34 -19
  45. package/dist/read/project-view.js +26 -20
  46. package/dist/read/project-view.js.map +1 -1
  47. package/dist/read/scope.d.ts +1 -1
  48. package/dist/read/scope.js +5 -4
  49. package/dist/read/scope.js.map +1 -1
  50. package/dist/read/shape.d.ts +73 -14
  51. package/dist/read/shape.js +459 -151
  52. package/dist/read/shape.js.map +1 -1
  53. package/dist/read/truncation.d.ts +75 -2
  54. package/dist/read/truncation.js +69 -46
  55. package/dist/read/truncation.js.map +1 -1
  56. package/dist/read/views.d.ts +19 -18
  57. package/dist/read/views.js +5 -6
  58. package/dist/read/views.js.map +1 -1
  59. package/dist/surface-copy.d.ts +6 -0
  60. package/dist/surface-copy.js +6 -0
  61. package/dist/surface-copy.js.map +1 -1
  62. package/dist/write/batch.js +0 -1
  63. package/dist/write/batch.js.map +1 -1
  64. package/dist/write/commands.d.ts +25 -1
  65. package/dist/write/commands.js +256 -121
  66. package/dist/write/commands.js.map +1 -1
  67. package/dist/write/guards.js +27 -11
  68. package/dist/write/guards.js.map +1 -1
  69. package/dist/write/move.d.ts +26 -5
  70. package/dist/write/move.js +313 -2
  71. package/dist/write/move.js.map +1 -1
  72. package/dist/write/operations.d.ts +49 -19
  73. package/dist/write/operations.js +2 -2
  74. package/dist/write/operations.js.map +1 -1
  75. package/dist/write/pipeline.js +25 -4
  76. package/dist/write/pipeline.js.map +1 -1
  77. package/dist/write/pre-state.d.ts +48 -28
  78. package/dist/write/pre-state.js +134 -13
  79. package/dist/write/pre-state.js.map +1 -1
  80. package/dist/write/reorder.js +3 -3
  81. package/dist/write/reorder.js.map +1 -1
  82. package/dist/write/resolution-timestamps.d.ts +34 -0
  83. package/dist/write/resolution-timestamps.js +286 -0
  84. package/dist/write/resolution-timestamps.js.map +1 -0
  85. package/dist/write/reversibility.js +5 -5
  86. package/dist/write/reversibility.js.map +1 -1
  87. package/dist/write/scope-guard.js +0 -5
  88. package/dist/write/scope-guard.js.map +1 -1
  89. package/dist/write/undo.d.ts +0 -6
  90. package/dist/write/undo.js +44 -4
  91. package/dist/write/undo.js.map +1 -1
  92. package/dist/write/vectors/applescript.js +14 -4
  93. package/dist/write/vectors/applescript.js.map +1 -1
  94. package/dist/write/vectors/url-scheme.js +0 -8
  95. package/dist/write/vectors/url-scheme.js.map +1 -1
  96. package/dist/write/verify/delta.d.ts +16 -2
  97. package/dist/write/verify/delta.js +21 -2
  98. package/dist/write/verify/delta.js.map +1 -1
  99. package/package.json +1 -1
  100. package/schema/envelope.schema.json +2 -78
  101. package/skills/things-cli/SKILL.md +7 -5
  102. package/skills/things-cli/references/contracts.md +3 -4
  103. package/skills/things-cli/references/model.md +8 -8
  104. package/skills/things-cli/references/ordering.md +16 -7
@@ -0,0 +1,286 @@
1
+ import { resolveProjectWriteTarget, resolveTaskUuidPrefix } from "../read/queries.js";
2
+ import { resolutionDeltaDate } from "./commands.js";
3
+ import { loadTarget, projectChildren } from "./pre-state.js";
4
+ import { fingerprintLabel, runMutation, } from "./pipeline.js";
5
+ /** Dispatch a cataloged op with dynamic (op-erased) params. */
6
+ function exec(deps, op, params, options) {
7
+ return runMutation(deps, op, params, options);
8
+ }
9
+ function newTxnId(now) {
10
+ return `txn-${now.getTime().toString(36)}-${process.pid.toString(36)}`;
11
+ }
12
+ function legOptions(base, txnId, vector) {
13
+ const out = { txn: { id: txnId, role: "leg" }, vector };
14
+ if (base.actor !== undefined)
15
+ out.actor = base.actor;
16
+ if (base.verifyTimeoutMs !== undefined)
17
+ out.verifyTimeoutMs = base.verifyTimeoutMs;
18
+ if (base.maxDisruption !== undefined)
19
+ out.maxDisruption = base.maxDisruption;
20
+ if (base.zone !== undefined)
21
+ out.zone = base.zone;
22
+ return out;
23
+ }
24
+ function blocked(op, detail, remediation) {
25
+ return { kind: "blocked", op, reason: "hazard", hazard: "H-BACKDATE-OPEN", detail, remediation };
26
+ }
27
+ function resolveTarget(deps, kind, ref) {
28
+ return kind === "project"
29
+ ? resolveProjectWriteTarget(deps.db, ref)
30
+ : resolveTaskUuidPrefix(deps.db, ref, "to-do");
31
+ }
32
+ function statusOf(deps, uuid) {
33
+ const t = loadTarget(deps.db, uuid);
34
+ return t !== null && t.type !== "heading" ? t.status : null;
35
+ }
36
+ /** A dry-run MutationResult that discloses the whole leg sequence. */
37
+ function dryRunComposite(summaryOp, uuid, legs, delta) {
38
+ return {
39
+ kind: "dry-run",
40
+ op: summaryOp,
41
+ plan: {
42
+ op: summaryOp,
43
+ vector: legs.some((l) => l.vector === "applescript") ? "applescript" : "url-scheme",
44
+ tier: 0,
45
+ invocation: `${legs.length}-leg sequence (not atomic): ` +
46
+ legs.map((l, i) => `${i + 1}. ${l.describe}`).join(" → "),
47
+ expectedDelta: delta,
48
+ hazardsChecked: ["H-BACKDATE-OPEN", "H-UNKNOWN-DESTINATION"],
49
+ },
50
+ };
51
+ }
52
+ function appendSummary(deps, args) {
53
+ const fp = deps.fingerprint();
54
+ const record = {
55
+ v: 1,
56
+ ts: args.startedAt.toISOString(),
57
+ actor: deps.config.actor,
58
+ host: deps.config.host,
59
+ op: args.op,
60
+ uuid: args.uuid,
61
+ vector: "applescript",
62
+ disruption: 0,
63
+ invocation: args.invocation,
64
+ requested: {},
65
+ txn: { id: args.txnId, role: "summary" },
66
+ pre: null,
67
+ observed: { uuid: args.uuid },
68
+ result: "ok",
69
+ verify: null,
70
+ durationMs: (deps.now?.() ?? new Date()).getTime() - args.startedAt.getTime(),
71
+ env: {
72
+ pkg: deps.pkgVersion ?? "0.0.1",
73
+ dbVersion: fp.observation.databaseVersion,
74
+ fingerprint: fingerprintLabel(fp, deps.config),
75
+ },
76
+ };
77
+ deps.audit.append(record);
78
+ return args.txnId;
79
+ }
80
+ /**
81
+ * Execute a leg sequence: each leg one at a time (the mutation lock + verify
82
+ * must never race), stopping on the first non-ok result and reporting the exact
83
+ * recovery state. On success, append a txn SUMMARY and return an ok result whose
84
+ * undoToken targets the summary (replayed leg-by-leg in reverse).
85
+ */
86
+ async function runComposite(deps, summaryOp, uuid, legs, finalDelta, options) {
87
+ if (options.dryRun === true)
88
+ return dryRunComposite(summaryOp, uuid, legs, finalDelta);
89
+ const startedAt = deps.now?.() ?? new Date();
90
+ const txnId = newTxnId(startedAt);
91
+ const disclosure = legs.map((l, i) => `${i + 1}. ${l.describe}`).join(" → ");
92
+ let last = null;
93
+ for (let i = 0; i < legs.length; i++) {
94
+ const leg = legs[i];
95
+ const result = await exec(deps, leg.op, leg.params, legOptions(options, txnId, leg.vector));
96
+ last = result;
97
+ if (result.kind !== "ok") {
98
+ const done = legs.slice(0, i).map((l) => l.describe);
99
+ const recovery = done.length === 0
100
+ ? "nothing was applied — the item is unchanged"
101
+ : `applied so far: ${done.join("; ")} — leg ${i + 1} (${leg.describe}) failed; the item is left mid-sequence`;
102
+ return {
103
+ kind: "verify-failed",
104
+ op: summaryOp,
105
+ reason: result.kind === "verify-failed" ? result.reason : "mismatch",
106
+ expected: finalDelta,
107
+ observed: result.kind === "verify-failed" ? result.observed : null,
108
+ detail: `${result.kind === "blocked" ? result.detail : "a leg did not verify"} — ${recovery}`,
109
+ };
110
+ }
111
+ }
112
+ appendSummary(deps, {
113
+ startedAt,
114
+ op: summaryOp,
115
+ uuid,
116
+ txnId,
117
+ invocation: `${summaryOp} (${legs.length}-leg): ${disclosure}`,
118
+ });
119
+ const ok = last;
120
+ return {
121
+ ...ok,
122
+ op: summaryOp,
123
+ uuid,
124
+ undoToken: txnId,
125
+ warnings: [...(ok.warnings ?? []), `applied as ${legs.length} non-atomic legs: ${disclosure}`],
126
+ };
127
+ }
128
+ // ------------------------------------------------------------------ helpers
129
+ function completeOp(kind) {
130
+ return kind === "project" ? "project.complete" : "todo.complete";
131
+ }
132
+ function cancelOp(kind) {
133
+ return kind === "project" ? "project.cancel" : "todo.cancel";
134
+ }
135
+ function setDatesOp(kind) {
136
+ return kind === "project" ? "project.set-dates" : "todo.set-dates";
137
+ }
138
+ /** The children param a project complete/cancel leg needs; empty for to-dos. */
139
+ function childrenParam(kind, children) {
140
+ return kind === "project" ? { children } : {};
141
+ }
142
+ function completeLeg(kind, uuid, children) {
143
+ return {
144
+ op: completeOp(kind),
145
+ params: { uuid, ...childrenParam(kind, children) },
146
+ vector: "url-scheme",
147
+ describe: `flip → completed (stopDate preserved)`,
148
+ };
149
+ }
150
+ function cancelLeg(kind, uuid, children) {
151
+ return {
152
+ op: cancelOp(kind),
153
+ params: { uuid, ...childrenParam(kind, children) },
154
+ vector: "url-scheme",
155
+ describe: `flip → canceled (stopDate preserved)`,
156
+ };
157
+ }
158
+ function setDatesLeg(kind, uuid, dates) {
159
+ const parts = [
160
+ ...(dates.completionDate !== undefined ? [`completion=${dates.completionDate}`] : []),
161
+ ...(dates.creationDate !== undefined ? [`creation=${dates.creationDate}`] : []),
162
+ ];
163
+ return {
164
+ op: setDatesOp(kind),
165
+ params: { uuid, ...dates },
166
+ vector: "applescript",
167
+ describe: `AS set ${parts.join(" + ")} (completed row)`,
168
+ };
169
+ }
170
+ /** Refuse a project whose through-completed transit would strand open children. */
171
+ function projectOpenChildrenBlock(deps, kind, uuid, op) {
172
+ if (kind !== "project")
173
+ return null;
174
+ const open = projectChildren(deps.db, uuid).filter((c) => c.status === "open");
175
+ if (open.length === 0)
176
+ return null;
177
+ return blocked(op, `backdating this project requires flipping it through completed, which would complete its ${open.length} ` +
178
+ "open child to-do(s) — a canceled/backdated project cannot leave them open", "resolve or cancel the open children first (e.g. `project cancel --children auto-cancel` without a timestamp), then backdate");
179
+ }
180
+ function stopDelta(uuid, status, stoppedDate) {
181
+ return {
182
+ mode: "state",
183
+ uuid,
184
+ assert: [
185
+ { field: "status", equals: status },
186
+ { field: "stoppedDate", equals: stoppedDate },
187
+ ],
188
+ };
189
+ }
190
+ // ------------------------------------------------------------------ entries
191
+ /**
192
+ * `complete [--completed-at]` for both kinds (plan §2). No timestamp → a single
193
+ * plain `complete` (unchanged). With a timestamp → reach completed (if not
194
+ * already), then AS-backdate the completed row.
195
+ */
196
+ export async function runCompleteWithDate(deps, kind, ref, args, options = {}) {
197
+ const children = args.children ?? "require-resolved";
198
+ if (args.completedAt === undefined) {
199
+ return exec(deps, completeOp(kind), { uuid: ref, ...childrenParam(kind, children) }, options);
200
+ }
201
+ const uuid = resolveTarget(deps, kind, ref);
202
+ const status = statusOf(deps, uuid);
203
+ const legs = [];
204
+ if (status !== "completed")
205
+ legs.push(completeLeg(kind, uuid, children));
206
+ legs.push(setDatesLeg(kind, uuid, { completionDate: args.completedAt }));
207
+ const delta = stopDelta(uuid, "completed", resolutionDeltaDate(args.completedAt, options.zone));
208
+ return runComposite(deps, completeOp(kind), uuid, legs, delta, options);
209
+ }
210
+ /**
211
+ * `cancel [--completed-at]` for both kinds (plan §2). No timestamp → a single
212
+ * plain `cancel`. With a timestamp → end canceled with the backdated stopDate:
213
+ * reach completed (unless already), AS-backdate, then flip back to canceled (the
214
+ * flip-dance). Refuses a project whose transit would strand open children.
215
+ */
216
+ export async function runCancelWithDate(deps, kind, ref, args, options = {}) {
217
+ const children = args.children ?? "require-resolved";
218
+ if (args.completedAt === undefined) {
219
+ return exec(deps, cancelOp(kind), { uuid: ref, ...childrenParam(kind, children) }, options);
220
+ }
221
+ const uuid = resolveTarget(deps, kind, ref);
222
+ const status = statusOf(deps, uuid);
223
+ const legs = [];
224
+ if (status !== "completed") {
225
+ // Cancel the OPEN children as the user asked BEFORE the completed transit —
226
+ // otherwise refuse rather than silently completing them.
227
+ if (status === "open") {
228
+ const stranded = projectOpenChildrenBlock(deps, kind, uuid, cancelOp(kind));
229
+ if (stranded !== null)
230
+ return stranded;
231
+ }
232
+ legs.push(completeLeg(kind, uuid, "require-resolved"));
233
+ }
234
+ legs.push(setDatesLeg(kind, uuid, { completionDate: args.completedAt }));
235
+ legs.push(cancelLeg(kind, uuid, "require-resolved"));
236
+ const delta = stopDelta(uuid, "canceled", resolutionDeltaDate(args.completedAt, options.zone));
237
+ return runComposite(deps, cancelOp(kind), uuid, legs, delta, options);
238
+ }
239
+ /**
240
+ * `update --created-at/--completed-at` for both kinds (plan §2/§3). `--created-at`
241
+ * is a status-safe single AS leg. `--completed-at` edits the timestamp of an
242
+ * ALREADY-resolved item: on a completed item a single AS leg; on a canceled item
243
+ * the 3-leg flip-dance preserving canceled; on an OPEN item it is REFUSED (the
244
+ * open↔resolved boundary belongs to `complete`/`cancel`, not `update`).
245
+ */
246
+ export async function runUpdateDates(deps, kind, ref, args, options = {}) {
247
+ const op = kind === "project" ? "project.update" : "todo.update";
248
+ const uuid = resolveTarget(deps, kind, ref);
249
+ const status = statusOf(deps, uuid);
250
+ if (args.completedAt === undefined) {
251
+ // created-at only: status-safe single set-dates leg (own undo).
252
+ return exec(deps, setDatesOp(kind), { uuid, creationDate: args.createdAt }, options);
253
+ }
254
+ if (status === "open") {
255
+ return {
256
+ kind: "blocked",
257
+ op,
258
+ reason: "hazard",
259
+ hazard: "H-BACKDATE-OPEN",
260
+ detail: "update edits an already-resolved item's completion timestamp — it never crosses the " +
261
+ "open↔resolved boundary (the item here is open)",
262
+ remediation: "use `complete --completed-at` to resolve-and-backdate it completed, or `cancel --completed-at` " +
263
+ "to resolve-and-backdate it canceled",
264
+ };
265
+ }
266
+ const dates = {
267
+ completionDate: args.completedAt,
268
+ ...(args.createdAt !== undefined && { creationDate: args.createdAt }),
269
+ };
270
+ if (status === "completed") {
271
+ // Single AS leg: set both timestamps in place (own undo). Not composite.
272
+ return exec(deps, setDatesOp(kind), { uuid, ...dates }, options);
273
+ }
274
+ // canceled: the 3-leg flip-dance, creation date riding the middle leg.
275
+ const stranded = projectOpenChildrenBlock(deps, kind, uuid, op);
276
+ if (stranded !== null)
277
+ return stranded;
278
+ const legs = [
279
+ completeLeg(kind, uuid, "require-resolved"),
280
+ setDatesLeg(kind, uuid, dates),
281
+ cancelLeg(kind, uuid, "require-resolved"),
282
+ ];
283
+ const delta = stopDelta(uuid, "canceled", resolutionDeltaDate(args.completedAt, options.zone));
284
+ return runComposite(deps, op, uuid, legs, delta, options);
285
+ }
286
+ //# sourceMappingURL=resolution-timestamps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolution-timestamps.js","sourceRoot":"","sources":["../../src/write/resolution-timestamps.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,6 @@ export const REVERSIBILITY = {
8
8
  class: "reversible",
9
9
  note: "inverse sends the created to-do to the Trash (restorable); irreversible only if the created uuid was never discovered",
10
10
  },
11
- "todo.add-logged": {
12
- class: "reversible",
13
- note: "inverse deletes the logged to-do to the Trash; irreversible only if the created uuid was never discovered",
14
- },
15
11
  "todo.duplicate": {
16
12
  class: "reversible",
17
13
  note: "inverse deletes the copy to the Trash; irreversible only if the copy's uuid was never discovered",
@@ -96,7 +92,11 @@ export const REVERSIBILITY = {
96
92
  class: "reversible",
97
93
  note: "inverse renames the heading back to the captured pre-op title",
98
94
  },
99
- "todo.backdate": {
95
+ "todo.set-dates": {
96
+ class: "reversible-with-loss",
97
+ note: "inverse restores the completion/creation timestamps at DAY precision (noon local) — the original sub-day time is not recoverable",
98
+ },
99
+ "project.set-dates": {
100
100
  class: "reversible-with-loss",
101
101
  note: "inverse restores the completion/creation timestamps at DAY precision (noon local) — the original sub-day time is not recoverable",
102
102
  },
@@ -1 +1 @@
1
- {"version":3,"file":"reversibility.js","sourceRoot":"","sources":["../../src/write/reversibility.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reversibility.js","sourceRoot":"","sources":["../../src/write/reversibility.ts"],"names":[],"mappings":"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"}
@@ -32,11 +32,6 @@ export function evaluateScope(db, op, params, pre, scope) {
32
32
  return blocked("deleting a tag removes it from items outside the active scope and cascades to its descendants library-wide");
33
33
  case "todo.restore":
34
34
  return blocked("restore returns the item to the Inbox, which is outside the active scope");
35
- case "todo.add-logged":
36
- // A logged to-do is created loose in the Logbook with no container — it
37
- // would land outside the scope and cannot be redirected (the operation
38
- // has no destination parameter). Fail closed.
39
- return blocked("a logged to-do is created loose in the Logbook and cannot be placed into the active scope");
40
35
  default:
41
36
  break;
42
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scope-guard.js","sourceRoot":"","sources":["../../src/write/scope-guard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope-guard.js","sourceRoot":"","sources":["../../src/write/scope-guard.ts"],"names":[],"mappings":"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"}
@@ -129,12 +129,6 @@ export declare function scanAuditIntegrity(records: AuditRecord[]): AuditIntegri
129
129
  * `undo:<actor>` record — those are excluded from undoability entirely.
130
130
  */
131
131
  export declare function selectUndoTargets(records: AuditRecord[], selector?: UndoSelector): AuditRecord[];
132
- /**
133
- * Operations with NO validated inverse surface — reported irreversible on
134
- * sight, before any per-record analysis. The reversibility matrix cross-checks
135
- * that these keys are EXACTLY the ops classed `irreversible` in
136
- * `reversibility.ts`, so the two catalogs cannot drift.
137
- */
138
132
  export declare const IRREVERSIBLE: Partial<Record<string, string>>;
139
133
  /**
140
134
  * Build the inverse plan for one audit record. Pure — unit-testable.
@@ -191,6 +191,20 @@ function filterRecordsByScope(db, scope, records) {
191
191
  * that these keys are EXACTLY the ops classed `irreversible` in
192
192
  * `reversibility.ts`, so the two catalogs cannot drift.
193
193
  */
194
+ /**
195
+ * Ops whose SUMMARY record heads a resolution-timestamp composite (the flip-dance
196
+ * legs of complete/cancel/update `--completed-at`). planUndo replays their legs
197
+ * in reverse; a leg record of the same op is a plain mutation (no summary role)
198
+ * and takes its ordinary case below.
199
+ */
200
+ const RESOLUTION_COMPOSITE_OPS = new Set([
201
+ "todo.complete",
202
+ "todo.cancel",
203
+ "todo.update",
204
+ "project.complete",
205
+ "project.cancel",
206
+ "project.update",
207
+ ]);
194
208
  export const IRREVERSIBLE = {
195
209
  "area.delete": "areas are deleted permanently — there is nothing to restore (A25)",
196
210
  "tag.delete": "tags are deleted permanently — assignments already cascaded (A26)",
@@ -496,11 +510,33 @@ export function planUndo(record, now, allRecords = [], current) {
496
510
  if (fixed !== undefined)
497
511
  return irreversible(fixed);
498
512
  const uuid = record.uuid;
513
+ // A resolution-timestamp composite (complete/cancel/update `--completed-at`
514
+ // with its flip-dance): the summary record heads a txn whose legs are ordinary
515
+ // undoable ops (complete/cancel/reopen/set-dates). Replay each leg's inverse in
516
+ // reverse order — the cancel/complete inverses no-op where the leg started
517
+ // already-resolved, so a flip-dance backdate cleanly reverses to the captured
518
+ // original stopDate while keeping the item's lifecycle state.
519
+ if (record.txn?.role === "summary" && RESOLUTION_COMPOSITE_OPS.has(record.op)) {
520
+ const legs = allRecords.filter((r) => r.txn?.id === record.txn?.id && r.txn?.role === "leg" && r.result === "ok");
521
+ if (legs.length === 0)
522
+ return irreversible("the composite's legs were not recorded");
523
+ const steps = [];
524
+ for (const leg of legs.toReversed()) {
525
+ const legPlan = planUndo(leg, now, allRecords);
526
+ if (legPlan.kind === "invertible")
527
+ steps.push(...legPlan.steps);
528
+ else
529
+ notes.push(`leg ${leg.op} (${leg.uuid ?? "?"}) is not invertible: skipped`);
530
+ }
531
+ if (steps.length === 0)
532
+ return irreversible("no composite leg was invertible");
533
+ notes.push(`replays ${legs.length} resolution leg(s) in reverse`);
534
+ return { target, kind: "invertible", steps, notes };
535
+ }
499
536
  switch (record.op) {
500
537
  // Creations: the inverse is deleting what appeared. To-dos/projects go
501
538
  // to the Trash (restorable); areas/tags delete PERMANENTLY (ack needed).
502
539
  case "todo.add":
503
- case "todo.add-logged":
504
540
  case "todo.duplicate": {
505
541
  if (uuid === null)
506
542
  return irreversible("the created uuid was never discovered");
@@ -949,12 +985,16 @@ export function planUndo(record, now, allRecords = [], current) {
949
985
  }
950
986
  return irreversible("the pre-op area was not captured");
951
987
  }
952
- case "todo.backdate": {
988
+ case "todo.set-dates":
989
+ case "project.set-dates": {
953
990
  if (uuid === null)
954
991
  return irreversible("no target uuid recorded");
955
992
  const patch = { uuid };
956
993
  const stoppedPre = preField(record, "stoppedDate");
957
994
  const createdPre = preField(record, "createdDate");
995
+ // Only restore the completion date onto a row that is STILL completed —
996
+ // the generalized WG-7 guard would refuse (and re-completing is wrong)
997
+ // otherwise. A creation-date restore is status-safe.
958
998
  if (typeof stoppedPre === "string")
959
999
  patch["completionDate"] = stoppedPre;
960
1000
  if (typeof createdPre === "string")
@@ -964,7 +1004,7 @@ export function planUndo(record, now, allRecords = [], current) {
964
1004
  }
965
1005
  notes.push("timestamps restore at DAY precision (noon local) — the original sub-day time is " +
966
1006
  "not recoverable");
967
- return { target, kind: "invertible", steps: [{ op: "todo.backdate", params: patch }], notes };
1007
+ return { target, kind: "invertible", steps: [{ op: record.op, params: patch }], notes };
968
1008
  }
969
1009
  case "todo.set-tags": {
970
1010
  if (uuid === null)
@@ -1431,7 +1471,7 @@ const AXIS_LABEL = {
1431
1471
  * these axes rely on the inverse's own verified read-after-write instead):
1432
1472
  * - REPEAT rule / paused state (reschedule-repeat, pause/resume-repeat): the
1433
1473
  * repeat axis is out of this guard's scope.
1434
- * - todo.backdate timestamps (creation/completion date).
1474
+ * - todo/project.set-dates timestamps (creation/completion date).
1435
1475
  * - reorder / area.reorder RANKS: the inverse is a 3-way restore that already
1436
1476
  * leaves non-targeted members in place; a rank precondition is not modeled.
1437
1477
  * - area.update / tag.update fields: those steps address by `target`, not