Stage a document and sync it
scaffold does not write the repository's documents/ directory. It is the root-level document surface in every
Project repository, alongside apps/ and templates/, and it holds committed YAML pointers while acting as temporary
staging, not a second document store. Git keeps the pointer; Navigator keeps the bytes. Drop a local file below it, list
what a sync would do, then run it:
navigator site sync --dry-run
navigator site sync
navigator site projects repository validate .
Against a staged documents/exhibits/exhibit-a.png, the dry run prints one line per staged file and a count, and
changes nothing:
would upload documents/exhibits/exhibit-a.png
1 upload planned
The real run derives the document slug from its path below documents/, uploads the bytes through Navigator's
authenticated API, writes exhibit-a.png.yml only after the upload succeeds, and then removes the staged file. It
prints 1 uploaded. The pointer records kind, desired visibility, current revision metadata, and the previous asset
id when the chain has one. It never contains an object-storage coordinate or legal-document bytes; object storage and
the assets revision chain remain authoritative. Folder conventions infer filing for pleadings/, exhibit for
exhibits/, and agreement for agreements/; other paths use unclassified. Visibility defaults to internal.
The real run needs a stored login — navigator site login --host <host-or-url> — and a matter with that code visible to
the account. --dry-run needs neither. The first real run also creates documents/.gitignore without overwriting an
existing file; until that first sync, nothing in the checkout stops git add from staging raw bytes. validate then
rejects every file below documents/ that is not a *.yml pointer or that .gitignore:
./documents/exhibits/exhibit-a.png: error: legal documents and raw document bytes must not be committed; keep only `*.yml` pointers under `documents/`