pm-csv 2026.10.28 → 2026.10.30
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 +86 -2
- package/dist/admission.d.ts +93 -0
- package/dist/admission.d.ts.map +1 -0
- package/dist/admission.js +362 -0
- package/dist/admission.js.map +1 -0
- package/dist/atomic-update.d.ts.map +1 -1
- package/dist/atomic-update.js +16 -14
- package/dist/atomic-update.js.map +1 -1
- package/dist/edit-refusal.d.ts +1 -1
- package/dist/edit-refusal.d.ts.map +1 -1
- package/dist/index.d.ts +46 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +364 -117
- package/dist/index.js.map +1 -1
- package/dist/join-plans.d.ts +110 -0
- package/dist/join-plans.d.ts.map +1 -0
- package/dist/join-plans.js +557 -0
- package/dist/join-plans.js.map +1 -0
- package/dist/lineage.d.ts +3 -6
- package/dist/lineage.d.ts.map +1 -1
- package/dist/lineage.js +32 -11
- package/dist/lineage.js.map +1 -1
- package/dist/mutation-intent.d.ts +57 -0
- package/dist/mutation-intent.d.ts.map +1 -0
- package/dist/mutation-intent.js +145 -0
- package/dist/mutation-intent.js.map +1 -0
- package/dist/roundtrip.d.ts +2 -8
- package/dist/roundtrip.d.ts.map +1 -1
- package/dist/roundtrip.js +78 -24
- package/dist/roundtrip.js.map +1 -1
- package/dist/settings-snapshot.d.ts +37 -0
- package/dist/settings-snapshot.d.ts.map +1 -0
- package/dist/settings-snapshot.js +128 -0
- package/dist/settings-snapshot.js.map +1 -0
- package/dist/table-schema.d.ts +10 -7
- package/dist/table-schema.d.ts.map +1 -1
- package/dist/table-schema.js +36 -12
- package/dist/table-schema.js.map +1 -1
- package/docs/import-admission.md +199 -0
- package/docs/join-plans.md +201 -0
- package/docs/join-validation.md +240 -0
- package/docs/spreadsheet-roundtrip.md +17 -2
- package/manifest.json +1 -1
- package/package.json +10 -6
package/dist/roundtrip.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { assertCanonicalMutationIds, explicitDocumentMutation } from "./mutation-intent.js";
|
|
1
2
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
-
import {
|
|
3
|
+
import { basename, resolve } from "node:path";
|
|
4
|
+
import { acquireLock, canonicalDocument, commitWorkspaceTransaction, getHistoryPath, mutateItem, readHistoryEntries, verifyHistoryEntries, runWorkspaceTransactionGc, } from "@unbrained/pm-cli/sdk";
|
|
5
|
+
import { captureSettings, inSettingsTransaction, readPinnedSettings as readSettings, rethrowSettingsChange, useSettings, verifySettings, withSettings, withSettingsFence } from "./settings-snapshot.js";
|
|
3
6
|
import { EditRefusal } from "./edit-refusal.js";
|
|
4
7
|
import { assertEditLease, guardEditMutation } from "./lease-guard.js";
|
|
5
8
|
export { EditRefusal } from "./edit-refusal.js";
|
|
@@ -65,20 +68,28 @@ function fromCell(cell) {
|
|
|
65
68
|
return cell.startsWith("'") && /^[=+\-@\t\r']/.test(cell.slice(1)) ? cell.slice(1) : cell;
|
|
66
69
|
}
|
|
67
70
|
/** Export explicit stable keys and digests without creating tracker metadata. */
|
|
68
|
-
|
|
71
|
+
async function exportEditSessionInternal(pmRoot, ids) {
|
|
69
72
|
if (ids.length > 1000 || new Set(ids).size !== ids.length || ids.some(id => !/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(id))) {
|
|
70
73
|
throw new EditRefusal("csv_session_invalid", "Export at most 1000 distinct canonical item IDs; split larger selections.");
|
|
71
74
|
}
|
|
75
|
+
assertCanonicalMutationIds(ids, (await readSettings(pmRoot)).id_prefix, canonicalIdsRequired);
|
|
72
76
|
const rows = [];
|
|
73
77
|
for (const id of ids)
|
|
74
78
|
rows.push(await snapshot(pmRoot, id));
|
|
75
79
|
const base = { version: 1, id: randomUUID(), rows };
|
|
76
80
|
const session = { ...base, digest: digest(base) };
|
|
81
|
+
await verifySettings(pmRoot);
|
|
77
82
|
return { session, table: [editSessionHeader(), ...rows.map(row => [
|
|
78
83
|
session.digest, row.id, row.revision, row.itemDigest, row.status,
|
|
79
84
|
...EDIT_FIELDS.flatMap(field => [toCell(row.values[field]), row.digests[field]]),
|
|
80
85
|
])] };
|
|
81
86
|
}
|
|
87
|
+
/** Export one internally consistent settings/schema view across all selected items. */
|
|
88
|
+
export async function exportEditSession(pmRoot, ids) {
|
|
89
|
+
pmRoot = resolve(pmRoot);
|
|
90
|
+
const captured = [...ids];
|
|
91
|
+
return withSettings(pmRoot, settingsChanged, () => exportEditSessionInternal(pmRoot, captured));
|
|
92
|
+
}
|
|
82
93
|
/** Validate an untrusted sidecar structurally as well as by its content digest. */
|
|
83
94
|
export function parseEditSession(input) {
|
|
84
95
|
try {
|
|
@@ -90,7 +101,7 @@ export function parseEditSession(input) {
|
|
|
90
101
|
for (const row of session.rows) {
|
|
91
102
|
if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(row.id) || typeof row.status !== "string"
|
|
92
103
|
|| !/^[a-f0-9]{64}$/.test(row.revision) || !/^[a-f0-9]{64}$/.test(row.itemDigest)
|
|
93
|
-
|| EDIT_FIELDS.some(field => typeof row.values[field] !== "string" || row.digests[field] !== digest([field, row.values[field]])))
|
|
104
|
+
|| EDIT_FIELDS.some(field => !Object.hasOwn(row.values, field) || !Object.hasOwn(row.digests, field) || typeof row.values[field] !== "string" || row.digests[field] !== digest([field, row.values[field]])))
|
|
94
105
|
throw new Error();
|
|
95
106
|
}
|
|
96
107
|
return structuredClone(session);
|
|
@@ -100,10 +111,7 @@ export function parseEditSession(input) {
|
|
|
100
111
|
}
|
|
101
112
|
}
|
|
102
113
|
/** Parse all edited rows before reading or writing tracker state. */
|
|
103
|
-
function plans(session, table) {
|
|
104
|
-
if (!Array.isArray(table) || table.some(row => !Array.isArray(row) || row.some(cell => typeof cell !== "string"))) {
|
|
105
|
-
throw new EditRefusal("csv_edit_invalid", "Provide a table of CSV string cells, including the checkout header.");
|
|
106
|
-
}
|
|
114
|
+
function plans(session, table, schema) {
|
|
107
115
|
const header = table[0];
|
|
108
116
|
if (JSON.stringify(header) !== JSON.stringify(editSessionHeader())) {
|
|
109
117
|
throw new EditRefusal("csv_edit_invalid", "Keep the checkout column names and order, including all digest columns.");
|
|
@@ -127,14 +135,19 @@ function plans(session, table) {
|
|
|
127
135
|
if (desired[field].replace(/\r\n/g, "\n") === base.values[field].replace(/\r\n/g, "\n"))
|
|
128
136
|
desired[field] = base.values[field];
|
|
129
137
|
}
|
|
130
|
-
// The host canonical document contract trims trailing body whitespace.
|
|
131
|
-
desired.body = desired.body.trimEnd();
|
|
132
138
|
const fields = EDIT_FIELDS.filter(field => desired[field] !== base.values[field]);
|
|
133
139
|
if (!desired.title.trim() || !/^[0-4]$/.test(desired.priority)
|
|
134
140
|
|| fields.some(field => field !== "body" && desired[field] !== desired[field].trim())) {
|
|
135
|
-
throw new EditRefusal("csv_edit_invalid", "Provide a nonblank title, priority 0..4, and trim scalar cells; body follows
|
|
141
|
+
throw new EditRefusal("csv_edit_invalid", "Provide a nonblank title, priority 0..4, and trim scalar cells; body follows SDK document canonicalization.");
|
|
136
142
|
}
|
|
137
|
-
|
|
143
|
+
// Edits write stored documents, not command options: canonicalize with the
|
|
144
|
+
// same SDK contract as mutateItem (literal "none" remains a stored string).
|
|
145
|
+
const normalized = cells(canonicalDocument({ metadata: {
|
|
146
|
+
id: base.id, title: desired.title, description: "", type: "Task", status: base.status,
|
|
147
|
+
priority: Number(desired.priority), tags: [], created_at: "", updated_at: "",
|
|
148
|
+
assignee: desired.assignee, sprint: desired.sprint, release: desired.release,
|
|
149
|
+
}, body: desired.body }, { schema }));
|
|
150
|
+
return { base, desired: normalized, fields: EDIT_FIELDS.filter(field => normalized[field] !== base.values[field]) };
|
|
138
151
|
});
|
|
139
152
|
}
|
|
140
153
|
/** Detect divergence only in edited fields; equal desired values are convergent. */
|
|
@@ -144,9 +157,9 @@ function conflicts(plan, current) {
|
|
|
144
157
|
/** Check and apply a field patch under the host item lease; write-time fencing remains a host prerequisite. */
|
|
145
158
|
async function applyPlan(pmRoot, plan, marker, author) {
|
|
146
159
|
const settings = await readSettings(pmRoot);
|
|
147
|
-
const result = await mutateItem({ pmRoot, settings, id: plan.base.id, op: "update", author,
|
|
160
|
+
const result = await withSettingsFence(pmRoot, () => mutateItem({ pmRoot, settings, id: plan.base.id, op: "update", author,
|
|
148
161
|
message: `${marker}:apply`, skipNoop: true,
|
|
149
|
-
mutate: guardEditMutation(settings.locks.ttl_seconds, async (document) => {
|
|
162
|
+
mutate: explicitDocumentMutation(guardEditMutation(settings.locks.ttl_seconds, async (document) => {
|
|
150
163
|
const current = await documentRow(pmRoot, plan.base.id, document);
|
|
151
164
|
const divergent = conflicts(plan, current);
|
|
152
165
|
if (divergent.length)
|
|
@@ -169,8 +182,8 @@ async function applyPlan(pmRoot, plan, marker, author) {
|
|
|
169
182
|
changedFields.push(field);
|
|
170
183
|
}
|
|
171
184
|
return { changedFields };
|
|
172
|
-
}),
|
|
173
|
-
});
|
|
185
|
+
})),
|
|
186
|
+
}));
|
|
174
187
|
return result.changedFields.length > 0;
|
|
175
188
|
}
|
|
176
189
|
/** Collect conflict keys across cause/aggregate graphs, visiting shared or cyclic errors once. */
|
|
@@ -197,10 +210,13 @@ function findConflicts(error) {
|
|
|
197
210
|
* after lease expiry needs host write fencing. Prior rows are compensated on
|
|
198
211
|
* ordinary failure, which explicitly requires reconciliation.
|
|
199
212
|
*/
|
|
200
|
-
|
|
201
|
-
const
|
|
202
|
-
|
|
213
|
+
async function applyEditSessionInternal(pmRoot, session, table, options) {
|
|
214
|
+
const settings = await readSettings(pmRoot);
|
|
215
|
+
assertCanonicalMutationIds(session.rows.map(row => row.id), settings.id_prefix, canonicalIdsRequired);
|
|
216
|
+
const planned = plans(session, table, settings.schema);
|
|
203
217
|
const transaction = `csv-edit-${digest([session.digest, table])}`;
|
|
218
|
+
const journal = (await runWorkspaceTransactionGc(pmRoot, { dryRun: true, retentionDays: Infinity })).entries
|
|
219
|
+
.find(entry => basename(entry.file) === `${transaction}.json`);
|
|
204
220
|
const edited = planned.filter(plan => plan.fields.length > 0);
|
|
205
221
|
const found = [];
|
|
206
222
|
let concurrent = 0;
|
|
@@ -224,32 +240,70 @@ export async function applyEditSession(pmRoot, input, table, options) {
|
|
|
224
240
|
if (found.length)
|
|
225
241
|
throw new EditRefusal("csv_edit_conflict", "Export a fresh session and reconcile the reported fields before applying; this preflight wrote zero items.", found);
|
|
226
242
|
const receipt = { rows: planned.length, changed: pending, unchanged: planned.length - pending, concurrent, applied: 0 };
|
|
227
|
-
if (options.dryRun
|
|
243
|
+
if (journal?.status === "compensated" || (options.dryRun && journal?.status === "compensating"))
|
|
244
|
+
throw new EditRefusal("csv_edit_apply_failed", "The prior edit attempt requires compensation recovery and a fresh session. Resume recovery without dry-run; do not replay a compensated edit.");
|
|
245
|
+
if (options.dryRun || (!pending && (!journal || journal.status === "committed"))) {
|
|
246
|
+
await verifySettings(pmRoot);
|
|
228
247
|
return receipt;
|
|
248
|
+
}
|
|
229
249
|
// Bind the journal to the exact selected rows and edits, independent of file path.
|
|
230
250
|
let applied = 0;
|
|
251
|
+
let compensating = false;
|
|
252
|
+
let rollback;
|
|
231
253
|
const steps = edited.map((plan, index) => {
|
|
232
254
|
const marker = `csv-txrow:${transaction}#${index}`;
|
|
233
255
|
return {
|
|
234
256
|
id: `${index}-${plan.base.id}`,
|
|
235
257
|
inspect: () => inspectUpdate(pmRoot, plan.base.id, marker, false),
|
|
236
|
-
prepareCompensation: () => captureUpdateCompensation(pmRoot, plan.base.id, marker, options.author),
|
|
237
|
-
apply: async () => {
|
|
258
|
+
prepareCompensation: () => inSettingsTransaction(pmRoot, () => withSettingsFence(pmRoot, () => captureUpdateCompensation(pmRoot, plan.base.id, marker, options.author))),
|
|
259
|
+
apply: () => inSettingsTransaction(pmRoot, async () => {
|
|
238
260
|
if (await applyPlan(pmRoot, plan, marker, options.author))
|
|
239
261
|
applied++;
|
|
240
262
|
return plan.base.id;
|
|
241
|
-
},
|
|
242
|
-
compensate: data => compensateUpdate(pmRoot, plan.base.id, marker, options.author, data),
|
|
263
|
+
}),
|
|
264
|
+
compensate: data => inSettingsTransaction(pmRoot, () => useSettings(pmRoot, rollback, () => withSettingsFence(pmRoot, () => compensateUpdate(pmRoot, plan.base.id, marker, options.author, data)))),
|
|
243
265
|
};
|
|
244
266
|
});
|
|
245
267
|
try {
|
|
246
|
-
await commitWorkspaceTransaction({ pmRoot, transactionId: transaction, author: options.author, steps, onTransition:
|
|
268
|
+
await commitWorkspaceTransaction({ pmRoot, transactionId: transaction, author: options.author, steps, onTransition: async (event) => {
|
|
269
|
+
if (event.transition === "compensating") {
|
|
270
|
+
compensating = true;
|
|
271
|
+
rollback = await captureSettings(pmRoot, settingsChanged);
|
|
272
|
+
}
|
|
273
|
+
if (event.transition === "prepared")
|
|
274
|
+
compensating = false;
|
|
275
|
+
await options.onTransition?.(event);
|
|
276
|
+
if (journal?.status === "compensating" && ["compensated", "prepared"].includes(event.transition)) {
|
|
277
|
+
throw new EditRefusal("csv_edit_apply_failed", "Pending edit compensation was recovered. Export a fresh session; no new forward edits were applied.");
|
|
278
|
+
}
|
|
279
|
+
if (!compensating && event.transition !== "committed")
|
|
280
|
+
await withSettingsFence(pmRoot, async () => { });
|
|
281
|
+
} });
|
|
247
282
|
}
|
|
248
283
|
catch (error) {
|
|
284
|
+
rethrowSettingsChange(error, settingsChanged);
|
|
249
285
|
const refusal = new EditRefusal("csv_edit_apply_failed", `Inspect and reconcile transaction ${transaction} before retrying. Item fields were checked before persistence; the host must keep its item lease valid through the write. Reverse compensation was attempted and may have refused a concurrent writer.`, findConflicts(error));
|
|
250
286
|
refusal.cause = error;
|
|
251
287
|
throw refusal;
|
|
252
288
|
}
|
|
289
|
+
await verifySettings(pmRoot);
|
|
253
290
|
return { ...receipt, applied, transaction };
|
|
254
291
|
}
|
|
292
|
+
/** Keep alias/duplicate identity refusals in the spreadsheet API family. */
|
|
293
|
+
function canonicalIdsRequired() {
|
|
294
|
+
return new EditRefusal("csv_session_invalid", "Use distinct canonical native IDs from an unchanged checkout; prefix, case and whitespace aliases cannot identify separate rows.");
|
|
295
|
+
}
|
|
296
|
+
/** Bind each edit attempt, including comparisons and compensation, to stable settings. */
|
|
297
|
+
export async function applyEditSession(pmRoot, input, table, options) {
|
|
298
|
+
pmRoot = resolve(pmRoot);
|
|
299
|
+
if (!Array.isArray(table) || Array.from(table).some(row => !Array.isArray(row) || Array.from(row).some(cell => typeof cell !== "string"))) {
|
|
300
|
+
throw new EditRefusal("csv_edit_invalid", "Provide a table of CSV string cells, including the checkout header.");
|
|
301
|
+
}
|
|
302
|
+
const session = parseEditSession(input), captured = table.map(row => [...row]), configuration = { ...options };
|
|
303
|
+
return withSettings(pmRoot, settingsChanged, () => applyEditSessionInternal(pmRoot, session, captured, configuration));
|
|
304
|
+
}
|
|
305
|
+
/** Preserve the edit API refusal taxonomy for changing schema/settings. */
|
|
306
|
+
function settingsChanged() {
|
|
307
|
+
return new EditRefusal("csv_edit_settings_changed", "Settings changed during the edit attempt. Inspect pending compensation and export a fresh session before retrying.");
|
|
308
|
+
}
|
|
255
309
|
//# sourceMappingURL=roundtrip.js.map
|
package/dist/roundtrip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roundtrip.js","sourceRoot":"","sources":["../roundtrip.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"roundtrip.js","sourceRoot":"","sources":["../roundtrip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { PmSettings, create } from "@unbrained/pm-cli/sdk";
|
|
2
|
+
/** One operation's schema/defaults, independent of subsequent SDK settings reads. */
|
|
3
|
+
export interface SettingsSnapshot {
|
|
4
|
+
settings: PmSettings;
|
|
5
|
+
digest: string;
|
|
6
|
+
refuse: () => Error;
|
|
7
|
+
}
|
|
8
|
+
/** Match the reviewed settings digest, including hydrated schema and type definitions. */
|
|
9
|
+
export declare function settingsDigest(settings: PmSettings): string;
|
|
10
|
+
/** Capture the native settings view once, retaining a public API's refusal family. */
|
|
11
|
+
export declare function captureSettings(pmRoot: string, refuse: () => Error): Promise<SettingsSnapshot>;
|
|
12
|
+
/** Scope one snapshot without replacing parent scopes or leaking into concurrent operations. */
|
|
13
|
+
export declare function useSettings<T>(pmRoot: string, snapshot: SettingsSnapshot, run: () => Promise<T>): Promise<T>;
|
|
14
|
+
/** Use only inside an SDK transaction step, whose writer lease already owns the batch. */
|
|
15
|
+
export declare function inSettingsTransaction<T>(pmRoot: string, run: () => Promise<T>): Promise<T>;
|
|
16
|
+
/** Read pinned settings inside a reviewed operation, using the SDK normally elsewhere. */
|
|
17
|
+
export declare function readPinnedSettings(pmRoot: string): Promise<PmSettings>;
|
|
18
|
+
/** Normalize a status using an active operation's native registry, without reading ambient defaults. */
|
|
19
|
+
export declare function normalizePinnedStatus(value: string): string | undefined;
|
|
20
|
+
/** Revalidate live state solely as a guard; never use it to resolve forward values. */
|
|
21
|
+
export declare function verifySettings(pmRoot: string): Promise<void>;
|
|
22
|
+
/** Preserve typed settings refusals even when the SDK aggregates cleanup failures. */
|
|
23
|
+
export declare function settingsChangedIn(error: unknown): boolean;
|
|
24
|
+
/** Preserve an API's own refusal family while retaining nested SDK failure evidence. */
|
|
25
|
+
export declare function rethrowSettingsChange(error: unknown, refuse: () => Error): void;
|
|
26
|
+
/** Capture one view for a public operation, reusing an enclosing same-tracker snapshot. */
|
|
27
|
+
export declare function withSettings<T>(pmRoot: string, refuse: () => Error, run: () => Promise<T>): Promise<T>;
|
|
28
|
+
/**
|
|
29
|
+
* Check a batch inside its existing SDK transaction writer lease. Standalone
|
|
30
|
+
* batches acquire the SDK singleton settings/schema writer lease. Transactional
|
|
31
|
+
* batches keep their coordinator's crash-recovery lifetime, without an auxiliary
|
|
32
|
+
* longer-lived lock. Values remain pinned; SDK policy and persistence stay native.
|
|
33
|
+
*/
|
|
34
|
+
export declare function withSettingsFence<T>(pmRoot: string, run: () => Promise<T>): Promise<T>;
|
|
35
|
+
/** Resolve create type/status defaults using only the snapshot's native registries. */
|
|
36
|
+
export declare function pinCreateDefaults(options: NonNullable<Parameters<typeof create>[0]>, settings: PmSettings): NonNullable<Parameters<typeof create>[0]>;
|
|
37
|
+
//# sourceMappingURL=settings-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-snapshot.d.ts","sourceRoot":"","sources":["../settings-snapshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGhE,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,UAAU,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,KAAK,CAAC;CACrB;AAKD,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAE3D;AAKD,sFAAsF;AACtF,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAGpG;AACD,gGAAgG;AAChG,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAG5G;AACD,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAG1F;AACD,0FAA0F;AAC1F,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAE5E;AACD,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGvE;AACD,uFAAuF;AACvF,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlE;AACD,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAazD;AACD,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,GAAG,IAAI,CAE/E;AACD,2FAA2F;AAC3F,wBAAsB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAI5G;AACD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAsB5F;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAUrJ"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { acquireLock, readSettings, normalizeStatusInput, resolveItemTypeRegistry, resolveRuntimeStatusRegistry, PmCliError } from "@unbrained/pm-cli/sdk";
|
|
5
|
+
import { assertEditLease } from "./lease-guard.js";
|
|
6
|
+
const scopes = new AsyncLocalStorage();
|
|
7
|
+
/** Match the reviewed settings digest, including hydrated schema and type definitions. */
|
|
8
|
+
export function settingsDigest(settings) {
|
|
9
|
+
return createHash("sha256").update(JSON.stringify(settings)).digest("hex");
|
|
10
|
+
}
|
|
11
|
+
/** Find only the current tracker's async scope; unrelated trackers retain their own settings. */
|
|
12
|
+
function scope(pmRoot) {
|
|
13
|
+
for (let current = scopes.getStore(); current; current = current.parent)
|
|
14
|
+
if (current.root === resolve(pmRoot))
|
|
15
|
+
return current;
|
|
16
|
+
}
|
|
17
|
+
/** Capture the native settings view once, retaining a public API's refusal family. */
|
|
18
|
+
export async function captureSettings(pmRoot, refuse) {
|
|
19
|
+
const settings = structuredClone(await readSettings(pmRoot));
|
|
20
|
+
return { settings, digest: settingsDigest(settings), refuse };
|
|
21
|
+
}
|
|
22
|
+
/** Scope one snapshot without replacing parent scopes or leaking into concurrent operations. */
|
|
23
|
+
export function useSettings(pmRoot, snapshot, run) {
|
|
24
|
+
const inherited = scope(pmRoot);
|
|
25
|
+
return scopes.run({ root: resolve(pmRoot), snapshot, locked: inherited?.locked ?? false, coordinated: inherited?.coordinated, parent: scopes.getStore() }, run);
|
|
26
|
+
}
|
|
27
|
+
/** Use only inside an SDK transaction step, whose writer lease already owns the batch. */
|
|
28
|
+
export function inSettingsTransaction(pmRoot, run) {
|
|
29
|
+
const current = scope(pmRoot);
|
|
30
|
+
return scopes.run({ ...current, coordinated: true, parent: scopes.getStore() }, run);
|
|
31
|
+
}
|
|
32
|
+
/** Read pinned settings inside a reviewed operation, using the SDK normally elsewhere. */
|
|
33
|
+
export async function readPinnedSettings(pmRoot) {
|
|
34
|
+
return scope(pmRoot)?.snapshot.settings ?? readSettings(pmRoot);
|
|
35
|
+
}
|
|
36
|
+
/** Normalize a status using an active operation's native registry, without reading ambient defaults. */
|
|
37
|
+
export function normalizePinnedStatus(value) {
|
|
38
|
+
const current = scopes.getStore();
|
|
39
|
+
return current ? normalizeStatusInput(value, resolveRuntimeStatusRegistry(current.snapshot.settings.schema)) : undefined;
|
|
40
|
+
}
|
|
41
|
+
/** Revalidate live state solely as a guard; never use it to resolve forward values. */
|
|
42
|
+
export async function verifySettings(pmRoot) {
|
|
43
|
+
const current = scope(pmRoot);
|
|
44
|
+
if (current && settingsDigest(await readSettings(pmRoot)) !== current.snapshot.digest)
|
|
45
|
+
throw current.snapshot.refuse();
|
|
46
|
+
}
|
|
47
|
+
/** Preserve typed settings refusals even when the SDK aggregates cleanup failures. */
|
|
48
|
+
export function settingsChangedIn(error) {
|
|
49
|
+
const pending = [error], seen = new Set();
|
|
50
|
+
for (const current of pending) {
|
|
51
|
+
if (!(current instanceof Error) || seen.has(current))
|
|
52
|
+
continue;
|
|
53
|
+
seen.add(current);
|
|
54
|
+
if (Object.hasOwn(current, "code")) {
|
|
55
|
+
const code = current.code;
|
|
56
|
+
if (typeof code === "string" && code.endsWith("settings_changed"))
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
pending.push(current.cause);
|
|
60
|
+
if (current instanceof AggregateError)
|
|
61
|
+
pending.push(...current.errors);
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
/** Preserve an API's own refusal family while retaining nested SDK failure evidence. */
|
|
66
|
+
export function rethrowSettingsChange(error, refuse) {
|
|
67
|
+
if (settingsChangedIn(error)) {
|
|
68
|
+
const refusal = refuse();
|
|
69
|
+
refusal.cause = error;
|
|
70
|
+
throw refusal;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Capture one view for a public operation, reusing an enclosing same-tracker snapshot. */
|
|
74
|
+
export async function withSettings(pmRoot, refuse, run) {
|
|
75
|
+
const current = scope(pmRoot);
|
|
76
|
+
if (current)
|
|
77
|
+
return useSettings(pmRoot, { ...current.snapshot, refuse }, async () => { await verifySettings(pmRoot); return run(); });
|
|
78
|
+
return useSettings(pmRoot, await captureSettings(pmRoot, refuse), run);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check a batch inside its existing SDK transaction writer lease. Standalone
|
|
82
|
+
* batches acquire the SDK singleton settings/schema writer lease. Transactional
|
|
83
|
+
* batches keep their coordinator's crash-recovery lifetime, without an auxiliary
|
|
84
|
+
* longer-lived lock. Values remain pinned; SDK policy and persistence stay native.
|
|
85
|
+
*/
|
|
86
|
+
export async function withSettingsFence(pmRoot, run) {
|
|
87
|
+
const current = scope(pmRoot);
|
|
88
|
+
if (!current)
|
|
89
|
+
return withSettings(pmRoot, () => new PmCliError("csv_settings_changed: Review current settings before retrying.", 2, { code: "csv_settings_changed" }), () => withSettingsFence(pmRoot, run));
|
|
90
|
+
if (current.coordinated) {
|
|
91
|
+
await verifySettings(pmRoot);
|
|
92
|
+
const result = await run();
|
|
93
|
+
await verifySettings(pmRoot);
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
if (current.locked) {
|
|
97
|
+
await verifySettings(pmRoot);
|
|
98
|
+
return run();
|
|
99
|
+
}
|
|
100
|
+
const settings = current.snapshot.settings;
|
|
101
|
+
const release = await acquireLock(pmRoot, "workspace-history", settings.locks.ttl_seconds, "pm-csv", false, false, settings.locks.wait_ms);
|
|
102
|
+
const started = performance.now();
|
|
103
|
+
try {
|
|
104
|
+
return await scopes.run({ ...current, locked: true, parent: scopes.getStore() }, async () => {
|
|
105
|
+
await verifySettings(pmRoot);
|
|
106
|
+
const result = await run();
|
|
107
|
+
assertEditLease(performance.now() - started, settings.locks.ttl_seconds);
|
|
108
|
+
await verifySettings(pmRoot);
|
|
109
|
+
return result;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
await release();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Resolve create type/status defaults using only the snapshot's native registries. */
|
|
117
|
+
export function pinCreateDefaults(options, settings) {
|
|
118
|
+
const registry = resolveItemTypeRegistry(settings);
|
|
119
|
+
const aliases = new Map(Object.entries(registry.alias_to_type));
|
|
120
|
+
const types = new Map(Object.entries(registry.by_type));
|
|
121
|
+
const configured = settings.governance.create_default_type;
|
|
122
|
+
const type = options.type ?? (configured && aliases.has(configured.trim().toLowerCase()) ? configured : "Task");
|
|
123
|
+
const definition = types.get(aliases.get(type.trim().toLowerCase()) ?? "");
|
|
124
|
+
const statuses = resolveRuntimeStatusRegistry(settings.schema);
|
|
125
|
+
const status = options.status ?? (definition?.default_status === undefined ? undefined : normalizeStatusInput(definition.default_status, statuses)) ?? statuses.open_status;
|
|
126
|
+
return { ...options, type, status };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=settings-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-snapshot.js","sourceRoot":"","sources":["../settings-snapshot.ts"],"names":[],"mappings":"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"}
|
package/dist/table-schema.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { IMPORT_COLUMNS } from "./index.ts";
|
|
|
4
4
|
/** Fields supported by the existing CSV import core; other columns are explicitly ignored. */
|
|
5
5
|
export type TableField = typeof IMPORT_COLUMNS[number];
|
|
6
6
|
/** Stable machine-readable refusal categories. Messages never echo source values or paths. */
|
|
7
|
-
export type TableRefusalCode = "csv_table_invalid" | "csv_schema_invalid" | "csv_schema_changed" | "csv_domain_changed" | "csv_target_changed" | "csv_schema_io" | "csv_table_import_failed";
|
|
7
|
+
export type TableRefusalCode = "csv_table_invalid" | "csv_schema_invalid" | "csv_schema_changed" | "csv_domain_changed" | "csv_target_changed" | "csv_schema_io" | "csv_table_import_failed" | "csv_table_settings_changed";
|
|
8
8
|
/** Expected SDK/CLI refusal with an actionable remedy and semantic usage exit code. */
|
|
9
9
|
export declare class TableSchemaRefusal extends PmCliError {
|
|
10
10
|
/** Stable category for automated refusal handling. */
|
|
@@ -58,15 +58,18 @@ export interface TableDescription {
|
|
|
58
58
|
schema: TableSchema;
|
|
59
59
|
receipt: TableReceipt;
|
|
60
60
|
}
|
|
61
|
-
/**
|
|
62
|
-
export declare function
|
|
61
|
+
/** Reject malformed quoting before using the existing parser; inspect only record separators outside quotes. */
|
|
62
|
+
export declare function readTable(text: string, delimiter: string): {
|
|
63
|
+
table: string[][];
|
|
64
|
+
dialect: TableSchema["dialect"];
|
|
65
|
+
};
|
|
63
66
|
/** Validate artifact version, bounds, mapping shape and canonical identity. Unknown versions fail closed. */
|
|
64
67
|
export declare function parseTableSchema(value: unknown): TableSchema;
|
|
65
|
-
/**
|
|
68
|
+
/** Describe a table using one native settings/schema snapshot. */
|
|
69
|
+
export declare function describeTable(pmRoot: string, text: string, options?: DescribeTableOptions): Promise<TableDescription>;
|
|
70
|
+
/** Validate a saved mapping without mixing settings during the preview. */
|
|
66
71
|
export declare function previewTable(pmRoot: string, text: string, saved: unknown): Promise<TableReceipt>;
|
|
67
|
-
/**
|
|
68
|
-
* Preview never runs mutation hooks. Import retains legacy partial-write semantics on row failures.
|
|
69
|
-
*/
|
|
72
|
+
/** Fence the legacy synchronous import batch after its snapshot-bound preview. */
|
|
70
73
|
export declare function importNegotiatedTable(pmRoot: string, text: string, saved: unknown, options?: {
|
|
71
74
|
dryRun?: boolean;
|
|
72
75
|
keyField?: TableField;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-schema.d.ts","sourceRoot":"","sources":["../table-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"table-schema.d.ts","sourceRoot":"","sources":["../table-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/table-schema.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import {
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { resolveItemTypeRegistry, resolveRuntimeStatusRegistry, PmCliError } from "@unbrained/pm-cli/sdk";
|
|
5
|
+
import { readPinnedSettings, verifySettings, withSettings, withSettingsFence } from "./settings-snapshot.js";
|
|
4
6
|
import { IMPORT_COLUMNS, parseCSV, stripBOM, resolveDelimiter, parseFieldMap, resolveImportFieldMap, validateFieldMapTargets, checkMapSourcesPresent, validateParsedCSV, strictValidationIssues, normalizeStatus, importParsedCSV, readBoolOption } from "./index.js";
|
|
5
7
|
/** Expected SDK/CLI refusal with an actionable remedy and semantic usage exit code. */
|
|
6
8
|
export class TableSchemaRefusal extends PmCliError {
|
|
@@ -15,7 +17,7 @@ export class TableSchemaRefusal extends PmCliError {
|
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
19
|
/** Reject malformed quoting before using the existing parser; inspect only record separators outside quotes. */
|
|
18
|
-
function readTable(text, delimiter) {
|
|
20
|
+
export function readTable(text, delimiter) {
|
|
19
21
|
if (Buffer.byteLength(text) > 8 * 1024 * 1024 || delimiter.length !== 1 || /["\r\n\uFEFF]/.test(delimiter)) {
|
|
20
22
|
throw new TableSchemaRefusal("csv_table_invalid", "Use at most 8 MiB of UTF-8 CSV and a single delimiter other than quotes or newlines.");
|
|
21
23
|
}
|
|
@@ -79,8 +81,8 @@ function revision(base) {
|
|
|
79
81
|
}
|
|
80
82
|
/** Read native target enums without activating extensions or invoking git. */
|
|
81
83
|
async function targetContract(pmRoot) {
|
|
82
|
-
const
|
|
83
|
-
return { types:
|
|
84
|
+
const settings = await readPinnedSettings(pmRoot);
|
|
85
|
+
return { types: resolveItemTypeRegistry(settings).types.sort(), statuses: [...resolveRuntimeStatusRegistry(settings.schema).by_id.keys()].sort() };
|
|
84
86
|
}
|
|
85
87
|
/** Project only explicitly mapped columns; ignored canonical-looking headers cannot acquire meaning. */
|
|
86
88
|
function mappedTable(table, columns) {
|
|
@@ -104,7 +106,7 @@ function receipt(schema, rows) {
|
|
|
104
106
|
return { version: 1, revision: schema.revision, rows, columns: schema.columns.length, mapped, ignored: schema.columns.length - mapped };
|
|
105
107
|
}
|
|
106
108
|
/** Describe and propose a reusable schema without writing tracker state or artifacts. */
|
|
107
|
-
|
|
109
|
+
async function describeTableInternal(pmRoot, text, options) {
|
|
108
110
|
const delimiter = resolveDelimiter(options.delimiter);
|
|
109
111
|
const { table, dialect } = readTable(text, delimiter);
|
|
110
112
|
const headers = table[0].map(header => header.trim().toLowerCase());
|
|
@@ -114,13 +116,14 @@ export async function describeTable(pmRoot, text, options = {}) {
|
|
|
114
116
|
}
|
|
115
117
|
const { fieldMap } = resolveImportFieldMap(headers, explicit, options.autoMap ?? false);
|
|
116
118
|
const columns = table[0].map((name, index) => {
|
|
117
|
-
const field = fieldMap[headers[index]]
|
|
119
|
+
const field = Object.hasOwn(fieldMap, headers[index]) ? fieldMap[headers[index]] : headers[index];
|
|
118
120
|
return { name, domain: inferDomain(table.slice(1).map(row => row[index])), field: IMPORT_COLUMNS.includes(field) ? field : null };
|
|
119
121
|
});
|
|
120
122
|
const target = await targetContract(pmRoot);
|
|
121
123
|
validateMapping(table, columns, target);
|
|
122
124
|
const base = { version: 1, dialect, columns, target };
|
|
123
125
|
const schema = { ...base, revision: revision(base) };
|
|
126
|
+
await verifySettings(pmRoot);
|
|
124
127
|
return { schema, receipt: receipt(schema, table.length - 1) };
|
|
125
128
|
}
|
|
126
129
|
/** Narrow an unknown JSON artifact before accessing nested properties. */
|
|
@@ -157,8 +160,7 @@ export function parseTableSchema(value) {
|
|
|
157
160
|
return { ...base, revision: value.revision };
|
|
158
161
|
}
|
|
159
162
|
/** Enforce a saved mapping against the full new table before any tracker mutation. */
|
|
160
|
-
|
|
161
|
-
const schema = parseTableSchema(saved);
|
|
163
|
+
async function previewTableInternal(pmRoot, text, schema) {
|
|
162
164
|
const { table, dialect } = readTable(text, schema.dialect.delimiter);
|
|
163
165
|
if (JSON.stringify(dialect) !== JSON.stringify(schema.dialect) || JSON.stringify(table[0]) !== JSON.stringify(schema.columns.map(column => column.name))) {
|
|
164
166
|
throw new TableSchemaRefusal("csv_schema_changed", "Review changed headers, order or dialect; run csv schema describe into a new artifact and explicitly approve its mappings.");
|
|
@@ -174,23 +176,45 @@ export async function previewTable(pmRoot, text, saved) {
|
|
|
174
176
|
throw new TableSchemaRefusal("csv_target_changed", "Review tracker type/status changes and describe a new table schema against the current tracker.");
|
|
175
177
|
}
|
|
176
178
|
validateMapping(table, schema.columns, schema.target);
|
|
179
|
+
await verifySettings(pmRoot);
|
|
177
180
|
return receipt(schema, table.length - 1);
|
|
178
181
|
}
|
|
179
182
|
/** Negotiate a captured UTF-8 table then use the existing import mutation/upsert core.
|
|
180
183
|
* Preview never runs mutation hooks. Import retains legacy partial-write semantics on row failures.
|
|
181
184
|
*/
|
|
182
|
-
|
|
183
|
-
const schema = parseTableSchema(saved);
|
|
185
|
+
async function importNegotiatedTableInternal(pmRoot, text, schema, options) {
|
|
184
186
|
const { dryRun, keyField } = options;
|
|
185
|
-
const summary = await
|
|
187
|
+
const summary = await previewTableInternal(pmRoot, text, schema);
|
|
186
188
|
if (dryRun)
|
|
187
189
|
return { ...summary, imported: 0, updated: 0, skipped: 0 };
|
|
188
190
|
const { table } = readTable(text, schema.dialect.delimiter);
|
|
189
|
-
const result = importParsedCSV(pmRoot, mappedTable(table, schema.columns), { delimiter: schema.dialect.delimiter, fieldMap: {}, dryRun: false, keyField });
|
|
191
|
+
const result = await withSettingsFence(pmRoot, async () => importParsedCSV(pmRoot, mappedTable(table, schema.columns), { delimiter: schema.dialect.delimiter, fieldMap: {}, dryRun: false, keyField }));
|
|
190
192
|
if (result.errors.length)
|
|
191
193
|
throw new TableSchemaRefusal("csv_table_import_failed", `Inspect tracker state and import policies before retrying: imported=${result.imported}, updated=${result.updated}, skipped=${result.skipped}, errors=${result.errors.length}. Use csv import --atomic when rollback is required.`);
|
|
192
194
|
return { ...summary, imported: result.imported, updated: result.updated, skipped: result.skipped };
|
|
193
195
|
}
|
|
196
|
+
/** Describe a table using one native settings/schema snapshot. */
|
|
197
|
+
export async function describeTable(pmRoot, text, options = {}) {
|
|
198
|
+
pmRoot = resolve(pmRoot);
|
|
199
|
+
const captured = { ...options, fieldMap: options.fieldMap === undefined ? undefined : { ...options.fieldMap } };
|
|
200
|
+
return withSettings(pmRoot, settingsChanged, () => describeTableInternal(pmRoot, text, captured));
|
|
201
|
+
}
|
|
202
|
+
/** Validate a saved mapping without mixing settings during the preview. */
|
|
203
|
+
export async function previewTable(pmRoot, text, saved) {
|
|
204
|
+
pmRoot = resolve(pmRoot);
|
|
205
|
+
const schema = parseTableSchema(saved);
|
|
206
|
+
return withSettings(pmRoot, settingsChanged, () => previewTableInternal(pmRoot, text, schema));
|
|
207
|
+
}
|
|
208
|
+
/** Fence the legacy synchronous import batch after its snapshot-bound preview. */
|
|
209
|
+
export async function importNegotiatedTable(pmRoot, text, saved, options = {}) {
|
|
210
|
+
pmRoot = resolve(pmRoot);
|
|
211
|
+
const schema = parseTableSchema(saved), captured = { ...options };
|
|
212
|
+
return withSettings(pmRoot, settingsChanged, () => importNegotiatedTableInternal(pmRoot, text, schema, captured));
|
|
213
|
+
}
|
|
214
|
+
/** Preserve the table API refusal family when its settings snapshot changes. */
|
|
215
|
+
function settingsChanged() {
|
|
216
|
+
return new TableSchemaRefusal("csv_table_settings_changed", "Settings changed during table planning/import. Inspect current rows and describe a fresh schema before retrying.");
|
|
217
|
+
}
|
|
194
218
|
/** Read UTF-8 input and optional JSON contract without leaking IO paths in refusals. */
|
|
195
219
|
function readInputs(file, schemaFile) {
|
|
196
220
|
try {
|