Artifact rules
StableRule 2 of the archive: every artifact has exactly one canonical location, and everything else references it.
When to register
Register when either is true:
- It is referenced from more than one place.
- It would need to be cited.
A figure drafted for one section of one chapter is a working file in the
archive/ tree. The moment it also appears in a paper, it becomes a FIG-
record and both places reference the record.
What registration requires
| Requirement | Why |
|---|---|
| Identifier | So it can be referenced without ambiguity |
| Page | So the reference resolves to something |
| Registry entry | So it appears in the map and validation |
| Provenance | What produced it, by identifier |
| Canonical file | One location, named on the page |
| Referenced-by | What depends on it, so a change can be assessed |
Why one location matters
The failure this prevents is specific and common. A figure is exported to a paper directory. The underlying run is corrected. The chapter’s copy is regenerated; the paper’s copy is not. Both are called “Figure 3”. Six months later they disagree and there is no record of which is current.
With one canonical record, there is one file, one regeneration, and the referenced-by list says exactly what needs rechecking.
Generated, not drawn
Figures and tables are generated from data by code. Both are identified, and the regeneration command is on the artifact’s source page. A hand-drawn figure cannot be regenerated when the run behind it changes, so it will keep showing the old result, and it will do so silently.
Diagrams are the exception: they are authored, but as source (Mermaid or equivalent) inside the page rather than as an image. Source can be diffed, reviewed and corrected; an exported image cannot.
Files, not pages
Binary artifact files never live in content/. They live in:
| Location | For |
|---|---|
public/assets/ | Anything the site must serve to a reader |
archive/ | Working material and anything not published |
| An external store | Anything large; the record holds location and checksum |