What shipped, and when
This page is generated from the package changelogs on every site deploy. Full histories live in each package's CHANGELOG on GitHub
Composable operations tools for consultants.
0.14.1
- `sheets inspect`, `sheets split` and `sheets merge` now read each workbook in pieces and write outputs as they go (ADR 0006), so large workbooks use far less memory. Splitting a workbook of 150,000 rows no longer fails with "Maximum call stack size exceeded". A failed CRC check or malformed XML in a part a command reads is now refused, as the other readers already did, instead of being described, split or merged. `sheets inspect` decodes `_x000D_` and similar escapes, leaves phonetic text out of headers, and lists sample values in row order, as the other commands already did.
- Splitting a workbook now reads it in pieces and writes each output as it is produced, in every mode (ADR 0006), and no longer fails with "Maximum call stack size exceeded" on large worksheets. Splitting 150,000 rows by a column, keeping the workbook, finishes at 335 MB instead of failing after 1.9 GB. Outputs are byte for byte what they were.
0.14.0
- A date cell read from a workbook is written back as an Excel date, not as ISO text. Consolidate, a compact split and `writeTable` write it as a 1900-system serial formatted `yyyy-mm-dd`, or `yyyy-mm-dd hh:mm:ss` when it carries a time, so the output sorts, filters and calculates on it. Dates from 1904-system inputs are recounted, and a date before 1900 stays text. A `writeTable` caller that passes a string in that exact timestamp spelling now gets a date cell too.
- A formula cell with no cached value, from a workbook that was saved without being calculated, is no longer read as blank in silence. Consolidate, split, `merge --values`, `sheets inspect` and PowerPoint populate count such cells in a new `formulaCellsWithoutCachedValues` metric and name them in one warning, up to ten `Sheet!B4` locations, so the user knows to open and save the file in Excel. `readWorksheetRecords` returns them as `uncachedFormulas`. Nothing computes the missing value, and a preserving split or merge still carries the formula.
- `consolidateWorkbookSources` in `@consultchimps/xlsx/bytes` consolidates workbooks read in pieces into an output written chunk by chunk, so a browser can consolidate large files without holding them whole. `blobSource` reads a browser `File` or `Blob` through `Blob.slice`. The output bytes match `consolidateWorkbooksBytes` and the command line.
0.13.1
Dependency updates only
Shared contracts and errors for ConsultChimps operations.
0.6.0
- Keep a local record of every CLI run. Each command that does work writes one JSON Lines file with the machine it ran on, every progress event with its time, memory sampled every second, and how it ended, so a slow or failed run can be explained afterwards. Records hold counts, sizes, and timings only; `--log-names` adds file names, progress details, and error messages. `--no-log` or `CONSULTCHIMPS_LOG=off` turns recording off, `--cpu-profile` also saves a CPU profile, and `consultchimps logs`, `logs show`, and `logs path` read the records.
- Raise the supported Node.js floor from 22.0.0 to 22.14.0. Continuous integration now tests that exact version: pnpm 11 requires 22.13, and better-sqlite3 13 crashes on the 22.13 patch line, so 22.14.0 is the lowest release on which every published package works.
- Group staged imports under `db import prepare`, `inspect`, `update`, and `apply`. Use `db import run` for one-step execution, `--profile` for reusable settings, and `--batch` for a saved review. Rename the library contracts to import profiles and batches while preserving the current stored database and batch formats.
0.5.1
- Declare support for Node.js 22 and later (`engines.node: ">=22.0.0"` instead of `24.x`), so the toolkit installs and runs in environments that ship the previous LTS line. CI now validates the runtime on Node 22.16, the latest 22, and 26 alongside the full Node 24 verification. The CLI additionally ships a standalone `consultchimps.mjs` bundle on each GitHub release: one file that runs with `node consultchimps.mjs` and needs no npm access at all.
0.5.0
- Centralize portable filename sanitization in `@consultchimps/core`, which now exports `safeNameFragment` and `truncateToUtf8Bytes`. The PDF and Excel operations share that single implementation instead of keeping their own copies, so every generated output name follows the same rules.
Persistent local SQLite and DuckDB databases, imports, batch history, and validated conversion for ConsultChimps.
0.2.3
Dependency updates only
0.2.2
Dependency updates only
0.2.1
Dependency updates only
File discovery and safe output handling for ConsultChimps.
0.5.0
- Raise the supported Node.js floor from 22.0.0 to 22.14.0. Continuous integration now tests that exact version: pnpm 11 requires 22.13, and better-sqlite3 13 crashes on the 22.13 patch line, so 22.14.0 is the lowest release on which every published package works.
- Group staged imports under `db import prepare`, `inspect`, `update`, and `apply`. Use `db import run` for one-step execution, `--profile` for reusable settings, and `--batch` for a saved review. Rename the library contracts to import profiles and batches while preserving the current stored database and batch formats.
0.4.0
- Consolidation can now fold columns that are named differently into one column each, using the versioned JSON column mapping document.
0.3.3
- Declare support for Node.js 22 and later (`engines.node: ">=22.0.0"` instead of `24.x`), so the toolkit installs and runs in environments that ship the previous LTS line. CI now validates the runtime on Node 22.16, the latest 22, and 26 alongside the full Node 24 verification. The CLI additionally ships a standalone `consultchimps.mjs` bundle on each GitHub release: one file that runs with `node consultchimps.mjs` and needs no npm access at all.
Plain-language explanations of ConsultChimps results and errors for CLIs and user interfaces.
0.7.0
- Raise the supported Node.js floor from 22.0.0 to 22.14.0. Continuous integration now tests that exact version: pnpm 11 requires 22.13, and better-sqlite3 13 crashes on the 22.13 patch line, so 22.14.0 is the lowest release on which every published package works.
- Group staged imports under `db import prepare`, `inspect`, `update`, and `apply`. Use `db import run` for one-step execution, `--profile` for reusable settings, and `--batch` for a saved review. Rename the library contracts to import profiles and batches while preserving the current stored database and batch formats.
- Skip title rows and spacer columns when reading worksheets. The header row is now the first row holding more than half as many values as the fullest of the ten populated rows below it, or at most one value fewer, so a report title, a merged banner, or a "Prepared by" line above a table four or more columns wide no longer becomes the first column name. A row is skipped only on evidence that it cannot be the header of the block below it, a blank row between the two or every value on it sitting in a cell merged across columns, and never when the skipped rows form a table of their own (two adjacent populated rows, neither a banner); otherwise the first row holding a value stays the header, as it always was, so no row of a table is ever lost to the detection. The inspection's `headerColumns` metric now counts the kept columns. A column that holds nothing in the header row or in any row under it is a spacer and never reaches the output; a column with values under a blank header is kept and named `column_N` by its position among the columns that were kept. One rule decides this for the consolidation, the worksheet readers, the worksheet-records reader, and the inspection, so `sheets inspect` reports the header row and columns a consolidation will use, spelled the same way whatever the header cell's type; an error cell in a header row now names its column `#REF!` rather than Excel's internal code for it. A split looks for its column on the detected header row before searching the whole worksheet, so a title line that repeats the column's name no longer captures the split. A declared `headerRow` is never second-guessed. Consolidation results carry two new metrics, `skippedTitleRows` and `skippedSpacerColumns`, and every worksheet report carries the same two counts; the plain-language result says what was left out.
0.6.0
- Explain a workbook unprotect result in plain language instead of the generic fallback. The new `sheets.unprotect` entry reports how many worksheet and workbook-structure protections were removed, including the case where there was nothing to remove, and a macro-enabled `.xlsm` output is now named as an Excel workbook rather than a bare file.
0.5.0
- Consolidation can now fold columns that are named differently into one column each, using the versioned JSON column mapping document.
PDF page operations for ConsultChimps.
0.5.0
- Raise the supported Node.js floor from 22.0.0 to 22.14.0. Continuous integration now tests that exact version: pnpm 11 requires 22.13, and better-sqlite3 13 crashes on the 22.13 patch line, so 22.14.0 is the lowest release on which every published package works.
0.4.3
Dependency updates only
0.4.2
- Declare support for Node.js 22 and later (`engines.node: ">=22.0.0"` instead of `24.x`), so the toolkit installs and runs in environments that ship the previous LTS line. CI now validates the runtime on Node 22.16, the latest 22, and 26 alongside the full Node 24 verification. The CLI additionally ships a standalone `consultchimps.mjs` bundle on each GitHub release: one file that runs with `node consultchimps.mjs` and needs no npm access at all.
PowerPoint template inspection and population for ConsultChimps.
0.8.1
- Splitting a workbook now reads it in pieces and writes each output as it is produced, in every mode (ADR 0006), and no longer fails with "Maximum call stack size exceeded" on large worksheets. Splitting 150,000 rows by a column, keeping the workbook, finishes at 335 MB instead of failing after 1.9 GB. Outputs are byte for byte what they were.
0.8.0
- A formula cell with no cached value, from a workbook that was saved without being calculated, is no longer read as blank in silence. Consolidate, split, `merge --values`, `sheets inspect` and PowerPoint populate count such cells in a new `formulaCellsWithoutCachedValues` metric and name them in one warning, up to ten `Sheet!B4` locations, so the user knows to open and save the file in Excel. `readWorksheetRecords` returns them as `uncachedFormulas`. Nothing computes the missing value, and a preserving split or merge still carries the formula.
0.7.1
Dependency updates only
Runtime-neutral table operations for ConsultChimps.
0.5.0
- Consolidate workbooks in two streaming passes (ADR 0006). The first pass reads each worksheet's header rows, spacer columns, column union, mapping, and column widths without keeping its rows; the second reads the rows again and writes them straight to the output. Memory now follows the largest worksheet rather than the sum of the inputs: ten workbooks of 15,000 rows each peak at a fraction of the memory they needed before. The command line writes the output to a staging file beside the destination and moves it into place only when every row is written, so a failed or cancelled run leaves nothing behind.
- Raise the supported Node.js floor from 22.0.0 to 22.14.0. Continuous integration now tests that exact version: pnpm 11 requires 22.13, and better-sqlite3 13 crashes on the 22.13 patch line, so 22.14.0 is the lowest release on which every published package works.
- Improve workbook table reading and make repeated column names deterministic.
0.4.0
- Add the column mapping engine: a declarative, versioned way to fold the same field's different header spellings into one canonical column before tables are consolidated.
- Declare support for Node.js 22 and later (`engines.node: ">=22.0.0"` instead of `24.x`), so the toolkit installs and runs in environments that ship the previous LTS line. CI now validates the runtime on Node 22.16, the latest 22, and 26 alongside the full Node 24 verification. The CLI additionally ships a standalone `consultchimps.mjs` bundle on each GitHub release: one file that runs with `node consultchimps.mjs` and needs no npm access at all.
0.3.0
- Consolidation can now match columns whose headers differ only in case, spacing, or punctuation. Different systems often export the same schema with different header conventions - "Failed Checks" in one file, "Failed_Checks" in another, "Reviewer: Lead Contact" versus "Reviewer_Lead_Contact" - and until now each spelling became its own mostly-empty output column.
Runtime-neutral palette model and colour validation for ConsultChimps.
0.2.0
- Raise the supported Node.js floor from 22.0.0 to 22.14.0. Continuous integration now tests that exact version: pnpm 11 requires 22.13, and better-sqlite3 13 crashes on the 22.13 patch line, so 22.14.0 is the lowest release on which every published package works.
- Add the `@consultchimps/theme` package: a runtime-neutral, zero-dependency palette model with categorical, sequential, and semantic colours in light and dark, and a small API to resolve a colour role to a value for a mode. It includes a validation pass that returns structured results (never throws) for WCAG contrast and categorical distinctness, reusing the `dataviz` method, and ships one neutral placeholder palette. Client colours are supplied at runtime and never committed.
Excel workbook adapters, consolidation, and splitting for ConsultChimps.
0.21.0
- `describeWorkbook` and `describeWorkbookBytes` now read through the streaming reader the table readers and consolidation use (ADR 0006), one worksheet at a time, keeping only the rows the header rule needs and a bounded sample. The command line reads the file in pieces. Inspecting 150,000 rows peaks at 185 MB instead of 2.3 GB.
- Add `describeWorkbookSource`, which describes a workbook read in pieces from a random-access source such as `blobSource`, so a browser `File` is never held whole. It gives the description `describeWorkbookBytes` gives for the same bytes.
- Merging workbooks now reads each input in pieces and writes the merged workbook as it is produced (ADR 0006). Merging two workbooks of 150,000 rows peaks at 320 MB instead of 938 MB. The merged workbook is byte for byte what it was.
- Splitting a workbook now reads it in pieces and writes each output as it is produced, in every mode (ADR 0006), and no longer fails with "Maximum call stack size exceeded" on large worksheets. Splitting 150,000 rows by a column, keeping the workbook, finishes at 335 MB instead of failing after 1.9 GB. Outputs are byte for byte what they were.
0.20.0
- `consolidateWorkbookSources` in `@consultchimps/xlsx/bytes` consolidates workbooks read in pieces into an output written chunk by chunk, so a browser can consolidate large files without holding them whole. `blobSource` reads a browser `File` or `Blob` through `Blob.slice`. The output bytes match `consolidateWorkbooksBytes` and the command line.
- A date cell read from a workbook is written back as an Excel date, not as ISO text. Consolidate, a compact split and `writeTable` write it as a 1900-system serial formatted `yyyy-mm-dd`, or `yyyy-mm-dd hh:mm:ss` when it carries a time, so the output sorts, filters and calculates on it. Dates from 1904-system inputs are recounted, and a date before 1900 stays text. A `writeTable` caller that passes a string in that exact timestamp spelling now gets a date cell too.
- A formula cell with no cached value, from a workbook that was saved without being calculated, is no longer read as blank in silence. Consolidate, split, `merge --values`, `sheets inspect` and PowerPoint populate count such cells in a new `formulaCellsWithoutCachedValues` metric and name them in one warning, up to ten `Sheet!B4` locations, so the user knows to open and save the file in Excel. `readWorksheetRecords` returns them as `uncachedFormulas`. Nothing computes the missing value, and a preserving split or merge still carries the formula.
0.19.0
- `readWorksheetRecords` and its byte twin, which PowerPoint population reads through, now read through the streaming reader (ADR 0006) and render each cell's number format with numfmt, a maintained formatter, instead of SheetJS. Two numfmt defects are corrected locally until upstream fixes them: a General number with 10 or 11 integer digits and a fraction rounds as Excel shows it, and a time that rounds up to midnight shows the next day.
- The table readers now read through the streaming reader consolidation uses (ADR 0006): `readWorkbookTables`, `readWorkbookWorksheets`, `readWorkbookExcelTables`, `readWorkbookNamedRanges`, their byte twins, and the input of a single-table split. Each input is parsed once instead of twice.
- The published package no longer bundles SheetJS: every read goes through the streaming reader, and table ranges are read with the package's own helpers.