things-api 0.9.0 → 0.11.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 +57 -12
- package/dist/audit/log.js +56 -2
- package/dist/audit/log.js.map +1 -1
- package/dist/audit/schema.d.ts +26 -8
- package/dist/audit/schema.js +42 -1
- package/dist/audit/schema.js.map +1 -1
- package/dist/cli/clock.d.ts +8 -0
- package/dist/cli/clock.js +24 -0
- package/dist/cli/clock.js.map +1 -0
- package/dist/cli/commands/area.d.ts +26 -3
- package/dist/cli/commands/area.js +129 -75
- package/dist/cli/commands/area.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -1
- package/dist/cli/commands/doctor.js +44 -5
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/install-skill.d.ts +45 -0
- package/dist/cli/commands/install-skill.js +207 -0
- package/dist/cli/commands/install-skill.js.map +1 -0
- package/dist/cli/commands/mcp.js +23 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/project.d.ts +18 -1
- package/dist/cli/commands/project.js +74 -35
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/reads.d.ts +15 -2
- package/dist/cli/commands/reads.js +459 -165
- package/dist/cli/commands/reads.js.map +1 -1
- package/dist/cli/commands/repeat-flags.d.ts +20 -0
- package/dist/cli/commands/repeat-flags.js +76 -0
- package/dist/cli/commands/repeat-flags.js.map +1 -0
- package/dist/cli/commands/setup.js +8 -4
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/show.js +53 -30
- package/dist/cli/commands/show.js.map +1 -1
- package/dist/cli/commands/todo.d.ts +1 -1
- package/dist/cli/commands/todo.js +20 -13
- package/dist/cli/commands/todo.js.map +1 -1
- package/dist/cli/commands/writes.js +388 -161
- package/dist/cli/commands/writes.js.map +1 -1
- package/dist/cli/did-you-mean.d.ts +1 -1
- package/dist/cli/excess-args.d.ts +15 -0
- package/dist/cli/excess-args.js +51 -0
- package/dist/cli/excess-args.js.map +1 -0
- package/dist/cli/glyphs.d.ts +55 -2
- package/dist/cli/glyphs.js +114 -21
- package/dist/cli/glyphs.js.map +1 -1
- package/dist/cli/help.d.ts +54 -0
- package/dist/cli/help.js +405 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/main.js +64 -26
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/move-hint.d.ts +45 -0
- package/dist/cli/move-hint.js +196 -0
- package/dist/cli/move-hint.js.map +1 -0
- package/dist/cli/period.d.ts +9 -8
- package/dist/cli/period.js +56 -30
- package/dist/cli/period.js.map +1 -1
- package/dist/cli/read-driver.d.ts +26 -19
- package/dist/cli/read-driver.js +77 -33
- package/dist/cli/read-driver.js.map +1 -1
- package/dist/cli/render.d.ts +92 -28
- package/dist/cli/render.js +333 -103
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/resolve-invocation.d.ts +42 -4
- package/dist/cli/resolve-invocation.js +97 -14
- package/dist/cli/resolve-invocation.js.map +1 -1
- package/dist/cli/skill-check.d.ts +21 -0
- package/dist/cli/skill-check.js +82 -0
- package/dist/cli/skill-check.js.map +1 -0
- package/dist/cli/skill.d.ts +62 -0
- package/dist/cli/skill.js +142 -0
- package/dist/cli/skill.js.map +1 -0
- package/dist/cli/tag-filters.d.ts +63 -0
- package/dist/cli/tag-filters.js +59 -0
- package/dist/cli/tag-filters.js.map +1 -0
- package/dist/cli/verb-hint.d.ts +25 -0
- package/dist/cli/verb-hint.js +163 -0
- package/dist/cli/verb-hint.js.map +1 -0
- package/dist/cli/version.d.ts +4 -0
- package/dist/cli/version.js +18 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli/width.d.ts +135 -0
- package/dist/cli/width.js +313 -0
- package/dist/cli/width.js.map +1 -0
- package/dist/client.d.ts +160 -24
- package/dist/client.js +132 -19
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/contracts.d.ts +97 -17
- package/dist/contracts.js +44 -1
- package/dist/contracts.js.map +1 -1
- package/dist/db/fingerprint.d.ts +12 -0
- package/dist/db/fingerprint.js +15 -1
- package/dist/db/fingerprint.js.map +1 -1
- package/dist/db/locate.js +1 -1
- package/dist/db/locate.js.map +1 -1
- package/dist/diagnose.d.ts +63 -0
- package/dist/diagnose.js +38 -1
- package/dist/diagnose.js.map +1 -1
- package/dist/index.d.ts +36 -5
- package/dist/index.js +38 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -1
- package/dist/mcp/server.js +1038 -436
- package/dist/mcp/server.js.map +1 -1
- package/dist/model/clock.d.ts +61 -0
- package/dist/model/clock.js +71 -0
- package/dist/model/clock.js.map +1 -0
- package/dist/model/dates.d.ts +26 -3
- package/dist/model/dates.js +84 -3
- package/dist/model/dates.js.map +1 -1
- package/dist/model/entities.d.ts +48 -10
- package/dist/model/entities.js.map +1 -1
- package/dist/model/mappers.d.ts +9 -2
- package/dist/model/mappers.js +32 -9
- package/dist/model/mappers.js.map +1 -1
- package/dist/model/serialize.d.ts +28 -0
- package/dist/model/serialize.js +80 -0
- package/dist/model/serialize.js.map +1 -0
- package/dist/model/when-sugar.d.ts +47 -0
- package/dist/model/when-sugar.js +45 -0
- package/dist/model/when-sugar.js.map +1 -0
- package/dist/read/area-view.d.ts +8 -1
- package/dist/read/area-view.js +55 -17
- package/dist/read/area-view.js.map +1 -1
- package/dist/read/detail.d.ts +1 -1
- package/dist/read/detail.js +11 -4
- package/dist/read/detail.js.map +1 -1
- package/dist/read/filter-contract.d.ts +117 -0
- package/dist/read/filter-contract.js +78 -0
- package/dist/read/filter-contract.js.map +1 -0
- package/dist/read/log-boundary.d.ts +1 -1
- package/dist/read/log-boundary.js +13 -3
- package/dist/read/log-boundary.js.map +1 -1
- package/dist/read/predicates.d.ts +30 -0
- package/dist/read/predicates.js +30 -0
- package/dist/read/predicates.js.map +1 -1
- package/dist/read/project-view.d.ts +12 -1
- package/dist/read/project-view.js +45 -12
- package/dist/read/project-view.js.map +1 -1
- package/dist/read/queries.d.ts +152 -7
- package/dist/read/queries.js +277 -36
- package/dist/read/queries.js.map +1 -1
- package/dist/read/sections.d.ts +51 -0
- package/dist/read/sections.js +37 -0
- package/dist/read/sections.js.map +1 -0
- package/dist/read/sidebar-order.js +2 -1
- package/dist/read/sidebar-order.js.map +1 -1
- package/dist/read/snapshot.d.ts +1 -1
- package/dist/read/snapshot.js +9 -2
- package/dist/read/snapshot.js.map +1 -1
- package/dist/read/tags.d.ts +27 -3
- package/dist/read/tags.js +83 -12
- package/dist/read/tags.js.map +1 -1
- package/dist/read/truncation.d.ts +71 -0
- package/dist/read/{pagination.js → truncation.js} +103 -94
- package/dist/read/truncation.js.map +1 -0
- package/dist/read/views.d.ts +147 -22
- package/dist/read/views.js +282 -80
- package/dist/read/views.js.map +1 -1
- package/dist/surface-copy.d.ts +19 -0
- package/dist/surface-copy.js +32 -0
- package/dist/surface-copy.js.map +1 -1
- package/dist/sync-health.d.ts +78 -0
- package/dist/sync-health.js +312 -0
- package/dist/sync-health.js.map +1 -0
- package/dist/write/accessibility-probe.d.ts +12 -0
- package/dist/write/accessibility-probe.js +71 -0
- package/dist/write/accessibility-probe.js.map +1 -0
- package/dist/write/automation-probe.d.ts +8 -1
- package/dist/write/automation-probe.js +16 -1
- package/dist/write/automation-probe.js.map +1 -1
- package/dist/write/batch.js +5 -2
- package/dist/write/batch.js.map +1 -1
- package/dist/write/capabilities.d.ts +8 -0
- package/dist/write/capabilities.js +13 -6
- package/dist/write/capabilities.js.map +1 -1
- package/dist/write/commands.d.ts +3 -1
- package/dist/write/commands.js +602 -49
- package/dist/write/commands.js.map +1 -1
- package/dist/write/edit-checklist.js +3 -2
- package/dist/write/edit-checklist.js.map +1 -1
- package/dist/write/guards.d.ts +2 -7
- package/dist/write/guards.js +87 -6
- package/dist/write/guards.js.map +1 -1
- package/dist/write/heading.js +2 -0
- package/dist/write/heading.js.map +1 -1
- package/dist/write/lock.d.ts +40 -2
- package/dist/write/lock.js +91 -14
- package/dist/write/lock.js.map +1 -1
- package/dist/write/make-repeating-project.d.ts +4 -0
- package/dist/write/make-repeating-project.js +253 -0
- package/dist/write/make-repeating-project.js.map +1 -0
- package/dist/write/operations.d.ts +145 -1
- package/dist/write/operations.js +48 -0
- package/dist/write/operations.js.map +1 -1
- package/dist/write/pipeline.d.ts +73 -2
- package/dist/write/pipeline.js +218 -43
- package/dist/write/pipeline.js.map +1 -1
- package/dist/write/planner.js +8 -1
- package/dist/write/planner.js.map +1 -1
- package/dist/write/pre-state.d.ts +105 -3
- package/dist/write/pre-state.js +144 -3
- package/dist/write/pre-state.js.map +1 -1
- package/dist/write/recurrence-rule-blob.d.ts +65 -0
- package/dist/write/recurrence-rule-blob.js +150 -0
- package/dist/write/recurrence-rule-blob.js.map +1 -0
- package/dist/write/reopen.js +3 -2
- package/dist/write/reopen.js.map +1 -1
- package/dist/write/reorder.js +27 -17
- package/dist/write/reorder.js.map +1 -1
- package/dist/write/repeat-rule.d.ts +22 -0
- package/dist/write/repeat-rule.js +258 -0
- package/dist/write/repeat-rule.js.map +1 -0
- package/dist/write/reversibility.js +49 -0
- package/dist/write/reversibility.js.map +1 -1
- package/dist/write/tag-refs.d.ts +47 -0
- package/dist/write/tag-refs.js +126 -0
- package/dist/write/tag-refs.js.map +1 -0
- package/dist/write/undo.d.ts +74 -5
- package/dist/write/undo.js +493 -80
- package/dist/write/undo.js.map +1 -1
- package/dist/write/vectors/registry.d.ts +15 -1
- package/dist/write/vectors/registry.js +65 -2
- package/dist/write/vectors/registry.js.map +1 -1
- package/dist/write/vectors/simulator.d.ts +44 -0
- package/dist/write/vectors/simulator.js +1136 -0
- package/dist/write/vectors/simulator.js.map +1 -0
- package/dist/write/vectors/types.d.ts +154 -3
- package/dist/write/vectors/ui-certification.d.ts +54 -0
- package/dist/write/vectors/ui-certification.js +43 -0
- package/dist/write/vectors/ui-certification.js.map +1 -0
- package/dist/write/vectors/ui-drag.d.ts +188 -0
- package/dist/write/vectors/ui-drag.js +1095 -0
- package/dist/write/vectors/ui-drag.js.map +1 -0
- package/dist/write/vectors/ui-recipes.d.ts +83 -0
- package/dist/write/vectors/ui-recipes.js +610 -0
- package/dist/write/vectors/ui-recipes.js.map +1 -0
- package/dist/write/vectors/ui.d.ts +152 -0
- package/dist/write/vectors/ui.js +704 -0
- package/dist/write/vectors/ui.js.map +1 -0
- package/dist/write/verify/delta.d.ts +141 -4
- package/dist/write/verify/delta.js +199 -21
- package/dist/write/verify/delta.js.map +1 -1
- package/dist/write/verify/poller.d.ts +7 -1
- package/dist/write/verify/poller.js +21 -1
- package/dist/write/verify/poller.js.map +1 -1
- package/package.json +18 -3
- package/skills/things-cli/SKILL.md +53 -0
- package/skills/things-cli/references/contracts.md +41 -0
- package/skills/things-cli/references/gui.md +11 -0
- package/skills/things-cli/references/model.md +51 -0
- package/dist/cli/exit-codes.d.ts +0 -26
- package/dist/cli/exit-codes.js +0 -26
- package/dist/cli/exit-codes.js.map +0 -1
- package/dist/cli/output.d.ts +0 -42
- package/dist/cli/output.js +0 -16
- package/dist/cli/output.js.map +0 -1
- package/dist/read/pagination.d.ts +0 -104
- package/dist/read/pagination.js.map +0 -1
package/dist/write/reorder.js
CHANGED
|
@@ -10,6 +10,19 @@ import { pollUntilVerified } from "./verify/poller.js";
|
|
|
10
10
|
* should use the native strategy and the evening scope should be re-thought.
|
|
11
11
|
*/
|
|
12
12
|
export const BOUNCE_MAX_ITEMS = 10;
|
|
13
|
+
function blocked(detail, remediation) {
|
|
14
|
+
return {
|
|
15
|
+
kind: "blocked",
|
|
16
|
+
result: {
|
|
17
|
+
kind: "blocked",
|
|
18
|
+
op: "reorder",
|
|
19
|
+
reason: "hazard",
|
|
20
|
+
hazard: "H-REORDER-SCOPE",
|
|
21
|
+
detail,
|
|
22
|
+
remediation,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
13
26
|
export async function runReorder(deps, params, options = {}) {
|
|
14
27
|
params = { ...params, uuids: params.uuids.map((u) => resolveTaskUuidPrefix(deps.db, u)) };
|
|
15
28
|
const strategy = resolveStrategy(deps, params);
|
|
@@ -21,17 +34,6 @@ export async function runReorder(deps, params, options = {}) {
|
|
|
21
34
|
return runBounce(deps, params, options);
|
|
22
35
|
}
|
|
23
36
|
function resolveStrategy(deps, params) {
|
|
24
|
-
const blocked = (detail, remediation) => ({
|
|
25
|
-
kind: "blocked",
|
|
26
|
-
result: {
|
|
27
|
-
kind: "blocked",
|
|
28
|
-
op: "reorder",
|
|
29
|
-
reason: "hazard",
|
|
30
|
-
hazard: "H-REORDER-SCOPE",
|
|
31
|
-
detail,
|
|
32
|
-
remediation,
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
37
|
const nativeAvailable = deps.config.allowExperimental && (deps.sdefProbe ?? sdefDeclaresPrivateReorder)();
|
|
36
38
|
if (params.strategy === "native") {
|
|
37
39
|
if (params.scope === "evening") {
|
|
@@ -76,6 +78,7 @@ function resolveStrategy(deps, params) {
|
|
|
76
78
|
async function runBounce(deps, params, options) {
|
|
77
79
|
const startedAt = deps.now?.() ?? new Date();
|
|
78
80
|
const now = deps.now ?? (() => new Date());
|
|
81
|
+
const actor = options.actor ?? deps.config.actor;
|
|
79
82
|
const scope = params.scope;
|
|
80
83
|
const rankKey = scope === "projects" ? "index" : "todayIndex";
|
|
81
84
|
const legOp = scope === "projects" ? "project.update" : "todo.update";
|
|
@@ -119,6 +122,7 @@ async function runBounce(deps, params, options) {
|
|
|
119
122
|
auditSummary(deps, params, startedAt, "blocked:H-REORDER-SCOPE", null, {
|
|
120
123
|
pre: preRanks,
|
|
121
124
|
txnId,
|
|
125
|
+
actor,
|
|
122
126
|
});
|
|
123
127
|
return result;
|
|
124
128
|
}
|
|
@@ -150,7 +154,7 @@ async function runBounce(deps, params, options) {
|
|
|
150
154
|
if (memberProblem !== null) {
|
|
151
155
|
const detail = `aborted before bouncing ${uuid}: ${memberProblem} (Things was likely edited ` +
|
|
152
156
|
"concurrently); already-placed items keep their new positions";
|
|
153
|
-
auditSummary(deps, params, startedAt, "verify-failed:mismatch", { placed: [...placed] }, { pre: preRanks, txnId });
|
|
157
|
+
auditSummary(deps, params, startedAt, "verify-failed:mismatch", { placed: [...placed] }, { pre: preRanks, txnId, actor });
|
|
154
158
|
return {
|
|
155
159
|
kind: "bounce-aborted",
|
|
156
160
|
op: "reorder",
|
|
@@ -160,9 +164,10 @@ async function runBounce(deps, params, options) {
|
|
|
160
164
|
cause: null,
|
|
161
165
|
};
|
|
162
166
|
}
|
|
167
|
+
// bounce legs must land in strict reverse order for the front-insert trick (O07/O08) to produce the requested top-first sequence
|
|
163
168
|
const leg1 = await runMutation(deps, legOp, { uuid, when: away }, legOptions(options, txnId));
|
|
164
169
|
if (leg1.kind !== "ok") {
|
|
165
|
-
auditSummary(deps, params, startedAt, "verify-failed:mismatch", { placed: [...placed] }, { pre: preRanks, txnId });
|
|
170
|
+
auditSummary(deps, params, startedAt, "verify-failed:mismatch", { placed: [...placed] }, { pre: preRanks, txnId, actor });
|
|
166
171
|
return {
|
|
167
172
|
kind: "bounce-aborted",
|
|
168
173
|
op: "reorder",
|
|
@@ -172,9 +177,10 @@ async function runBounce(deps, params, options) {
|
|
|
172
177
|
cause: leg1,
|
|
173
178
|
};
|
|
174
179
|
}
|
|
180
|
+
// leg 2 must follow leg 1's committed state for the same item before the next item's bounce begins
|
|
175
181
|
const leg2 = await runMutation(deps, legOp, { uuid, when: back }, legOptions(options, txnId));
|
|
176
182
|
if (leg2.kind !== "ok") {
|
|
177
|
-
auditSummary(deps, params, startedAt, "verify-failed:mismatch", { placed: [...placed] }, { pre: preRanks, txnId });
|
|
183
|
+
auditSummary(deps, params, startedAt, "verify-failed:mismatch", { placed: [...placed] }, { pre: preRanks, txnId, actor });
|
|
178
184
|
return {
|
|
179
185
|
kind: "bounce-aborted",
|
|
180
186
|
op: "reorder",
|
|
@@ -188,9 +194,10 @@ async function runBounce(deps, params, options) {
|
|
|
188
194
|
placed.unshift(uuid);
|
|
189
195
|
// Placed-prefix invariant: everything bounced so far must read back in
|
|
190
196
|
// requested relative order — anything else means a concurrent reshuffle.
|
|
197
|
+
// the placed-prefix must be verified after each item before bouncing the next, so a concurrent reshuffle is caught immediately rather than compounded
|
|
191
198
|
const prefixCheck = await pollUntilVerified(() => evaluateDelta({ mode: "ordering", key: rankKey, sequence: [...placed] }, createDbReader(deps.db), { modDates: {}, fields: {} }), options.verifyTimeoutMs ?? 4000, deps.poller ?? {});
|
|
192
199
|
if (prefixCheck.kind !== "ok") {
|
|
193
|
-
auditSummary(deps, params, startedAt, "verify-failed:mismatch", { placed: [...placed] }, { pre: preRanks, txnId });
|
|
200
|
+
auditSummary(deps, params, startedAt, "verify-failed:mismatch", { placed: [...placed] }, { pre: preRanks, txnId, actor });
|
|
194
201
|
return {
|
|
195
202
|
kind: "bounce-aborted",
|
|
196
203
|
op: "reorder",
|
|
@@ -206,7 +213,7 @@ async function runBounce(deps, params, options) {
|
|
|
206
213
|
const observed = {};
|
|
207
214
|
for (const uuid of params.uuids)
|
|
208
215
|
observed[uuid] = reader.rankOf(uuid, rankKey);
|
|
209
|
-
auditSummary(deps, params, startedAt, "ok", observed, { pre: preRanks, txnId });
|
|
216
|
+
auditSummary(deps, params, startedAt, "ok", observed, { pre: preRanks, txnId, actor });
|
|
210
217
|
return {
|
|
211
218
|
kind: "ok",
|
|
212
219
|
op: "reorder",
|
|
@@ -214,6 +221,9 @@ async function runBounce(deps, params, options) {
|
|
|
214
221
|
observed,
|
|
215
222
|
vector: "url-scheme",
|
|
216
223
|
tier: 0,
|
|
224
|
+
// A bounce reorder is a summary txn, so its token is the txn id (matches
|
|
225
|
+
// the audit record's undoToken); pass it to `things undo --txn <token>`.
|
|
226
|
+
undoToken: txnId,
|
|
217
227
|
};
|
|
218
228
|
}
|
|
219
229
|
function legOptions(options, txnId) {
|
|
@@ -274,7 +284,7 @@ function auditSummary(deps, params, startedAt, result, observed, extras) {
|
|
|
274
284
|
const record = {
|
|
275
285
|
v: 1,
|
|
276
286
|
ts: startedAt.toISOString(),
|
|
277
|
-
actor: deps.config.actor,
|
|
287
|
+
actor: extras?.actor ?? deps.config.actor,
|
|
278
288
|
host: deps.config.host,
|
|
279
289
|
op: "reorder",
|
|
280
290
|
uuid: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reorder.js","sourceRoot":"","sources":["../../src/write/reorder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reorder.js","sourceRoot":"","sources":["../../src/write/reorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RepeatRule } from "../model/recurrence.ts";
|
|
2
|
+
import { type RepeatRuleParams, type Weekday } from "./operations.ts";
|
|
3
|
+
/** Weekday name → rule encoding (wd 0 = Sunday). */
|
|
4
|
+
export declare const WEEKDAY_TO_WD: Record<Weekday, number>;
|
|
5
|
+
/** Rule encoding (wd 0..6) → weekday name. */
|
|
6
|
+
export declare const WD_TO_WEEKDAY: Record<number, Weekday>;
|
|
7
|
+
/**
|
|
8
|
+
* Validate the full extended rule vocabulary. The base `{ frequency, interval }`
|
|
9
|
+
* is always checked; every optional field is checked and REFUSED when it does
|
|
10
|
+
* not apply to the chosen frequency (or contradicts another field). Throws a
|
|
11
|
+
* RangeError with a behavioral message on any violation.
|
|
12
|
+
*/
|
|
13
|
+
export declare function assertRepeatRule(params: Omit<RepeatRuleParams, "uuid">): void;
|
|
14
|
+
export type InverseRuleFields = Omit<RepeatRuleParams, "uuid">;
|
|
15
|
+
/**
|
|
16
|
+
* Map a decoded prior rule (+ the template's deadline flag) back onto the
|
|
17
|
+
* extended vocabulary, or return null when the rule falls OUTSIDE what the
|
|
18
|
+
* Repeat dialog can express (the faithfulness boundary — see reversibility.ts).
|
|
19
|
+
* `reminder` is NOT part of the rule blob, so it is never restored here (a
|
|
20
|
+
* documented limitation of the reschedule inverse).
|
|
21
|
+
*/
|
|
22
|
+
export declare function ruleToInverseParams(rule: RepeatRule, deadlined: boolean): InverseRuleFields | null;
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { WEEKDAYS, } from "./operations.js";
|
|
2
|
+
const FREQUENCIES = ["daily", "weekly", "monthly", "yearly"];
|
|
3
|
+
/** Weekday name → rule encoding (wd 0 = Sunday). */
|
|
4
|
+
export const WEEKDAY_TO_WD = {
|
|
5
|
+
sunday: 0,
|
|
6
|
+
monday: 1,
|
|
7
|
+
tuesday: 2,
|
|
8
|
+
wednesday: 3,
|
|
9
|
+
thursday: 4,
|
|
10
|
+
friday: 5,
|
|
11
|
+
saturday: 6,
|
|
12
|
+
};
|
|
13
|
+
/** Rule encoding (wd 0..6) → weekday name. */
|
|
14
|
+
export const WD_TO_WEEKDAY = Object.fromEntries(Object.entries(WEEKDAY_TO_WD).map(([name, wd]) => [wd, name]));
|
|
15
|
+
// --------------------------------------------------------------- validation
|
|
16
|
+
function isRecord(v) {
|
|
17
|
+
return typeof v === "object" && v !== null;
|
|
18
|
+
}
|
|
19
|
+
function assertOrdinal(ordinal, where) {
|
|
20
|
+
if (ordinal === "last")
|
|
21
|
+
return;
|
|
22
|
+
if (!Number.isInteger(ordinal) || ordinal < 1 || ordinal > 5) {
|
|
23
|
+
throw new RangeError(`invalid ${where} ordinal ${JSON.stringify(ordinal)} — expected 1–5 or "last"`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function assertWeekday(day, where) {
|
|
27
|
+
if (typeof day !== "string" || !WEEKDAYS.includes(day)) {
|
|
28
|
+
throw new RangeError(`invalid ${where} weekday ${JSON.stringify(day)} — expected ${WEEKDAYS.join(" | ")}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Validate a month/year day anchor (shared by monthly + yearly). */
|
|
32
|
+
function assertMonthlyAnchor(anchor, where) {
|
|
33
|
+
if (!isRecord(anchor)) {
|
|
34
|
+
throw new RangeError(`${where} must be a day-of-month or nth-weekday anchor`);
|
|
35
|
+
}
|
|
36
|
+
const hasDay = "day" in anchor;
|
|
37
|
+
const hasWeekday = "weekday" in anchor || "ordinal" in anchor;
|
|
38
|
+
if (hasDay && hasWeekday) {
|
|
39
|
+
throw new RangeError(`${where} names both a day-of-month and a weekday — choose one (a day, OR a weekday + ordinal)`);
|
|
40
|
+
}
|
|
41
|
+
if (hasDay) {
|
|
42
|
+
const day = anchor["day"];
|
|
43
|
+
if (day === "last")
|
|
44
|
+
return;
|
|
45
|
+
if (!Number.isInteger(day) || day < 1 || day > 31) {
|
|
46
|
+
throw new RangeError(`invalid ${where} day ${JSON.stringify(day)} — expected 1–31 or "last"`);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (hasWeekday) {
|
|
51
|
+
assertWeekday(anchor["weekday"], where);
|
|
52
|
+
assertOrdinal(anchor["ordinal"], where);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
throw new RangeError(`${where} must name a day-of-month or a weekday + ordinal`);
|
|
56
|
+
}
|
|
57
|
+
function assertEnds(ends) {
|
|
58
|
+
switch (ends.kind) {
|
|
59
|
+
case "never":
|
|
60
|
+
return;
|
|
61
|
+
case "on-date":
|
|
62
|
+
if (!/^\d{4}-\d{2}-\d{2}$/.test(ends.date)) {
|
|
63
|
+
throw new RangeError(`invalid ends date ${JSON.stringify(ends.date)} — expected YYYY-MM-DD`);
|
|
64
|
+
}
|
|
65
|
+
return;
|
|
66
|
+
case "after":
|
|
67
|
+
if (!Number.isInteger(ends.count) || ends.count < 1 || ends.count > 999) {
|
|
68
|
+
throw new RangeError(`invalid ends count ${ends.count} — expected an integer 1–999`);
|
|
69
|
+
}
|
|
70
|
+
return;
|
|
71
|
+
default: {
|
|
72
|
+
const exhaustive = ends;
|
|
73
|
+
throw new RangeError(`unknown ends bound ${JSON.stringify(exhaustive)}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Validate the full extended rule vocabulary. The base `{ frequency, interval }`
|
|
79
|
+
* is always checked; every optional field is checked and REFUSED when it does
|
|
80
|
+
* not apply to the chosen frequency (or contradicts another field). Throws a
|
|
81
|
+
* RangeError with a behavioral message on any violation.
|
|
82
|
+
*/
|
|
83
|
+
export function assertRepeatRule(params) {
|
|
84
|
+
if (!FREQUENCIES.includes(params.frequency)) {
|
|
85
|
+
throw new RangeError(`invalid frequency "${params.frequency}" — expected ${FREQUENCIES.join(" | ")}`);
|
|
86
|
+
}
|
|
87
|
+
if (!Number.isInteger(params.interval) || params.interval < 1 || params.interval > 99) {
|
|
88
|
+
throw new RangeError(`invalid interval ${params.interval} — expected an integer 1–99`);
|
|
89
|
+
}
|
|
90
|
+
// After-completion has no calendar anchor: the day-of-week / monthly / yearly
|
|
91
|
+
// placements are meaningless when the next date is "N units after completion".
|
|
92
|
+
if (params.afterCompletion === true) {
|
|
93
|
+
if (params.weekdays !== undefined ||
|
|
94
|
+
params.monthly !== undefined ||
|
|
95
|
+
params.yearly !== undefined) {
|
|
96
|
+
throw new RangeError("an after-completion rule has no calendar day — remove weekdays/monthly/yearly, or drop afterCompletion for a fixed schedule");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (params.weekdays !== undefined) {
|
|
100
|
+
if (params.frequency !== "weekly") {
|
|
101
|
+
throw new RangeError("weekdays apply only to a weekly rule");
|
|
102
|
+
}
|
|
103
|
+
if (params.weekdays.length === 0) {
|
|
104
|
+
throw new RangeError("weekdays must name at least one day");
|
|
105
|
+
}
|
|
106
|
+
const seen = new Set();
|
|
107
|
+
for (const day of params.weekdays) {
|
|
108
|
+
assertWeekday(day, "weekdays");
|
|
109
|
+
if (seen.has(day))
|
|
110
|
+
throw new RangeError(`weekdays repeats "${day}"`);
|
|
111
|
+
seen.add(day);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (params.monthly !== undefined) {
|
|
115
|
+
if (params.frequency !== "monthly") {
|
|
116
|
+
throw new RangeError("monthly anchor applies only to a monthly rule");
|
|
117
|
+
}
|
|
118
|
+
assertMonthlyAnchor(params.monthly, "monthly");
|
|
119
|
+
}
|
|
120
|
+
if (params.yearly !== undefined) {
|
|
121
|
+
if (params.frequency !== "yearly") {
|
|
122
|
+
throw new RangeError("yearly anchor applies only to a yearly rule");
|
|
123
|
+
}
|
|
124
|
+
const month = params.yearly.month;
|
|
125
|
+
if (!Number.isInteger(month) || month < 1 || month > 12) {
|
|
126
|
+
throw new RangeError(`invalid yearly month ${JSON.stringify(month)} — expected 1–12`);
|
|
127
|
+
}
|
|
128
|
+
assertMonthlyAnchor(params.yearly, "yearly");
|
|
129
|
+
}
|
|
130
|
+
if (params.ends !== undefined)
|
|
131
|
+
assertEnds(params.ends);
|
|
132
|
+
if (params.reminder !== undefined) {
|
|
133
|
+
if (!/^\d{1,2}:\d{2}$/.test(params.reminder)) {
|
|
134
|
+
throw new RangeError(`invalid reminder ${JSON.stringify(params.reminder)} — expected HH:mm`);
|
|
135
|
+
}
|
|
136
|
+
// UIC6-g: the Repeat dialog's reminder-time control is an AXDateTimeArea
|
|
137
|
+
// whose committed time CANNOT be set through the Accessibility surface —
|
|
138
|
+
// it ignores AXValue writes (unlike the "ends on date" picker, which
|
|
139
|
+
// honors them) and silently commits its default instead. Rather than write
|
|
140
|
+
// a WRONG reminder time, the op refuses. (Set the reminder in the app after
|
|
141
|
+
// the series exists; every other rule field IS drivable.) See
|
|
142
|
+
// docs/lab/uic6-rule-vocabulary.md and docs/things-app-oddities.md.
|
|
143
|
+
throw new RangeError("a repeat reminder time cannot be set through the GUI vector — Things' reminder picker " +
|
|
144
|
+
"ignores programmatic time entry (UIC6-g); create the series without --reminder and set the " +
|
|
145
|
+
"reminder in the app");
|
|
146
|
+
}
|
|
147
|
+
if (params.startDaysEarlier !== undefined) {
|
|
148
|
+
if (!Number.isInteger(params.startDaysEarlier) || params.startDaysEarlier < 0) {
|
|
149
|
+
throw new RangeError(`invalid startDaysEarlier ${params.startDaysEarlier} — expected an integer ≥ 0`);
|
|
150
|
+
}
|
|
151
|
+
if (params.startDaysEarlier > 0 && params.deadline === false) {
|
|
152
|
+
throw new RangeError("startDaysEarlier requires a deadline (it counts days before the deadline)");
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** The mutually-exclusive Ends bound of a decoded rule, or null if inexpressible. */
|
|
157
|
+
function endsOf(rule) {
|
|
158
|
+
const hasDate = rule.endDate !== null;
|
|
159
|
+
const hasCount = rule.remainingCount !== null;
|
|
160
|
+
if (hasDate && hasCount)
|
|
161
|
+
return null; // dialog's Ends is single-choice
|
|
162
|
+
if (hasDate)
|
|
163
|
+
return { ends: { kind: "on-date", date: rule.endDate } };
|
|
164
|
+
if (hasCount)
|
|
165
|
+
return { ends: { kind: "after", count: rule.remainingCount } };
|
|
166
|
+
return { ends: { kind: "never" } };
|
|
167
|
+
}
|
|
168
|
+
function monthlyAnchorOf(offset) {
|
|
169
|
+
if (offset.weekday !== undefined) {
|
|
170
|
+
const weekday = WD_TO_WEEKDAY[offset.weekday];
|
|
171
|
+
if (weekday === undefined)
|
|
172
|
+
return null;
|
|
173
|
+
const ord = offset.weekdayOrdinal ?? 1;
|
|
174
|
+
const ordinal = ord === -1 ? "last" : ord;
|
|
175
|
+
if (ordinal !== "last" && (ordinal < 1 || ordinal > 5))
|
|
176
|
+
return null;
|
|
177
|
+
return { weekday, ordinal };
|
|
178
|
+
}
|
|
179
|
+
if (offset.day !== undefined) {
|
|
180
|
+
return { day: offset.day === -1 ? "last" : offset.day };
|
|
181
|
+
}
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Map a decoded prior rule (+ the template's deadline flag) back onto the
|
|
186
|
+
* extended vocabulary, or return null when the rule falls OUTSIDE what the
|
|
187
|
+
* Repeat dialog can express (the faithfulness boundary — see reversibility.ts).
|
|
188
|
+
* `reminder` is NOT part of the rule blob, so it is never restored here (a
|
|
189
|
+
* documented limitation of the reschedule inverse).
|
|
190
|
+
*/
|
|
191
|
+
export function ruleToInverseParams(rule, deadlined) {
|
|
192
|
+
const fields = { frequency: rule.unit, interval: rule.interval };
|
|
193
|
+
const ends = endsOf(rule);
|
|
194
|
+
if (ends === null)
|
|
195
|
+
return null;
|
|
196
|
+
if (ends.ends.kind !== "never")
|
|
197
|
+
fields.ends = ends.ends;
|
|
198
|
+
const afterCompletion = rule.type === "after-completion";
|
|
199
|
+
// Calendar anchors from the offsets.
|
|
200
|
+
const meaningful = rule.offsets.filter((o) => o.day !== undefined || o.weekday !== undefined || o.month !== undefined);
|
|
201
|
+
if (afterCompletion) {
|
|
202
|
+
// After-completion has no calendar anchor in the dialog, so the user can
|
|
203
|
+
// never set one — but Things still writes a NOMINAL offset for the unit
|
|
204
|
+
// (UIC6-e: a weekly-unit after-completion rule carries of=[{wd:0}], a
|
|
205
|
+
// monthly one of=[{dy:0}], etc.). That offset is not user-meaningful and is
|
|
206
|
+
// never round-tripped, so it is IGNORED here (an earlier assumption that
|
|
207
|
+
// after-completion rules carry no offsets was wrong — it would have made
|
|
208
|
+
// every after-completion reschedule-undo spuriously irreversible).
|
|
209
|
+
fields.afterCompletion = true;
|
|
210
|
+
}
|
|
211
|
+
else if (rule.unit === "weekly") {
|
|
212
|
+
const weekdays = [];
|
|
213
|
+
for (const o of meaningful) {
|
|
214
|
+
if (o.weekday === undefined)
|
|
215
|
+
return null;
|
|
216
|
+
const name = WD_TO_WEEKDAY[o.weekday];
|
|
217
|
+
if (name === undefined)
|
|
218
|
+
return null;
|
|
219
|
+
weekdays.push(name);
|
|
220
|
+
}
|
|
221
|
+
if (weekdays.length > 0)
|
|
222
|
+
fields.weekdays = weekdays;
|
|
223
|
+
}
|
|
224
|
+
else if (rule.unit === "monthly") {
|
|
225
|
+
if (meaningful.length > 1)
|
|
226
|
+
return null; // dialog sets ONE monthly anchor
|
|
227
|
+
const only = meaningful[0];
|
|
228
|
+
if (only !== undefined) {
|
|
229
|
+
const anchor = monthlyAnchorOf(only);
|
|
230
|
+
if (anchor === null)
|
|
231
|
+
return null;
|
|
232
|
+
fields.monthly = anchor;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
else if (rule.unit === "yearly") {
|
|
236
|
+
if (meaningful.length > 1)
|
|
237
|
+
return null;
|
|
238
|
+
const only = meaningful[0];
|
|
239
|
+
if (only !== undefined) {
|
|
240
|
+
if (only.month === undefined)
|
|
241
|
+
return null;
|
|
242
|
+
const anchor = monthlyAnchorOf(only);
|
|
243
|
+
if (anchor === null)
|
|
244
|
+
return null;
|
|
245
|
+
fields.yearly = { month: only.month, ...anchor };
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// daily: no offsets.
|
|
249
|
+
// Deadline + start-earlier: ts ≤ 0 in the rule; deadline-ness from the column.
|
|
250
|
+
if (deadlined)
|
|
251
|
+
fields.deadline = true;
|
|
252
|
+
if (rule.startOffsetDays < 0) {
|
|
253
|
+
fields.deadline = true;
|
|
254
|
+
fields.startDaysEarlier = -rule.startOffsetDays;
|
|
255
|
+
}
|
|
256
|
+
return fields;
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=repeat-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repeat-rule.js","sourceRoot":"","sources":["../../src/write/repeat-rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -125,6 +125,10 @@ export const REVERSIBILITY = {
|
|
|
125
125
|
class: "conditional",
|
|
126
126
|
note: "invertible when pre-ranks were captured (native reorders + bounce summaries that recorded pre-ranks); irreversible for bounce summaries with no recorded pre-ranks",
|
|
127
127
|
},
|
|
128
|
+
"area.reorder": {
|
|
129
|
+
class: "conditional",
|
|
130
|
+
note: "invertible when the pre-move area order was fully determined (the full ordered area list is captured; the inverse drags the area back before its old successor — order is the invariant that round-trips, index values are not, AXDRAG1-f); irreversible when areas were still unranked (all-zero index) before the move",
|
|
131
|
+
},
|
|
128
132
|
// ---- headings -----------------------------------------------------------
|
|
129
133
|
"heading.archive": {
|
|
130
134
|
class: "reversible-with-loss",
|
|
@@ -156,6 +160,51 @@ export const REVERSIBILITY = {
|
|
|
156
160
|
class: "irreversible",
|
|
157
161
|
note: "a created heading has no headless delete surface (heading delete is interactive-only) — archive it in the app instead",
|
|
158
162
|
},
|
|
163
|
+
"todo.make-repeating": {
|
|
164
|
+
class: "irreversible",
|
|
165
|
+
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",
|
|
166
|
+
},
|
|
167
|
+
"todo.convert-to-project": {
|
|
168
|
+
class: "irreversible",
|
|
169
|
+
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",
|
|
170
|
+
},
|
|
171
|
+
"project.make-repeating": {
|
|
172
|
+
class: "irreversible",
|
|
173
|
+
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",
|
|
174
|
+
},
|
|
175
|
+
"project.create-repeating": {
|
|
176
|
+
class: "irreversible",
|
|
177
|
+
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",
|
|
178
|
+
},
|
|
179
|
+
"heading.convert-to-project": {
|
|
180
|
+
class: "irreversible",
|
|
181
|
+
note: "converting 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",
|
|
182
|
+
},
|
|
183
|
+
"todo.reschedule-repeat": {
|
|
184
|
+
class: "conditional",
|
|
185
|
+
note: "the rule mutates in place (identity preserved, UI2-b); the FULL rule vocabulary re-drives reschedule with the captured prior rule (weekday set, monthly/yearly anchor, ends bound, deadline/start-offset all restored) — invertible whenever the prior rule was captured, decodable, and within the Repeat dialog's vocabulary; irreversible for a rule the dialog itself cannot produce (two end bounds, a multi-anchor month/year rule, or an after-completion rule with a calendar day). A per-instance reminder time is not part of the captured rule and is not restored",
|
|
186
|
+
},
|
|
187
|
+
"project.reschedule-repeat": {
|
|
188
|
+
class: "conditional",
|
|
189
|
+
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",
|
|
190
|
+
},
|
|
191
|
+
// ---- ui-vector reversible pairs -----------------------------------------
|
|
192
|
+
"todo.pause-repeat": {
|
|
193
|
+
class: "reversible",
|
|
194
|
+
note: "inverse resumes the repeat (UI2-c): pause sets instance-creation paused, keeping the template and rule; resume clears it",
|
|
195
|
+
},
|
|
196
|
+
"todo.resume-repeat": {
|
|
197
|
+
class: "reversible",
|
|
198
|
+
note: "inverse pauses the repeat (UI2-c): the reversible cessation toggle — resume clears the paused flag, pause re-sets it",
|
|
199
|
+
},
|
|
200
|
+
"project.pause-repeat": {
|
|
201
|
+
class: "reversible",
|
|
202
|
+
note: "inverse resumes the project's repeat (UIC2-a): pause sets instance-creation paused, keeping the template and rule; resume clears it",
|
|
203
|
+
},
|
|
204
|
+
"project.resume-repeat": {
|
|
205
|
+
class: "reversible",
|
|
206
|
+
note: "inverse pauses the project's repeat (UIC2-a): resume clears the paused flag, pause re-sets it",
|
|
207
|
+
},
|
|
159
208
|
};
|
|
160
209
|
/** The ops whose class is `irreversible` — must equal undo.ts's IRREVERSIBLE keys. */
|
|
161
210
|
export function irreversibleOps() {
|
|
@@ -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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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tag-reference resolution for the tag-accepting write ops (todo.add,
|
|
3
|
+
* todo.set-tags, project.set-tags, area.add, area.update).
|
|
4
|
+
*
|
|
5
|
+
* A tag value is a NAME — either a plain TITLE or a PATH-qualified
|
|
6
|
+
* `parent/child` name. Tag uuids are a fully internal implementation detail
|
|
7
|
+
* (like checklist ids) and are neither accepted here nor surfaced anywhere.
|
|
8
|
+
*
|
|
9
|
+
* Precedence is LITERAL-OVER-PATH (TAGW1-d: `/` is a legal literal in a tag
|
|
10
|
+
* title, `sl/ash` stored + matched literally): an exact literal title match
|
|
11
|
+
* wins even when the ref contains `/`; only otherwise is the ref split on `/`
|
|
12
|
+
* and resolved as a parent-child chain.
|
|
13
|
+
*
|
|
14
|
+
* The resolver's only job is an EXISTENCE check. Tags are applied by passing
|
|
15
|
+
* the NAME to the app's own write vector (`tags=Name` / `set tag names`), so
|
|
16
|
+
* the APP resolves the name exactly as its GUI does — we never pick a uuid. A
|
|
17
|
+
* name matching ≥1 tag is "known" (the name passes through); a name matching
|
|
18
|
+
* none is reported as missing (the H-UNKNOWN-TAG guard refuses on it). A
|
|
19
|
+
* duplicate-name pair (a Cloud-sync-only pathological state we delegate to the
|
|
20
|
+
* app, matching the GUI) needs no special handling — both share the name.
|
|
21
|
+
*/
|
|
22
|
+
import type { DatabaseSync } from "node:sqlite";
|
|
23
|
+
export interface TagResolution {
|
|
24
|
+
/**
|
|
25
|
+
* Resolved leaf titles to apply, de-duplicated, in first-seen order. Only
|
|
26
|
+
* COMPLETE (one per input ref) when `missing` is empty; on a refusal the
|
|
27
|
+
* H-UNKNOWN-TAG guard blocks before these titles are used.
|
|
28
|
+
*/
|
|
29
|
+
titles: string[];
|
|
30
|
+
/** Refs that resolved to nothing (unknown tags). */
|
|
31
|
+
missing: string[];
|
|
32
|
+
}
|
|
33
|
+
/** One creation step for `--create-tags`: a `make new tag`, optionally nested. */
|
|
34
|
+
export interface TagCreationStep {
|
|
35
|
+
title: string;
|
|
36
|
+
/** Existing (or already-planned) parent tag title to nest under. */
|
|
37
|
+
parent?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function resolveTagRefs(db: DatabaseSync, refs: string[]): TagResolution;
|
|
40
|
+
/**
|
|
41
|
+
* Ordered `make new tag` steps to satisfy `--create-tags`: only the tags that
|
|
42
|
+
* are genuinely MISSING, with mkdir-p intermediates for a `parent/child` path
|
|
43
|
+
* (parents first so each child's parent resolves). A ref that already resolves
|
|
44
|
+
* yields no step (idempotent — the TAGW1-c coalesce also makes re-creation a
|
|
45
|
+
* no-op).
|
|
46
|
+
*/
|
|
47
|
+
export declare function planTagCreation(db: DatabaseSync, refs: string[]): TagCreationStep[];
|