pm-csv 2026.10.26 → 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.
Files changed (45) hide show
  1. package/CHANGELOG.md +64 -36
  2. package/README.md +95 -2
  3. package/dist/admission.d.ts +93 -0
  4. package/dist/admission.d.ts.map +1 -0
  5. package/dist/admission.js +362 -0
  6. package/dist/admission.js.map +1 -0
  7. package/dist/atomic-update.d.ts.map +1 -1
  8. package/dist/atomic-update.js +16 -14
  9. package/dist/atomic-update.js.map +1 -1
  10. package/dist/edit-refusal.d.ts +1 -1
  11. package/dist/edit-refusal.d.ts.map +1 -1
  12. package/dist/index.d.ts +46 -8
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +364 -117
  15. package/dist/index.js.map +1 -1
  16. package/dist/join-plans.d.ts +110 -0
  17. package/dist/join-plans.d.ts.map +1 -0
  18. package/dist/join-plans.js +557 -0
  19. package/dist/join-plans.js.map +1 -0
  20. package/dist/lineage.d.ts +3 -6
  21. package/dist/lineage.d.ts.map +1 -1
  22. package/dist/lineage.js +32 -11
  23. package/dist/lineage.js.map +1 -1
  24. package/dist/mutation-intent.d.ts +57 -0
  25. package/dist/mutation-intent.d.ts.map +1 -0
  26. package/dist/mutation-intent.js +145 -0
  27. package/dist/mutation-intent.js.map +1 -0
  28. package/dist/roundtrip.d.ts +2 -8
  29. package/dist/roundtrip.d.ts.map +1 -1
  30. package/dist/roundtrip.js +78 -24
  31. package/dist/roundtrip.js.map +1 -1
  32. package/dist/settings-snapshot.d.ts +37 -0
  33. package/dist/settings-snapshot.d.ts.map +1 -0
  34. package/dist/settings-snapshot.js +128 -0
  35. package/dist/settings-snapshot.js.map +1 -0
  36. package/dist/table-schema.d.ts +10 -7
  37. package/dist/table-schema.d.ts.map +1 -1
  38. package/dist/table-schema.js +36 -12
  39. package/dist/table-schema.js.map +1 -1
  40. package/docs/import-admission.md +199 -0
  41. package/docs/join-plans.md +201 -0
  42. package/docs/join-validation.md +240 -0
  43. package/docs/spreadsheet-roundtrip.md +17 -2
  44. package/manifest.json +1 -1
  45. 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 { acquireLock, commitWorkspaceTransaction, getHistoryPath, mutateItem, readHistoryEntries, readSettings, verifyHistoryEntries, } from "@unbrained/pm-cli/sdk";
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
- export async function exportEditSession(pmRoot, ids) {
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 host trailing-whitespace normalization.");
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
- return { base, desired, fields };
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
- export async function applyEditSession(pmRoot, input, table, options) {
201
- const session = parseEditSession(input);
202
- const planned = plans(session, table);
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 || !pending)
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: options.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
@@ -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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"}
@@ -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
- /** Describe and propose a reusable schema without writing tracker state or artifacts. */
62
- export declare function describeTable(pmRoot: string, text: string, options?: DescribeTableOptions): Promise<TableDescription>;
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
- /** Enforce a saved mapping against the full new table before any tracker mutation. */
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
- /** Negotiate a captured UTF-8 table then use the existing import mutation/upsert core.
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":"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"}
1
+ {"version":3,"file":"table-schema.d.ts","sourceRoot":"","sources":["../table-schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyD,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE1G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAE6B,MAAM,YAAY,CAAC;AAEvE,8FAA8F;AAC9F,MAAM,MAAM,UAAU,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AACvD,8FAA8F;AAC9F,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,GAC9F,oBAAoB,GAAG,oBAAoB,GAAG,eAAe,GAAG,yBAAyB,GAAG,4BAA4B,CAAC;AAC3H,uFAAuF;AACvF,qBAAa,kBAAmB,SAAQ,UAAU;IAChD,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,YAAY,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAIjD;CACF;AACD,yFAAyF;AACzF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC3D,QAAQ,EAAE,OAAO,CAAC;CACnB;AACD,iHAAiH;AACjH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACtF,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IAC3E,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjD;AACD,2FAA2F;AAC3F,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AACD,oGAAoG;AACpG,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,yEAAyE;AACzE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,gHAAgH;AAChH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;CAAE,CAsCjH;AAwED,6GAA6G;AAC7G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAsB5D;AAoCD,kEAAkE;AAClE,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAI/H;AAED,2EAA2E;AAC3E,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAItG;AAED,kFAAkF;AAClF,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,UAAU,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAInO;AAiBD,6GAA6G;AAC7G,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CA0CnE"}
@@ -1,6 +1,8 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { readFileSync, writeFileSync } from "node:fs";
3
- import { getWorkspaceContracts, PmCliError } from "@unbrained/pm-cli/sdk";
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 contracts = await getWorkspaceContracts(pmRoot, { noExtensions: true });
83
- return { types: contracts.types.sort(), statuses: contracts.statuses.sort() };
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
- export async function describeTable(pmRoot, text, options = {}) {
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]] ?? 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
- export async function previewTable(pmRoot, text, saved) {
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
- export async function importNegotiatedTable(pmRoot, text, saved, options = {}) {
183
- const schema = parseTableSchema(saved);
185
+ async function importNegotiatedTableInternal(pmRoot, text, schema, options) {
184
186
  const { dryRun, keyField } = options;
185
- const summary = await previewTable(pmRoot, text, schema);
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 {