# Original fictional file exercises and CSV inspector source

All people, identifiers, addresses, observations and claims in this packet are fictional. This is not a LinkedIn account export, creator dataset, platform upload, user study or customer result. The CSV includes the harmless expression `=1+1`; inspect it as text before opening it in a spreadsheet, which may calculate it.

## Reproduce the inspector

Unzip into an empty private working directory. With Node.js 24.21.0 (the version actually checked), run:

```sh
node run-example.mjs
node --test inspector-tests.mts
```

These commands use Node built-ins and the included TypeScript source; they need no npm installation, network request, account or credentials. Other Node releases were not checked for this standalone exercise. The application build is verified separately on its configured Node 22 runtime.

`run-example.mjs` reads the exact example bytes, calculates SHA-256, runs the inspector and asserts equality with `inspection-expected.json`. `inspector-tests.mts` contains eleven correctness/boundary tests. Its source differs from the application test only in the local import path. `inspector-source.ts` is the application's pure inspector source. None of these programs opens a spreadsheet or executes cell formulas.

## Expected results

`connections-example.csv` is 473 bytes, UTF-8 with a BOM. SHA-256:

`1f999c903fb81ccd2f5b8936fcfaa70b5b13c4ab4490052c7d97cc3a161fcc92`

Use heading record 2, exact-key column 3 and email column 4. Record numbers count logical parsed CSV records, including the introductory notice; a quoted multiline field does not add a record.

- Four data records, seven fields, zero width mismatches.
- One identical parsed-row group with one extra record, also one repeated exact-key group with one extra record. These counts overlap.
- Three blank and one nonblank email cells. Presence does not establish delivery or consent.
- One formula-like cell at record 6, field 5. It is a review prompt, not a security verdict.

The parser accepts comma-separated UTF-8, an optional BOM, CSV quotation with doubled quotes, and CRLF/LF/CR endings. It rejects NUL, malformed quoting, invalid UTF-8 and over-limit input; it does not guess another delimiter/encoding or truncate to a successful sample. Limits: 1 MiB, 5,000 logical records including notices/headings, 128 fields per record, 8,192 UTF-16 units per field. Position lists show at most 50 entries while totals remain complete within accepted input. Conditional key/email/duplicate-row checks exclude width-mismatched data records. Key comparison is exact and does not merge people. Formula detection is a heuristic, not universal spreadsheet sanitization.

## Other worked files

- `snapshot-before.csv`, `snapshot-after.csv`, `snapshot-review.json`: exact profile-reference membership comparison; one common, one earlier-only and one later-only key. No relationship event or person match is proved.
- `reporting-example.csv`, `data-dictionary.json`: three fictional observations, values 0 / unavailable / 250; two declared-organic available rows sum to 250. Blank is not zero. The dictionary is a small original format, not a full CSVW implementation.
- `claim-manifest.json`: byte identities of the report and dictionary, selection, operation and limited fictional claim. A digest establishes neither truth nor permission.
- `claim-record-en.md`, `claim-record-de.md`: blank claim-review records. Add a public URL only after actual publication; keep private sources private and retain corrections.

The website inspector reads a chosen file in browser memory and reports counts/positions/digest without sending cell values, headings or filenames to Wrapped.li. The downloadable JSON omits those values. Counts and digests may still be sensitive metadata: review before sharing. The tool does not modify the source or generate a sanitized CSV. Clear it when finished. No outcome from this fictional packet counts as an eligible reader, customer or additional original research study.
