# Naming rules for this packet

One document type: fictional UTF-8 workshop notes, one flat directory, `.txt` only.

The required fields are Document-Type (`workshop-note`), Source-ID, Document-Date, Project, Subject and Revision. The inventory binds each Source-ID to its exact original basename, byte count and SHA-256. The author manually read every field; `field-evidence.csv` records the line number and full field excerpt. File modification/creation times are never document dates.

Use exactly one unambiguous real calendar date in `YYYY-MM-DD`. Missing dates, two conflicting dates and slash dates with unknown ordering stay blocked. Missing/unreadable subject stays blocked. No today fallback, inferred locale or invented subject. Blocked originals remain under their original names. They are included in the output ZIP.

Approved basename: `<document-date>__<project>__<subject>__rev-<revision>__<source-id-lowercase>.txt`. Example: `2026-04-03__amber__airflow__rev-a__f01.txt`. Project/subject/revision are already manually verified lowercase ASCII tokens in this fixture; permitted token characters are `a-z`, `0-9`, and internal single hyphens. No automatic transliteration or silent truncation. Filename length at most 160 ASCII bytes; `.txt` is retained. Source-ID remains the identity even when two notes have equal date/project/subject/revision.

The proposal is not the approval. `rename-plan.csv` has distinct proposed and approved columns; only `status=approved` and an exact canonical approved name can be executed. `wrong-plan.csv` is an authored bad proposal for rejection, never an alternative approval. Duplicate proposed targets are detected across the whole selection (ASCII case-insensitive comparison), including invalid rows. Existing targets are blocked; no suffix is silently added. Changes to paths, extensions, source identity or content are blocked. No directories, recursive scan, content edits, deduplication or user files.

Only private disposable directories created by `rename_packet.py init` directly beneath `/private/tmp` are supported. The helper uses Darwin `renameatx_np` with `RENAME_EXCL | RENAME_NOFOLLOW_ANY`, never plain rename as a fallback. It only acts on explicit inventory names under its open `files` directory. Concurrent external writers and crash recovery are outside the supported exercise; an unresolved journal intent or unknown result stays unknown for its source ID inside the packet-bound owned root, independent of plan hash or a changed target. This check precedes proposal validation. Confirmed completion instead requires the stable source identity plus the exact original-to-target operation and current file checks. Re-saving a CSV does not create a fresh operation or clear uncertainty. Neither a filename nor a hash alone proves a historical action.
