v0.5.0 — works with any sheet
SheetDiff v0.5.0 — works with any sheet
SheetDiff's core loop — snapshots, GitHub-style diffs, "what do I still need to enter?", acks, digest email — was always sheet-agnostic. The identity layer wasn't: it knew how to match construction shots by station ranges, and nothing else. v0.5 makes it universal.
Smart identifiers, zero configuration
Every row now gets an identity through a hierarchy:
- Your choice — a "Match rows by" column per tab, validated before it's trusted (populated + unique). Pick "Activity" on a tracker and the choice is ignored, not obeyed into corrupting counts.
- Work identity — activity + parsed stations on sheets that have them (
164+82≡16,482). - Auto-detected ID column —
ID,SKU,Ticket #,Order,Email,PO,Asset, … (vocabulary widened) when it's populated and unique. - Whole-row content — the always-there fallback, also registered alongside the other tiers so a verbatim copy of a tab matches however each side keyed its rows.
That identity drives diffs, ack tracking, compilation-tab detection, and the cross-surface to-enter counts — so an inventory sheet gets the same "a Master List that re-lists your working tab is tagged copy and counted zero times" guarantee the construction trackers already had. The identity tier is decided once on the latest data and applied to history, so the same row can never key differently at different times (a subtle bug caught and fixed while shipping this).
Honest math on sheets without stations
The billing packet on a row-based sheet now says "COULD NOT DETERMINE — no collection marker or no station columns (row-based sheet)" instead of a confident 0 ft, while the to-enter worklist, late entries, and office backlog behave exactly as on a tracker. Construction math (footage, gap reports) activates only when the sheet carries the vocabulary for it.
Verified
- New acceptance suite: a generic inventory sheet (SKU keys, reformatted compilation copy) — copy classification, count agreement across dashboard/CSVs/digest, honest billing output.
- The construction path re-verified against the real 36-package tracker: PE-only and PE+Line-List configurations still export identical billing packets.
- 361 tests green. Requires Node.js 22+.