things-api 0.15.0 → 0.16.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/README.md +4 -4
- package/dist/audit/schema.d.ts +8 -0
- package/dist/audit/schema.js.map +1 -1
- package/dist/cli/commands/install-skill.js +9 -2
- package/dist/cli/commands/install-skill.js.map +1 -1
- package/dist/cli/commands/repeat-flags.d.ts +11 -1
- package/dist/cli/commands/repeat-flags.js +23 -0
- package/dist/cli/commands/repeat-flags.js.map +1 -1
- package/dist/cli/commands/todo.js +49 -2
- package/dist/cli/commands/todo.js.map +1 -1
- package/dist/cli/commands/writes.js +182 -61
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/help.js +14 -11
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/read-driver.d.ts +2 -2
- package/dist/cli/skill.d.ts +24 -0
- package/dist/cli/skill.js +40 -0
- package/dist/cli/skill.js.map +1 -1
- package/dist/client.d.ts +53 -12
- package/dist/client.js +6 -1
- package/dist/client.js.map +1 -1
- package/dist/contracts.d.ts +1 -1
- package/dist/contracts.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +132 -31
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/entities.d.ts +35 -0
- package/dist/model/entities.js.map +1 -1
- package/dist/read/detail.js +49 -1
- package/dist/read/detail.js.map +1 -1
- package/dist/read/queries.d.ts +12 -0
- package/dist/read/queries.js +14 -0
- package/dist/read/queries.js.map +1 -1
- package/dist/read/shape.d.ts +25 -22
- package/dist/read/shape.js +81 -55
- package/dist/read/shape.js.map +1 -1
- package/dist/read/stage.d.ts +5 -5
- package/dist/read/stage.js +2 -2
- package/dist/read/views.d.ts +1 -1
- package/dist/read/views.js +4 -4
- package/dist/surface-copy.d.ts +2 -2
- package/dist/surface-copy.js +2 -2
- package/dist/write/batch.d.ts +28 -3
- package/dist/write/batch.js +162 -46
- package/dist/write/batch.js.map +1 -1
- package/dist/write/clone.d.ts +4 -0
- package/dist/write/clone.js +531 -0
- package/dist/write/clone.js.map +1 -0
- package/dist/write/commands.js +90 -4
- package/dist/write/commands.js.map +1 -1
- package/dist/write/guards.d.ts +1 -1
- package/dist/write/guards.js +33 -5
- package/dist/write/guards.js.map +1 -1
- package/dist/write/make-repeating-project.d.ts +2 -3
- package/dist/write/make-repeating-project.js +2 -73
- package/dist/write/make-repeating-project.js.map +1 -1
- package/dist/write/move.js +8 -1
- package/dist/write/move.js.map +1 -1
- package/dist/write/operations.d.ts +131 -9
- package/dist/write/operations.js +4 -1
- package/dist/write/operations.js.map +1 -1
- package/dist/write/pipeline.d.ts +38 -0
- package/dist/write/pipeline.js +68 -3
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/pre-state.js +7 -1
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/preserve-modified.d.ts +55 -0
- package/dist/write/preserve-modified.js +106 -0
- package/dist/write/preserve-modified.js.map +1 -0
- package/dist/write/promote-clone.d.ts +32 -0
- package/dist/write/promote-clone.js +620 -0
- package/dist/write/promote-clone.js.map +1 -0
- package/dist/write/resolution-timestamps.js +22 -0
- package/dist/write/resolution-timestamps.js.map +1 -1
- package/dist/write/reversibility.js +27 -14
- package/dist/write/reversibility.js.map +1 -1
- package/dist/write/undo.d.ts +11 -1
- package/dist/write/undo.js +126 -10
- package/dist/write/undo.js.map +1 -1
- package/dist/write/vectors/simulator.js +32 -1
- package/dist/write/vectors/simulator.js.map +1 -1
- package/dist/write/vectors/ui-certification.d.ts +1 -1
- package/dist/write/vectors/ui-certification.js +10 -3
- package/dist/write/vectors/ui-certification.js.map +1 -1
- package/package.json +1 -1
- package/skills/things-cli/SKILL.md +3 -2
- package/skills/things-cli/references/banner.md +1 -1
- package/skills/things-cli/references/contracts.md +17 -9
- package/skills/things-cli/references/data-model.md +2 -1
|
@@ -2,6 +2,8 @@ import { resolveProjectWriteTarget, resolveTaskUuidPrefix } from "../read/querie
|
|
|
2
2
|
import { resolutionDeltaDate } from "./commands.js";
|
|
3
3
|
import { loadTarget, projectChildren } from "./pre-state.js";
|
|
4
4
|
import { fingerprintLabel, runMutation, } from "./pipeline.js";
|
|
5
|
+
import { restoreModDates } from "./preserve-modified.js";
|
|
6
|
+
import { createDbReader } from "./verify/delta.js";
|
|
5
7
|
/** Dispatch a cataloged op with dynamic (op-erased) params. */
|
|
6
8
|
function exec(deps, op, params, options) {
|
|
7
9
|
return runMutation(deps, op, params, options);
|
|
@@ -86,6 +88,13 @@ function appendSummary(deps, args) {
|
|
|
86
88
|
async function runComposite(deps, summaryOp, uuid, legs, finalDelta, options) {
|
|
87
89
|
if (options.dryRun === true)
|
|
88
90
|
return dryRunComposite(summaryOp, uuid, legs, finalDelta);
|
|
91
|
+
// --preserve-modified: capture the target's umd BEFORE the first leg (each flip
|
|
92
|
+
// bumps it) and restore ONCE after the last (never per-leg — the leg options
|
|
93
|
+
// strip the flag). Single-target by construction (the resolution-timestamp
|
|
94
|
+
// compounds operate on one to-do/project).
|
|
95
|
+
const preUmd = options.preserveModified === true
|
|
96
|
+
? createDbReader(deps.db, deps.now?.() ?? new Date(), deps.zone).modDateOf(uuid)
|
|
97
|
+
: null;
|
|
89
98
|
const startedAt = deps.now?.() ?? new Date();
|
|
90
99
|
const txnId = newTxnId(startedAt);
|
|
91
100
|
const disclosure = legs.map((l, i) => `${i + 1}. ${l.describe}`).join(" → ");
|
|
@@ -117,11 +126,24 @@ async function runComposite(deps, summaryOp, uuid, legs, finalDelta, options) {
|
|
|
117
126
|
invocation: `${summaryOp} (${legs.length}-leg): ${disclosure}`,
|
|
118
127
|
});
|
|
119
128
|
const ok = last;
|
|
129
|
+
// Restore the captured umd once, after the last leg (best-effort, per row).
|
|
130
|
+
let preserve = null;
|
|
131
|
+
if (options.preserveModified === true && preUmd !== null) {
|
|
132
|
+
const post = createDbReader(deps.db, deps.now?.() ?? new Date(), deps.zone).modDateOf(uuid);
|
|
133
|
+
const targets = post !== null && post > preUmd ? [{ uuid, preUmd }] : [];
|
|
134
|
+
preserve = await restoreModDates(deps.db, deps.vectors, targets);
|
|
135
|
+
}
|
|
120
136
|
return {
|
|
121
137
|
...ok,
|
|
122
138
|
op: summaryOp,
|
|
123
139
|
uuid,
|
|
124
140
|
undoToken: txnId,
|
|
141
|
+
...(preserve !== null &&
|
|
142
|
+
(preserve.restored > 0 || preserve.failures.length > 0) && {
|
|
143
|
+
preservedModified: preserve.restored,
|
|
144
|
+
}),
|
|
145
|
+
...(preserve !== null &&
|
|
146
|
+
preserve.failures.length > 0 && { preserveFailures: preserve.failures }),
|
|
125
147
|
warnings: [...(ok.warnings ?? []), `applied as ${legs.length} non-atomic legs: ${disclosure}`],
|
|
126
148
|
};
|
|
127
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolution-timestamps.js","sourceRoot":"","sources":["../../src/write/resolution-timestamps.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,WAAW,GAIZ,MAAM,eAAe,CAAC;AAgBvB,+DAA+D;AAC/D,SAAS,IAAI,CACX,IAAe,EACf,EAAiB,EACjB,MAA+B,EAC/B,OAAqB;IAErB,OAAO,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,MAAe,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,QAAQ,CAAC,GAAS;IACzB,OAAO,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,UAAU,CACjB,IAAkB,EAClB,KAAa,EACb,MAAoC;IAEpC,MAAM,GAAG,GAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC;IACtE,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACrD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;QAAE,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;IACnF,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS;QAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;IAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IAClD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,OAAO,CAAC,EAAiB,EAAE,MAAc,EAAE,WAAmB;IACrE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACnG,CAAC;AAED,SAAS,aAAa,CAAC,IAAe,EAAE,IAAoB,EAAE,GAAW;IACvE,OAAO,IAAI,KAAK,SAAS;QACvB,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC;QACzC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ,CAAC,IAAe,EAAE,IAAY;IAC7C,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,sEAAsE;AACtE,SAAS,eAAe,CACtB,SAAwB,EACxB,IAAY,EACZ,IAAW,EACX,KAAgB;IAEhB,OAAO;QACL,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,SAAS;QACb,IAAI,EAAE;YACJ,EAAE,EAAE,SAAS;YACb,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY;YACnF,IAAI,EAAE,CAAC;YACP,UAAU,EACR,GAAG,IAAI,CAAC,MAAM,8BAA8B;gBAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3D,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;SAC7D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,IAAe,EACf,IAA6F;IAE7F,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAgB;QAC1B,CAAC,EAAE,CAAC;QACJ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;QAChC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;QACxB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QACtB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,aAAa;QACrB,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,EAAE;QACb,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;QACxC,GAAG,EAAE,IAAI;QACT,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QAC7B,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;QAC7E,GAAG,EAAE;YACH,GAAG,EAAE,IAAI,CAAC,UAAU,IAAI,OAAO;YAC/B,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC,eAAe;YACzC,WAAW,EAAE,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC;SAC/C;KACF,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,YAAY,CACzB,IAAe,EACf,SAAwB,EACxB,IAAY,EACZ,IAAW,EACX,UAAqB,EACrB,OAAqB;IAErB,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,eAAe,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAEvF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7E,IAAI,IAAI,GAA0B,IAAI,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAQ,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,IAAI,GAAG,MAAM,CAAC;QACd,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,QAAQ,GACZ,IAAI,CAAC,MAAM,KAAK,CAAC;gBACf,CAAC,CAAC,6CAA6C;gBAC/C,CAAC,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,QAAQ,yCAAyC,CAAC;YAClH,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,EAAE,EAAE,SAAS;gBACb,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;gBACpE,QAAQ,EAAE,UAAU;gBACpB,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;gBAClE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,MAAM,QAAQ,EAAE;aAC9F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,aAAa,CAAC,IAAI,EAAE;QAClB,SAAS;QACT,EAAE,EAAE,SAAS;QACb,IAAI;QACJ,KAAK;QACL,UAAU,EAAE,GAAG,SAAS,KAAK,IAAI,CAAC,MAAM,UAAU,UAAU,EAAE;KAC/D,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,IAA+C,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE;QACL,EAAE,EAAE,SAAS;QACb,IAAI;QACJ,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,cAAc,IAAI,CAAC,MAAM,qBAAqB,UAAU,EAAE,CAAC;KAC/F,CAAC;AACJ,CAAC;AAED,6EAA6E;AAE7E,SAAS,UAAU,CAAC,IAAoB;IACtC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC;AACnE,CAAC;AACD,SAAS,QAAQ,CAAC,IAAoB;IACpC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC;AAC/D,CAAC;AACD,SAAS,UAAU,CAAC,IAAoB;IACtC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACrE,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CACpB,IAAoB,EACpB,QAA2C;IAE3C,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,WAAW,CAAC,IAAoB,EAAE,IAAY,EAAE,QAA0B;IACjF,OAAO;QACL,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC;QACpB,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;QAClD,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,uCAAuC;KAClD,CAAC;AACJ,CAAC;AACD,SAAS,SAAS,CAAC,IAAoB,EAAE,IAAY,EAAE,QAAwB;IAC7E,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC;QAClB,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;QAClD,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,sCAAsC;KACjD,CAAC;AACJ,CAAC;AACD,SAAS,WAAW,CAClB,IAAoB,EACpB,IAAY,EACZ,KAAmD;IAEnD,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;IACF,OAAO;QACL,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC;QACpB,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE;QAC1B,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB;KACxD,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,SAAS,wBAAwB,CAC/B,IAAe,EACf,IAAoB,EACpB,IAAY,EACZ,EAAiB;IAEjB,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,OAAO,CACZ,EAAE,EACF,4FAA4F,IAAI,CAAC,MAAM,GAAG;QACxG,2EAA2E,EAC7E,6HAA6H,CAC9H,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,MAAc,EAAE,WAAoB;IACnE,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI;QACJ,MAAM,EAAE;YACN,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;YACnC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE;SAC9C;KACF,CAAC;AACJ,CAAC;AAED,6EAA6E;AAE7E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAe,EACf,IAAoB,EACpB,GAAW,EACX,IAA2D,EAC3D,UAAwB,EAAE;IAE1B,MAAM,QAAQ,GAAqB,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC;IACvE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAChG,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,IAAI,MAAM,KAAK,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAChG,OAAO,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAe,EACf,IAAoB,EACpB,GAAW,EACX,IAAyD,EACzD,UAAwB,EAAE;IAE1B,MAAM,QAAQ,GAAmB,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC;IACrE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,4EAA4E;QAC5E,yDAAyD;QACzD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5E,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,QAAQ,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,OAAO,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAe,EACf,IAAoB,EACpB,GAAW,EACX,IAAkD,EAClD,UAAwB,EAAE;IAE1B,MAAM,EAAE,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC;IACjE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEpC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACnC,gEAAgE;QAChE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,SAAS;YACf,EAAE;YACF,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,iBAAiB;YACzB,MAAM,EACJ,sFAAsF;gBACtF,gDAAgD;YAClD,WAAW,EACT,iGAAiG;gBACjG,qCAAqC;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;KACnE,CAAC;IAEF,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,yEAAyE;QACzE,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,uEAAuE;IACvE,MAAM,QAAQ,GAAG,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAChE,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IACvC,MAAM,IAAI,GAAU;QAClB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC;QAC3C,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;QAC9B,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC;KAC1C,CAAC;IACF,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolution-timestamps.js","sourceRoot":"","sources":["../../src/write/resolution-timestamps.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,14 @@ export const REVERSIBILITY = {
|
|
|
20
20
|
class: "reversible",
|
|
21
21
|
note: "inverse deletes the duplicated project to the Trash",
|
|
22
22
|
},
|
|
23
|
+
"todo.clone": {
|
|
24
|
+
class: "reversible",
|
|
25
|
+
note: "inverse trashes the minted clone to-do (single leg); irreversible only if the clone's uuid was never discovered",
|
|
26
|
+
},
|
|
27
|
+
"project.clone": {
|
|
28
|
+
class: "reversible",
|
|
29
|
+
note: "inverse trashes the minted clone project (and the children it carried) to the Trash; irreversible only if the clone's uuid was never discovered",
|
|
30
|
+
},
|
|
23
31
|
"area.add": {
|
|
24
32
|
class: "reversible",
|
|
25
33
|
ack: "permanent",
|
|
@@ -58,12 +66,12 @@ export const REVERSIBILITY = {
|
|
|
58
66
|
// ---- delete / restore ---------------------------------------------------
|
|
59
67
|
"todo.delete": {
|
|
60
68
|
class: "reversible-with-loss",
|
|
61
|
-
note: "inverse restores from the Trash but lands in the Inbox DE-SCHEDULED (E15) — the prior list/schedule was not captured by the delete",
|
|
69
|
+
note: "inverse restores from the Trash but lands in the Inbox DE-SCHEDULED (E15) — the prior list/schedule was not captured by the delete. EXCEPTION: deleting a repeating TEMPLATE is IRREVERSIBLE headlessly (the app forbids restoring a template out to a list, AS 301) — no undo token is emitted and the result discloses Trash ▸ Put Back as the only revival (SERDEL S2/S3, ruling 2026-08-13)",
|
|
62
70
|
},
|
|
63
71
|
"todo.restore": { class: "reversible", note: "inverse re-deletes the to-do to the Trash" },
|
|
64
72
|
"project.delete": {
|
|
65
73
|
class: "reversible",
|
|
66
|
-
note: "inverse restores the project IN PLACE (P06) — schedule/area/children keep their state",
|
|
74
|
+
note: "inverse restores the project IN PLACE (P06) — schedule/area/children keep their state. EXCEPTION: deleting a repeating project TEMPLATE is IRREVERSIBLE headlessly (Put Back only) — no undo token, disclosed in the result (ruling 2026-08-13)",
|
|
67
75
|
},
|
|
68
76
|
"project.restore": { class: "reversible", note: "inverse re-deletes the project to the Trash" },
|
|
69
77
|
// ---- field updates ------------------------------------------------------
|
|
@@ -164,22 +172,10 @@ export const REVERSIBILITY = {
|
|
|
164
172
|
class: "irreversible",
|
|
165
173
|
note: "a created heading has no headless delete surface (heading delete is interactive-only) — archive it in the app instead",
|
|
166
174
|
},
|
|
167
|
-
"todo.make-repeating": {
|
|
168
|
-
class: "irreversible",
|
|
169
|
-
note: "making a to-do repeat is an identity REPLACEMENT (UI2-a): the original uuid is destroyed and a new template row is born — there is no un-repeat that restores the original",
|
|
170
|
-
},
|
|
171
175
|
"todo.convert-to-project": {
|
|
172
176
|
class: "irreversible",
|
|
173
177
|
note: "converting a to-do to a project is an identity REPLACEMENT (UI2-d): the to-do uuid is destroyed and a new project uuid is born (notes preserved); the app offers no convert-back",
|
|
174
178
|
},
|
|
175
|
-
"project.make-repeating": {
|
|
176
|
-
class: "irreversible",
|
|
177
|
-
note: "making a project repeat is an identity REPLACEMENT (UIC4-b): the original project uuid is destroyed and a new template project is born (area preserved, start normalized to someday) — there is no un-repeat that restores the original",
|
|
178
|
-
},
|
|
179
|
-
"project.add-repeating": {
|
|
180
|
-
class: "irreversible",
|
|
181
|
-
note: "the composite CREATES a project then promotes it (identity replacement, UIC4-b): the created uuid is destroyed by the promote and a new repeating template is born — no automated inverse captures it; delete the resulting repeating project in the app",
|
|
182
|
-
},
|
|
183
179
|
"project.promote-heading": {
|
|
184
180
|
class: "irreversible",
|
|
185
181
|
note: "promoting a heading to a project is an identity REPLACEMENT (UI2-d): the heading uuid is destroyed, a new project is promoted into the parent's area and children reparent; no convert-back",
|
|
@@ -200,6 +196,23 @@ export const REVERSIBILITY = {
|
|
|
200
196
|
class: "conditional",
|
|
201
197
|
note: "the project's rule mutates in place (identity preserved, UIC2-a); re-drives reschedule with the captured prior rule (same faithfulness boundary as todo.reschedule-repeat) — invertible when the prior rule was captured, decodable, and dialog-expressible; irreversible otherwise. A per-instance reminder time is not restored",
|
|
202
198
|
},
|
|
199
|
+
// ---- promote-via-clone (make/add-repeating) → undo is trash-both (+restore) --
|
|
200
|
+
"todo.make-repeating": {
|
|
201
|
+
class: "reversible-with-loss",
|
|
202
|
+
note: "promote-via-clone: the minted template + its current instance are the inverse's target — undo TRASHES BOTH (the SERDEL trash-both) and restores the original to-do from the Trash (it lands in the Inbox DE-SCHEDULED, E15). The trashed template leaves no tombstone and its own un-delete is GUI-only (Trash ▸ Put Back), so this undo cannot itself be undone headlessly",
|
|
203
|
+
},
|
|
204
|
+
"project.make-repeating": {
|
|
205
|
+
class: "reversible-with-loss",
|
|
206
|
+
note: "promote-via-clone: undo TRASHES the minted template + its current instance (trash-both) and restores the original project IN PLACE (P06). The trashed template leaves no tombstone and its own un-delete is GUI-only (Put Back), so this undo cannot itself be undone headlessly",
|
|
207
|
+
},
|
|
208
|
+
"todo.add-repeating": {
|
|
209
|
+
class: "reversible",
|
|
210
|
+
note: "the composite creates a to-do then promotes it; undo TRASHES the minted template + its current instance (SERDEL trash-both) — the whole created series moves to the Trash. Re-creating the series is GUI-only (the template leaves no tombstone; use Trash ▸ Put Back), so this undo is not itself headlessly undoable",
|
|
211
|
+
},
|
|
212
|
+
"project.add-repeating": {
|
|
213
|
+
class: "reversible",
|
|
214
|
+
note: "the composite creates a project then promotes it; undo TRASHES the minted template + its current instance (SERDEL trash-both) — the whole created series moves to the Trash. Re-creating the series is GUI-only, so this undo is not itself headlessly undoable",
|
|
215
|
+
},
|
|
203
216
|
// ---- ui-vector reversible pairs -----------------------------------------
|
|
204
217
|
"todo.pause-repeat": {
|
|
205
218
|
class: "reversible",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reversibility.js","sourceRoot":"","sources":["../../src/write/reversibility.ts"],"names":[],"mappings":"AA0CA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA8C;IACtE,4EAA4E;IAC5E,UAAU,EAAE;QACV,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,uHAAuH;KAC9H;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,kGAAkG;KACzG;IACD,aAAa,EAAE;QACb,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,wEAAwE;KAC/E;IACD,mBAAmB,EAAE;QACnB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,qDAAqD;KAC5D;IACD,UAAU,EAAE;QACV,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,qGAAqG;KAC5G;IACD,SAAS,EAAE;QACT,KAAK,EAAE,YAAY;QACnB,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,mGAAmG;KAC1G;IAED,4EAA4E;IAC5E,eAAe,EAAE;QACf,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,yFAAyF;KAChG;IACD,aAAa,EAAE;QACb,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,0DAA0D;KACjE;IACD,aAAa,EAAE;QACb,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,mEAAmE;KAC1E;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,+FAA+F;KACtG;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,2FAA2F;KAClG;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,2HAA2H;KAClI;IAED,4EAA4E;IAC5E,aAAa,EAAE;QACb,KAAK,EAAE,sBAAsB;QAC7B,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"reversibility.js","sourceRoot":"","sources":["../../src/write/reversibility.ts"],"names":[],"mappings":"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"}
|
package/dist/write/undo.d.ts
CHANGED
|
@@ -123,10 +123,20 @@ export declare function scanAuditIntegrity(records: AuditRecord[]): AuditIntegri
|
|
|
123
123
|
* The undoable targets to unwind, NEWEST FIRST (undo unwinds a stack).
|
|
124
124
|
*
|
|
125
125
|
* - `txn` wins when present: the ONE record whose undo token matches (or an
|
|
126
|
-
* empty array — the caller distinguishes not-found from already-undone).
|
|
126
|
+
* empty array — the caller distinguishes not-found from already-undone). The
|
|
127
|
+
* already-undone exclusion below does NOT apply to `--txn`: surgical targeting
|
|
128
|
+
* keeps the loud "already undone" error (runUndo raises it before selecting).
|
|
127
129
|
* - otherwise the last `last` records, optionally narrowed to actor `by`
|
|
128
130
|
* (exact match; "*"/undefined = every actor). `by` NEVER matches an
|
|
129
131
|
* `undo:<actor>` record — those are excluded from undoability entirely.
|
|
132
|
+
*
|
|
133
|
+
* ALREADY-UNDONE records are EXCLUDED from `--last`/`--by` selection (Change 3),
|
|
134
|
+
* so `--last N` always means "the N newest NOT-YET-undone mutations" and a
|
|
135
|
+
* repeated `undo --last N` walks progressively deeper into history instead of
|
|
136
|
+
* re-selecting the same records (whose inverses would trip the precondition
|
|
137
|
+
* guard). IRREVERSIBLE records are NOT excluded — they were never undone, so
|
|
138
|
+
* they keep COUNTING toward N and being reported every pass (reaching silently
|
|
139
|
+
* past one to undo something older would be a dangerous surprise).
|
|
130
140
|
*/
|
|
131
141
|
export declare function selectUndoTargets(records: AuditRecord[], selector?: UndoSelector): AuditRecord[];
|
|
132
142
|
export declare const IRREVERSIBLE: Partial<Record<string, string>>;
|
package/dist/write/undo.js
CHANGED
|
@@ -46,6 +46,7 @@ import { localToday } from "../model/dates.js";
|
|
|
46
46
|
import { getField } from "./verify/delta.js";
|
|
47
47
|
import { isRepeatingTemplate, loadTarget } from "./pre-state.js";
|
|
48
48
|
import { isUiDriveOp } from "./operations.js";
|
|
49
|
+
import { restoreModDates } from "./preserve-modified.js";
|
|
49
50
|
import { ruleToInverseParams } from "./repeat-rule.js";
|
|
50
51
|
import { runMutation } from "./pipeline.js";
|
|
51
52
|
import { runReorder } from "./reorder.js";
|
|
@@ -141,14 +142,39 @@ export function scanAuditIntegrity(records) {
|
|
|
141
142
|
}
|
|
142
143
|
return { orphanedIntents, newestOrphanIntent };
|
|
143
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* The set of mutation undo-tokens that have ALREADY been undone: derived from
|
|
147
|
+
* the inverse records on the trail (an `ok` record under an `undo:*` actor whose
|
|
148
|
+
* `undoOf` back-references the mutation it reversed). This is the same linkage
|
|
149
|
+
* the `--txn` already-undone check reads, generalized to a set.
|
|
150
|
+
*/
|
|
151
|
+
function undoneTokens(records) {
|
|
152
|
+
const undone = new Set();
|
|
153
|
+
for (const r of records) {
|
|
154
|
+
if (r.result === "ok" && r.actor.startsWith("undo:") && typeof r.undoOf === "string") {
|
|
155
|
+
undone.add(r.undoOf);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return undone;
|
|
159
|
+
}
|
|
144
160
|
/**
|
|
145
161
|
* The undoable targets to unwind, NEWEST FIRST (undo unwinds a stack).
|
|
146
162
|
*
|
|
147
163
|
* - `txn` wins when present: the ONE record whose undo token matches (or an
|
|
148
|
-
* empty array — the caller distinguishes not-found from already-undone).
|
|
164
|
+
* empty array — the caller distinguishes not-found from already-undone). The
|
|
165
|
+
* already-undone exclusion below does NOT apply to `--txn`: surgical targeting
|
|
166
|
+
* keeps the loud "already undone" error (runUndo raises it before selecting).
|
|
149
167
|
* - otherwise the last `last` records, optionally narrowed to actor `by`
|
|
150
168
|
* (exact match; "*"/undefined = every actor). `by` NEVER matches an
|
|
151
169
|
* `undo:<actor>` record — those are excluded from undoability entirely.
|
|
170
|
+
*
|
|
171
|
+
* ALREADY-UNDONE records are EXCLUDED from `--last`/`--by` selection (Change 3),
|
|
172
|
+
* so `--last N` always means "the N newest NOT-YET-undone mutations" and a
|
|
173
|
+
* repeated `undo --last N` walks progressively deeper into history instead of
|
|
174
|
+
* re-selecting the same records (whose inverses would trip the precondition
|
|
175
|
+
* guard). IRREVERSIBLE records are NOT excluded — they were never undone, so
|
|
176
|
+
* they keep COUNTING toward N and being reported every pass (reaching silently
|
|
177
|
+
* past one to undo something older would be a dangerous surprise).
|
|
152
178
|
*/
|
|
153
179
|
export function selectUndoTargets(records, selector = {}) {
|
|
154
180
|
const undoable = undoableRecords(records);
|
|
@@ -156,9 +182,11 @@ export function selectUndoTargets(records, selector = {}) {
|
|
|
156
182
|
const match = undoable.find((r) => undoToken(r) === selector.txn);
|
|
157
183
|
return match === undefined ? [] : [match];
|
|
158
184
|
}
|
|
185
|
+
const undone = undoneTokens(records);
|
|
186
|
+
const notUndone = undoable.filter((r) => !undone.has(undoToken(r)));
|
|
159
187
|
const byActor = selector.by === undefined || selector.by === "*"
|
|
160
|
-
?
|
|
161
|
-
:
|
|
188
|
+
? notUndone
|
|
189
|
+
: notUndone.filter((r) => r.actor === selector.by);
|
|
162
190
|
return byActor.slice(-Math.max(1, selector.last ?? 1)).toReversed();
|
|
163
191
|
}
|
|
164
192
|
/**
|
|
@@ -214,15 +242,8 @@ export const IRREVERSIBLE = {
|
|
|
214
242
|
"no inverse — nothing is deleted, the items are simply logged",
|
|
215
243
|
"project.add-heading": "a created heading can only be removed by deleting it, which has no headless surface " +
|
|
216
244
|
"(heading delete is interactive-only) — archive it in the app instead",
|
|
217
|
-
"todo.make-repeating": "making a to-do repeat is an identity replacement (UI2-a): the original uuid is destroyed " +
|
|
218
|
-
"and a new template row is born — there is no un-repeat that restores the original",
|
|
219
245
|
"todo.convert-to-project": "converting a to-do to a project is an identity replacement (UI2-d): the to-do uuid is " +
|
|
220
246
|
"destroyed and a new project is born — the app offers no convert-back",
|
|
221
|
-
"project.make-repeating": "making a project repeat is an identity replacement (UIC4-b): the original project uuid is " +
|
|
222
|
-
"destroyed and a new template project is born — there is no un-repeat that restores the original",
|
|
223
|
-
"project.add-repeating": "the composite creates a project then promotes it (identity replacement, UIC4-b): the " +
|
|
224
|
-
"created uuid is destroyed by the promote and a new repeating template is born — delete the " +
|
|
225
|
-
"resulting repeating project in the app",
|
|
226
247
|
"project.promote-heading": "promoting a heading to a project is an identity replacement (UI2-d): the heading uuid is " +
|
|
227
248
|
"destroyed and a new project is born — no convert-back",
|
|
228
249
|
"project.move-heading-to-project": "moving a heading to another project is app-reversible (move it back) but has no wired " +
|
|
@@ -564,6 +585,71 @@ export function planUndo(record, now, allRecords = [], current) {
|
|
|
564
585
|
notes,
|
|
565
586
|
};
|
|
566
587
|
}
|
|
588
|
+
// A clone (todo.clone / project.clone): the summary record heads the txn whose
|
|
589
|
+
// legs (the base add, checklist checks, terminal-state flips) are ordinary
|
|
590
|
+
// `leg`-role mutations excluded from independent undo. The single undoable unit
|
|
591
|
+
// is the whole clone, and its inverse is trashing the minted root — a project
|
|
592
|
+
// clone's minted children ride to the Trash with it (shallow delete), so no
|
|
593
|
+
// per-child inverse is replayed (the child uuids are captured on the record for
|
|
594
|
+
// the audit trail, not for undo).
|
|
595
|
+
case "todo.clone": {
|
|
596
|
+
if (uuid === null)
|
|
597
|
+
return irreversible("the clone's uuid was never discovered");
|
|
598
|
+
return {
|
|
599
|
+
target,
|
|
600
|
+
kind: "invertible",
|
|
601
|
+
steps: [{ op: "todo.delete", params: { uuid } }],
|
|
602
|
+
notes,
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
case "project.clone": {
|
|
606
|
+
if (uuid === null)
|
|
607
|
+
return irreversible("the clone's uuid was never discovered");
|
|
608
|
+
notes.push("the cloned project (and every child it minted) moves to the Trash");
|
|
609
|
+
return {
|
|
610
|
+
target,
|
|
611
|
+
kind: "invertible",
|
|
612
|
+
steps: [{ op: "project.delete", params: { uuid } }],
|
|
613
|
+
notes,
|
|
614
|
+
};
|
|
615
|
+
}
|
|
616
|
+
// Promote-via-clone (make/add-repeating): the SUMMARY record captured the
|
|
617
|
+
// minted template, its current instance, and — for make-repeating — the
|
|
618
|
+
// trashed original. Undo is the SERDEL trash-both (delete BOTH rows — a
|
|
619
|
+
// template delete is a plain, publicly-allowed delete now, ruling 2026-08-13),
|
|
620
|
+
// then (make-repeating only) restore the original from the Trash. This undo
|
|
621
|
+
// cannot itself be undone headlessly — a trashed template's only revival is
|
|
622
|
+
// the app's Trash ▸ Put Back (SERDEL S2/S3) — disclosed here.
|
|
623
|
+
case "todo.make-repeating":
|
|
624
|
+
case "project.make-repeating":
|
|
625
|
+
case "todo.add-repeating":
|
|
626
|
+
case "project.add-repeating": {
|
|
627
|
+
const obs = record.observed ?? {};
|
|
628
|
+
const templateUuid = obs["templateUuid"];
|
|
629
|
+
if (typeof templateUuid !== "string") {
|
|
630
|
+
return irreversible("the minted template uuid was not captured on this record — remove the repeating " +
|
|
631
|
+
"series in the Things app (delete the template, then its current instance)");
|
|
632
|
+
}
|
|
633
|
+
const kind = record.op.startsWith("project.") ? "project" : "todo";
|
|
634
|
+
const deleteOp = kind === "project" ? "project.delete" : "todo.delete";
|
|
635
|
+
const restoreOp = kind === "project" ? "project.restore" : "todo.restore";
|
|
636
|
+
const steps = [{ op: deleteOp, params: { uuid: templateUuid } }];
|
|
637
|
+
const instanceUuid = obs["instanceUuid"];
|
|
638
|
+
if (typeof instanceUuid === "string" && instanceUuid !== templateUuid) {
|
|
639
|
+
steps.push({ op: deleteOp, params: { uuid: instanceUuid } });
|
|
640
|
+
}
|
|
641
|
+
const originalUuid = obs["originalUuid"];
|
|
642
|
+
if (typeof originalUuid === "string") {
|
|
643
|
+
steps.push({ op: restoreOp, params: { uuid: originalUuid } });
|
|
644
|
+
notes.push(kind === "todo"
|
|
645
|
+
? "the original to-do is restored from the Trash — it lands in the Inbox de-scheduled (E15)"
|
|
646
|
+
: "the original project is restored from the Trash in place (P06)");
|
|
647
|
+
}
|
|
648
|
+
notes.push("removing the series trashes the minted template AND its current instance (trash-both, " +
|
|
649
|
+
"SERDEL); this undo cannot itself be undone headlessly — a trashed template's only " +
|
|
650
|
+
"revival is the app's Trash ▸ Put Back");
|
|
651
|
+
return { target, kind: "invertible", steps, notes };
|
|
652
|
+
}
|
|
567
653
|
case "area.add": {
|
|
568
654
|
if (uuid === null)
|
|
569
655
|
return irreversible("the created uuid was never discovered");
|
|
@@ -1621,6 +1707,14 @@ export async function runUndo(deps, auditDirPath, options = {}, onItem) {
|
|
|
1621
1707
|
break;
|
|
1622
1708
|
}
|
|
1623
1709
|
}
|
|
1710
|
+
// Preview the symmetric umd-restore (a --preserve-modified original).
|
|
1711
|
+
if (record.preModDates !== undefined) {
|
|
1712
|
+
const n = Object.values(record.preModDates).filter((v) => typeof v === "number").length;
|
|
1713
|
+
if (n > 0) {
|
|
1714
|
+
plan.notes.push(`would restore the modification date on ${n} row(s) after the inverse (this undo ` +
|
|
1715
|
+
"stays off the changes/watch timeline, symmetric with the --preserve-modified original)");
|
|
1716
|
+
}
|
|
1717
|
+
}
|
|
1624
1718
|
item = { plan, results: preview, outcome: "dry-run" };
|
|
1625
1719
|
}
|
|
1626
1720
|
else {
|
|
@@ -1677,6 +1771,28 @@ export async function runUndo(deps, auditDirPath, options = {}, onItem) {
|
|
|
1677
1771
|
break;
|
|
1678
1772
|
}
|
|
1679
1773
|
}
|
|
1774
|
+
// Symmetric umd-restore (2026-08-13 ruling): a forward op that ran with
|
|
1775
|
+
// --preserve-modified recorded each touched row's pre-write
|
|
1776
|
+
// userModificationDate on `preModDates`. After the inverse legs land, put
|
|
1777
|
+
// those umd values back (floor(preUmd)) so the UNDO is ALSO off the
|
|
1778
|
+
// changes/watch timeline — matching the forward op's silence. Best-effort:
|
|
1779
|
+
// a failed restore is disclosed, never fatal (the inverse already stands).
|
|
1780
|
+
// Records without preModDates (the default) are untouched.
|
|
1781
|
+
if (!failed && record.preModDates !== undefined) {
|
|
1782
|
+
const umdTargets = Object.entries(record.preModDates)
|
|
1783
|
+
.filter((e) => typeof e[1] === "number")
|
|
1784
|
+
.map(([tUuid, preUmd]) => ({ uuid: tUuid, preUmd }));
|
|
1785
|
+
if (umdTargets.length > 0) {
|
|
1786
|
+
const restore = await restoreModDates(deps.db, deps.vectors, umdTargets);
|
|
1787
|
+
if (restore.restored > 0) {
|
|
1788
|
+
plan.notes.push(`restored the modification date on ${restore.restored} row(s) so this undo stays ` +
|
|
1789
|
+
"off the changes/watch timeline (symmetric with the --preserve-modified original)");
|
|
1790
|
+
}
|
|
1791
|
+
for (const f of restore.failures) {
|
|
1792
|
+
plan.notes.push(`could not restore the modification date on ${f.uuid}: ${f.detail} (non-fatal)`);
|
|
1793
|
+
}
|
|
1794
|
+
}
|
|
1795
|
+
}
|
|
1680
1796
|
const okCount = results.filter((r) => r.kind === "ok").length;
|
|
1681
1797
|
item = {
|
|
1682
1798
|
plan,
|