pm-csv 2026.8.16 → 2026.8.28

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/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.8.28 - 2026-08-28
4
+
5
+ ### Added
6
+
7
+ - Enforce exact all-source 100/100/100 coverage ([pm-csv-oqmm](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/features/pm-csv-oqmm.toon))
8
+
9
+ ### Fixed
10
+
11
+ - Changelog scripts consume bounded tracker output and erase release history ([pm-csv-zmcb](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-zmcb.toon))
12
+ - Adopt the canonical certified complete-list reader ([pm-csv-t4cc](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-t4cc.toon))
13
+ - Resume reader comment falsely permits empty map on list-all failure ([pm-csv-u254](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-u254.toon))
14
+ - Post-apply close conflict retains applied transaction markers ([pm-csv-zv31](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-zv31.toon))
15
+ - loadAppliedByTransaction comment describes unsafe pre-fix marker ordering ([pm-csv-21ik](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-21ik.toon))
16
+ - Failed atomic create compensation erases orphan reconciliation markers ([pm-csv-qebc](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-qebc.toon))
17
+ - Atomic aggregate failure receipt overstates rollback certainty ([pm-csv-5si5](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-5si5.toon))
18
+ - Dry-run upserts misreport existing keys as creates ([pm-csv-njaq](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-njaq.toon))
19
+ - Latest published manifest fails pm 2026.8.20 strict health ([pm-csv-0aal](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-0aal.toon))
20
+
21
+ ### Security
22
+
23
+ - The identity gate deadlocks the one remediation its own failure message prescribes ([pm-csv-om24](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/issues/pm-csv-om24.toon))
24
+
25
+ ### Other
26
+
27
+ - Enable GitHub CodeQL code scanning ([pm-csv-pam9](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/chores/pm-csv-pam9.toon))
28
+ - Alert on daily release failure and require merge drivers in CI ([pm-csv-76gz](https://github.com/unbraind/pm-csv/blob/main/.agents/pm/chores/pm-csv-76gz.toon))
29
+
3
30
  ## 2026.8.16 - 2026-08-16
4
31
 
5
32
  ### Fixed
package/README.md CHANGED
@@ -4,6 +4,9 @@ CSV importer and exporter for [pm-cli](https://github.com/unbraind/pm-cli).
4
4
 
5
5
  Import pm items from a CSV file, export them back out, or wire up a programmatic `csv-import` importer — all with zero external runtime dependencies.
6
6
 
7
+ The extension requires pm CLI 2026.8.20 or newer. Its development and release
8
+ gates are pinned to pm CLI/SDK 2026.8.21 so host behavior stays reproducible.
9
+
7
10
  ---
8
11
 
9
12
  ## Installation
@@ -42,7 +45,7 @@ pm csv import legacy.csv --encoding latin1 # non-UTF-8 source
42
45
  pm csv import sprint12.csv --source 'jira-export-2026-06'
43
46
  pm csv import vendor.csv --strict # fail before writing on bad row data
44
47
  pm csv import items.csv --dry-run
45
- pm csv import tasks.csv --atomic # all-or-nothing import (pm-cli >= 2026.7.19)
48
+ pm csv import tasks.csv --atomic # writer-locked, crash-recoverable import
46
49
  ```
47
50
 
48
51
  **Flags**
@@ -60,7 +63,7 @@ pm csv import tasks.csv --atomic # all-or-nothing import (pm-cli >= 2026.7.19)
60
63
  | `--priority <n>` | integer | — | Import **only** rows whose integer priority equals this value |
61
64
  | `--strict` | boolean | false | Abort before writing if validation finds missing titles, unknown statuses, invalid/out-of-range priorities, or duplicate mapped columns |
62
65
  | `--dry-run` | boolean | false | Preview what would be imported without writing any data |
63
- | `--atomic` | boolean | false | Import all creates atomically under one workspace writer-locked, crash-recoverable transaction (pm-cli >= 2026.7.19). On failure every applied create is compensated (closed); interrupted runs resume. Incompatible with `--stream` |
66
+ | `--atomic` | boolean | false | Use one writer-locked, crash-recoverable transaction. On failure, attempt best-effort create compensation; pre-existing item updates are intentionally not reverted. Inspect and reconcile any marked orphan before retrying. Incompatible with `--stream` |
64
67
 
65
68
  #### Strict import gate
66
69
 
@@ -71,22 +74,26 @@ strict mode the importer runs the same parser as `pm csv validate` before any
71
74
  write, then aborts on row-level data issues or duplicate mapped columns so a bad
72
75
  file cannot partially mutate the pm store.
73
76
 
74
- #### Atomic, all-or-nothing import (`--atomic`)
77
+ #### Atomic, crash-recoverable import (`--atomic`)
75
78
 
76
79
  By default, `csv import` creates items one row at a time. If a row fails
77
80
  mid-import, the rows already written stay in the tracker — a partial,
78
81
  non-atomic state — and concurrent agents can interleave writes. `--atomic`
79
82
  (requires pm-cli **>= 2026.7.19**) wraps the whole row set in a single
80
- `commitWorkspaceTransaction` primitive: all creates are committed under one
81
- workspace writer-locked, crash-recoverable journal, or none are.
82
-
83
- - **All-or-nothing:** if any row's `pm create` fails, every already-applied
84
- create is compensated (closed with `reason "atomic csv import rolled back"`),
85
- the transaction is rolled back, and the command exits non-zero with a clear
86
- message. No committed (open) items from the import remain in the tracker.
83
+ `commitWorkspaceTransaction` primitive: mutations are serialized under one
84
+ workspace writer lock and recorded in a crash-recoverable journal.
85
+
86
+ - **Failure compensation:** if any row fails, the coordinator attempts
87
+ reverse-order, best-effort compensation for creates by closing them with
88
+ reason `atomic csv import rolled back`, rolls back the transaction journal,
89
+ and exits non-zero with a reconciliation warning. A failed close deliberately
90
+ retains both transaction markers so an operator can inspect and reconcile the
91
+ open orphan by transaction id before retrying. Pre-existing item updates are
92
+ intentionally not reverted because arbitrary prior state is not captured.
87
93
  - **Crash-recoverable / resumable:** the transaction id is stable and derivable
88
- from the absolute file path (`csv-import-<sha1(absPath)>`), so re-running the
89
- same `--atomic` import against the same file resumes from the durable journal.
94
+ from the resolved file path and parsed content fingerprint, so re-running the
95
+ same unchanged `--atomic` import resumes from the durable journal while edited
96
+ content receives a fresh transaction id.
90
97
  Resume/compensation matching is **per-row-precise**: every item this
91
98
  transaction writes is stamped with a per-row ownership marker
92
99
  `csv-txrow:<transactionId>#<rowIndex>` (plus a batch-level
@@ -105,17 +112,18 @@ workspace writer-locked, crash-recoverable journal, or none are.
105
112
  - **Parity:** `--atomic` shells out to the same `pm create` the non-atomic path
106
113
  uses; without `--atomic`, import output and exit codes are unchanged.
107
114
  - **Incompatible with `--stream`:** an unbounded stream cannot be committed as
108
- one all-or-nothing transaction, so `--atomic --stream` fails fast with a usage
115
+ one bounded transaction, so `--atomic --stream` fails fast with a usage
109
116
  error.
110
117
  - **Compensation uses `close`, not `delete`**, to avoid the known history-
111
118
  resurrection issue, so compensated items remain in the tracker as closed
112
119
  items rather than being erased. For `--key` upsert rows that update
113
120
  pre-existing items, the update is applied within the transaction but is not
114
121
  reverted on failure (an arbitrary update cannot be safely undone without
115
- capturing prior state); all-or-nothing compensation applies to creates.
122
+ capturing prior state). Compensation is best-effort and reports remaining
123
+ work for operator reconciliation.
116
124
 
117
125
  ```bash
118
- pm csv import tasks.csv --atomic # all-or-nothing; resumes if interrupted
126
+ pm csv import tasks.csv --atomic # resumes an unchanged interrupted import
119
127
  pm csv import tasks.csv --atomic --source q2 # provenance still recorded
120
128
  ```
121
129
 
@@ -176,6 +184,15 @@ the effective mapped headers.
176
184
 
177
185
  Export all pm items (or a filtered subset) to CSV. Without `--output` the CSV is returned in the command result object.
178
186
 
187
+ Every export, upsert index, and atomic-resume scan reads the whole tracker with
188
+ canonical `pm list --all`, strict source reads, full metadata, and explicitly
189
+ unbounded row and token controls. The public pm SDK certifies source status,
190
+ filter scope, pagination, projection, counts, and item identity before pm-csv
191
+ uses a row. pm-csv additionally rejects missing or contradictory omission,
192
+ read-output, and unreadable-item receipts tracked in pm-cli issue 1078. A
193
+ partial or unverifiable workspace therefore fails closed instead of exporting
194
+ missing rows, creating duplicate upserts, or reapplying an atomic import.
195
+
179
196
  ```
180
197
  pm csv export
181
198
  pm csv export --output items.csv
@@ -348,6 +365,11 @@ no-op without breaking any other behavior.
348
365
 
349
366
  ## Building
350
367
 
368
+ `npm run accept:packed` packs the real artifact and exercises strict CSV import
369
+ plus complete CSV export in fresh npm/npx and Bun/bunx projects on the pinned
370
+ development host, and in npm/npx on the declared minimum host. It is mandatory
371
+ inside `npm run release:check`.
372
+
351
373
  ```bash
352
374
  npm install
353
375
  npm run build # runs tsc → dist/
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import type { ExtensionApi } from "@unbrained/pm-cli/sdk/authoring";
2
2
  import { type SpawnSyncReturns } from "node:child_process";
3
+ import type { WorkspaceTransactionStep, WorkspaceTransactionCommitResult } from "@unbrained/pm-cli/sdk";
3
4
  /**
4
5
  * Error carrying a semantic process exit code, thrown by every failure path
5
6
  * the command runtime must turn into a clean nonzero exit (including the
6
- * list-all completeness refusals). Exported so regression tests can assert the
7
+ * complete-list refusals). Exported so regression tests can assert the
7
8
  * typed failure instead of matching on message text alone.
8
9
  */
9
10
  export declare class CommandError extends Error {
@@ -121,41 +122,13 @@ declare function resolveDelimiter(raw: string | undefined): string;
121
122
  * three causes can be regression-tested directly with synthetic results.
122
123
  */
123
124
  export declare function describePmNullStatus(result: SpawnSyncReturns<string>, label: string): string;
124
- /** Subset of the `pm list-all --json` envelope the completeness gate reads.
125
- *
126
- * `items` is typed loosely because the CLI owns its row shape; the fields below
127
- * it are the 2026.8.15 completeness receipt whose signals this package refuses
128
- * to consume silently at every list-all call site. */
129
- export interface ListAllEnvelope {
130
- /** Rows the CLI actually returned. Length can be less than {@link ListAllEnvelope.total}. */
131
- items?: PmItem[];
132
- /** Number of rows in `items` as reported by the CLI. */
133
- count?: number;
134
- /** Number of rows that exist in the workspace. */
135
- total?: number;
136
- /** True when the row list was cut short (output budget, `--limit`, cursor). */
137
- truncated?: boolean;
138
- /** True when more rows exist past a cursor boundary. */
139
- has_more?: boolean;
140
- /** Readability receipt for the directories/items backing the list. */
141
- completeness?: {
142
- status?: string;
143
- unreadable_item_count?: number;
144
- unreadable_directory_count?: number;
145
- };
146
- /** Receipt for field groups omitted from the projection. */
147
- omission_receipt?: {
148
- has_omissions?: boolean;
149
- omitted_field_group_count?: number;
150
- omitted_field_groups?: string[];
151
- };
152
- }
153
125
  /**
154
- * Refuse an incomplete `pm list-all` envelope instead of consuming it.
126
+ * Refuse an incomplete canonical `pm list --all` envelope instead of consuming it.
155
127
  *
156
128
  * Reading `.items` without consulting the envelope's completeness receipt is
157
129
  * how this package once shipped a 10-row CSV export from a 682-item workspace
158
- * (pm 2026.8.14 defaulted list-all to a truncated answer; verified on this
130
+ * (pm 2026.8.14 defaulted the deprecated list-all alias to a truncated answer;
131
+ * verified on this
159
132
  * host), saw none of the applied rows on an atomic-import resume scan, and
160
133
  * missed upsert keys - each reporting success. Any one of four independent
161
134
  * signals means the rows in `items` are NOT the whole workspace, so this
@@ -176,11 +149,17 @@ export interface ListAllEnvelope {
176
149
  * workspace, so refusing loudly is simpler and safer than a paging loop that
177
150
  * could itself silently drop rows.
178
151
  *
179
- * @param envelope - Parsed `pm list-all --json` output (any shape; non-envelope
180
- * input trips the completeness signal).
181
- * @throws {@link CommandError} naming the first tripped signal and the counts.
152
+ * Shared source, filter, pagination, projection, count, and identity rules come
153
+ * from the public SDK. A narrow package supplement rejects the missing or
154
+ * contradictory omission, read-output, and unreadable-counter evidence
155
+ * reproduced in pm-cli issue 1078. The returned rows are therefore safe for
156
+ * mutation planning, resume reconciliation, and CSV export.
157
+ *
158
+ * @param envelope - Parsed canonical complete-list JSON output.
159
+ * @returns Every certified full item row.
160
+ * @throws {@link CommandError} naming every tripped signal and the counts.
182
161
  */
183
- export declare function assertListAllComplete(envelope: unknown): void;
162
+ export declare function assertListAllComplete(envelope: unknown): PmItem[];
184
163
  /** Minimal spawn options the seam forwards to `spawnSync`. */
185
164
  export interface PmSpawnOptions {
186
165
  /** Decoding requested for the child's captured output. */
@@ -189,7 +168,7 @@ export interface PmSpawnOptions {
189
168
  maxBuffer: number;
190
169
  }
191
170
  /**
192
- * Injectable seam over the `pm` shell-out every list-all reader uses.
171
+ * Injectable seam over the `pm` shell-out every complete-list reader uses.
193
172
  *
194
173
  * A parameter defaulting to the real `spawnPm`, so production callers are
195
174
  * unchanged while tests substitute a canned envelope - captured from the real
@@ -217,6 +196,8 @@ declare function encodeKeyTagValue(value: string): string;
217
196
  * @returns The decoded value, or `value` itself when it cannot be decoded.
218
197
  */
219
198
  declare function decodeKeyTagValue(value: string): string;
199
+ /** Normalize JavaScript's open-ended thrown-value channel for operator errors. */
200
+ declare function errorMessage(error: unknown): string;
220
201
  /**
221
202
  * Parse a `--map csvHeader=field` spec (repeatable / comma-joined) into a
222
203
  * lookup from a normalized CSV header name to the canonical pm field name.
@@ -284,6 +265,51 @@ declare function stringifyTags(tags: string[] | undefined): string;
284
265
  * BufferEncoding. Accepts utf-8/utf8, utf16le, latin1. Throws USAGE otherwise.
285
266
  */
286
267
  declare function resolveEncoding(raw: string | undefined): SupportedEncoding;
268
+ interface CsvImportOptions {
269
+ delimiter: string;
270
+ dryRun: boolean;
271
+ fieldMap: Record<string, string>;
272
+ /** Auto-map well-known third-party headers (summary->title, owner->assignee, ...). */
273
+ autoMap?: boolean;
274
+ /** Canonical pm field whose value is the dedup key (e.g. "title" or "id"). */
275
+ keyField?: string;
276
+ /** File text encoding to decode the source with (default utf-8). */
277
+ encoding?: SupportedEncoding;
278
+ /** Optional provenance label recorded on imported items via the csv_source field. */
279
+ source?: string;
280
+ /** Row-level filter: only rows matching every set criterion are imported. */
281
+ filter?: ImportRowFilter;
282
+ /** The CSV file has no header row; map columns positionally to IMPORT_COLUMNS. */
283
+ skipHeaders?: boolean;
284
+ /** Stream the file row-by-row instead of loading it fully into memory. */
285
+ stream?: boolean;
286
+ /**
287
+ * Import under one workspace writer-locked, crash-recoverable transaction
288
+ * (pm-cli >= 2026.7.19 `commitWorkspaceTransaction`). On failure the
289
+ * coordinator attempts reverse-order, best-effort create compensation;
290
+ * pre-existing item updates are intentionally not reverted. An interrupted
291
+ * run resumes from the durable journal, while a failed compensation remains
292
+ * transaction-marked so an operator can inspect and reconcile it before a
293
+ * retry. Incompatible with `--stream` (an unbounded stream cannot be one
294
+ * transaction).
295
+ */
296
+ atomic?: boolean;
297
+ /**
298
+ * Bound commit coordinator for the atomic path. Bound by the command path
299
+ * and importer capability from the host-injected `ctx.sdk`, so a copied
300
+ * extension never tries to resolve the host package through its own module
301
+ * tree. Atomic import refuses when an incompatible host omits this primitive.
302
+ */
303
+ commitTransaction?: (options: {
304
+ transactionId: string;
305
+ author: string;
306
+ steps: readonly WorkspaceTransactionStep[];
307
+ lockTtlSeconds?: number;
308
+ lockWaitMs?: number;
309
+ }) => Promise<WorkspaceTransactionCommitResult>;
310
+ /** Author attributed to the atomic transaction journal (defaults to `pm-csv`). */
311
+ atomicAuthor?: string;
312
+ }
287
313
  /**
288
314
  * Row-level import filter. Mirrors the `csv export` filter semantics exactly:
289
315
  * - `status` matches the row's *normalized* SDK status (so `done` matches
@@ -298,6 +324,19 @@ interface ImportRowFilter {
298
324
  type?: string;
299
325
  priority?: number;
300
326
  }
327
+ interface ImportResult {
328
+ imported: number;
329
+ updated: number;
330
+ skipped: number;
331
+ /** Subset of `skipped` attributable to a row not matching the import filter. */
332
+ filtered: number;
333
+ /** Auto-applied alias mappings when `--auto-map` is enabled. */
334
+ autoMappings: AutoFieldMapping[];
335
+ errors: string[];
336
+ previews: Record<string, unknown>[];
337
+ /** Helpful warnings about unknown --map targets or missing source headers. */
338
+ fieldMapWarnings: string[];
339
+ }
301
340
  interface ParsedRow {
302
341
  title: string;
303
342
  status: ItemStatus;
@@ -330,11 +369,26 @@ declare function parseImportFilter(statusRaw: string | undefined, typeRaw: strin
330
369
  declare function rowMatchesFilter(row: ParsedRow, filter: ImportRowFilter | undefined): boolean;
331
370
  /**
332
371
  * List existing items once and build a lookup from csv-key provenance value to
333
- * item id, for idempotent upsert. The list-all answer must be COMPLETE — a
372
+ * item id, for idempotent upsert. The complete-list answer must be COMPLETE — a
334
373
  * truncated answer silently missing keys would turn upserts into duplicate
335
374
  * creates — so the envelope's receipt is checked before any key is read.
336
375
  */
337
376
  declare function loadKeyIndex(pmRoot: string, spawn?: PmSpawn): Map<string, string>;
377
+ /**
378
+ * Import CSV rows into a pm tracker as items.
379
+ *
380
+ * Rejects rather than throws when `--atomic` is combined with `--stream`: the
381
+ * two are genuinely incompatible, because a bounded transaction plan needs the
382
+ * whole row set in hand and a stream is unbounded. Returning a rejected promise
383
+ * keeps the failure on the same channel as the rest of the async path.
384
+ *
385
+ * @param pmRoot - Tracker root passed through to the pm CLI.
386
+ * @param filePath - CSV file to read.
387
+ * @param opts - Import behaviour, including the atomic and stream modes.
388
+ * @returns The import outcome; rejects with a {@link CommandError} on a usage
389
+ * conflict or an unreadable file.
390
+ */
391
+ declare function importCSV(pmRoot: string, filePath: string, opts: CsvImportOptions): Promise<ImportResult>;
338
392
  /**
339
393
  * Public helper: the atomic transaction id that `pm csv import <file> --atomic`
340
394
  * derives for the given file and options (reads and parses the file exactly as
@@ -364,12 +418,15 @@ export declare function atomicTransactionId(filePath: string, opts?: {
364
418
  * whose CSV `status` is `closed`/`canceled` is legitimately imported as a
365
419
  * closed item (upsertCreate/upsertUpdate apply the row's status, routing
366
420
  * terminal transitions through `pm close --reason`), so it must
367
- * still be recognized on resume and never re-imported. Conversely a rolled-back
368
- * create must NOT be recognized: `compensateCreate()` therefore STRIPS the
369
- * `csv-tx`/`csv-txrow` markers before closing the item, so a compensated
370
- * tombstone carries no marker and a post-rollback retry re-imports its row.
371
- * (This is why matching by marker-presence is correct for both a
372
- * legitimately-closed applied row and a rolled-back one; see compensateCreate.)
421
+ * still be recognized on resume and never re-imported. Conversely a
422
+ * successfully compensated create must NOT be recognized:
423
+ * `compensateCreate()` removes the markers only after closure succeeds or the
424
+ * item is already confirmed closed, so a compensated
425
+ * tombstone carries no marker and a post-rollback retry re-imports its row. If
426
+ * closure fails, both markers remain and make the orphan discoverable for
427
+ * reconciliation. (This is why matching by marker-presence is correct for both
428
+ * a legitimately-closed applied row and a rolled-back one; see
429
+ * compensateCreate.)
373
430
  */
374
431
  declare function loadAppliedByTransaction(pmRoot: string, transactionId: string, spawn?: PmSpawn): {
375
432
  byRowIndex: Map<number, string>;
@@ -391,20 +448,21 @@ declare function loadAppliedByTransaction(pmRoot: string, transactionId: string,
391
448
  * non-zero exit (item truly absent, or a failed lookup such as the
392
449
  * `fake-get-fail` regression) still returns `undefined` unchanged.
393
450
  */
394
- declare function itemStatus(pmRoot: string, id: string): ItemStatus | undefined;
451
+ declare function itemStatus(pmRoot: string, id: string, spawn?: PmSpawn): ItemStatus | undefined;
395
452
  /**
396
- * Idempotently undo one row's create. First STRIPS this transaction's ownership
397
- * markers (`markers`) from the item, then closes it via `pm close` (NOT delete,
398
- * to avoid the known history-resurrection issue) when it is still open.
453
+ * Idempotently undo one row's create. First closes a still-open item via
454
+ * `pm close` (NOT delete, to avoid the known history-resurrection issue), then
455
+ * strips this transaction's ownership markers (`markers`) only after the item
456
+ * is confirmed closed.
399
457
  *
400
- * Stripping the markers is what makes marker-presence a correct "applied"
401
- * signal: a rolled-back row no longer carries a marker, so a post-rollback
402
- * retry re-imports it, while a *successfully* imported row (even one whose CSV
403
- * status is `closed`/`canceled`) keeps its marker and is resumed idempotently.
404
- * The strip runs whether the item is open or already closed (a closed-status
405
- * create being rolled back must also lose its marker); the close only runs for
406
- * a still-open item. Every step tolerates a missing item / absent tag, so a
407
- * repeated compensation (e.g. after a crash mid-compensation) is a safe no-op.
458
+ * Stripping the markers after closure makes marker-presence a correct
459
+ * reconciliation signal: a compensated row no longer carries a marker, so a
460
+ * post-rollback retry re-imports it, while a *successfully* imported row (even
461
+ * one whose CSV status is `closed`/`canceled`) keeps its marker and is resumed
462
+ * idempotently. If the close fails, the markers deliberately remain so the open
463
+ * orphan can be found by transaction id and reconciled before retrying. The
464
+ * strip also runs for an item that was already closed; every step tolerates a
465
+ * missing item / absent tag, so repeated compensation is a safe no-op.
408
466
  *
409
467
  * The status lookup itself is also tolerated: if `itemStatus` throws (a stdout
410
468
  * overrun or a signal kill on the `pm get`), the throw is caught and this row's
@@ -415,6 +473,14 @@ declare function itemStatus(pmRoot: string, id: string): ItemStatus | undefined;
415
473
  * and leaving every later applied create un-compensated.
416
474
  */
417
475
  declare function compensateCreate(pmRoot: string, id: string, markers?: readonly string[], reason?: string): void;
476
+ interface CsvValidateOptions {
477
+ delimiter: string;
478
+ fieldMap: Record<string, string>;
479
+ encoding?: SupportedEncoding;
480
+ autoMap?: boolean;
481
+ /** The CSV file has no header row; map columns positionally to IMPORT_COLUMNS. */
482
+ skipHeaders?: boolean;
483
+ }
418
484
  interface CsvValidateReport {
419
485
  ok: boolean;
420
486
  rowCount: number;
@@ -431,6 +497,12 @@ interface CsvValidateReport {
431
497
  fieldMapWarnings: string[];
432
498
  issues: string[];
433
499
  }
500
+ /**
501
+ * Parse a CSV and report data-quality issues without writing anything.
502
+ * Pure function over file contents — exposed for unit testing via the
503
+ * lower-level {@link validateParsedCSV} helper below.
504
+ */
505
+ declare function validateCSV(filePath: string, opts: CsvValidateOptions): CsvValidateReport;
434
506
  /**
435
507
  * Core validation logic over already-parsed headers + rows. Pure and
436
508
  * side-effect-free so it can be unit tested directly.
@@ -516,10 +588,10 @@ declare function selectExportColumns(spec: string | undefined, extraValid?: Read
516
588
  /**
517
589
  * Read every item from a tracker and render the CSV export body.
518
590
  *
519
- * Shells out to `pm list-all --json --include-body` with an explicit
591
+ * Shells out to canonical `pm list --all --json --include-body` with an explicit
520
592
  * `maxBuffer`, because a stdout overrun kills the child with a null status and
521
593
  * an EMPTY stderr — which would otherwise surface as an unexplained
522
- * "pm list-all failed" rather than as the size problem it is.
594
+ * "pm list --all failed" rather than as the size problem it is.
523
595
  *
524
596
  * Status and type filters are applied after the read, not pushed into the
525
597
  * query. Each item's `csv_source` is then derived from its internal source tag
@@ -551,9 +623,10 @@ declare const _default: {
551
623
  activate(api: ExtensionApi): void;
552
624
  };
553
625
  export default _default;
554
- export { parseCSV, serializeCSV, serializeField, stripBOM, resolveDelimiter, parseFieldMap, resolveImportFieldMap, applyFieldMap, normalizeStatus, parseTags, stringifyTags, encodeKeyTagValue, decodeKeyTagValue, normalizeKeyValue, selectExportColumns, resolveEncoding, validateParsedCSV, strictValidationIssues, parseImportFilter, rowMatchesFilter, discoverCustomFields, EXPORT_COLUMNS, IMPORT_COLUMNS, StreamingCSVParser, streamCSVFile, levenshtein, suggestClosest, validateFieldMapTargets, checkMapSourcesPresent, };
626
+ export { parseCSV, serializeCSV, serializeField, stripBOM, resolveDelimiter, parseFieldMap, resolveImportFieldMap, applyFieldMap, normalizeStatus, parseTags, stringifyTags, encodeKeyTagValue, decodeKeyTagValue, errorMessage, normalizeKeyValue, selectExportColumns, resolveEncoding, validateParsedCSV, validateCSV, strictValidationIssues, parseImportFilter, rowMatchesFilter, discoverCustomFields, EXPORT_COLUMNS, IMPORT_COLUMNS, StreamingCSVParser, streamCSVFile, levenshtein, suggestClosest, validateFieldMapTargets, checkMapSourcesPresent, };
555
627
  export { loadAppliedByTransaction, itemStatus, compensateCreate };
556
628
  export { loadKeyIndex, buildCsvExport };
557
- export type { CsvExportOptions };
629
+ export { importCSV };
630
+ export type { CsvExportOptions, CsvImportOptions };
558
631
  export type { ParsedRow, ImportRowFilter, DiscoveredField, AutoFieldMapping };
559
632
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}