ADR 0012: Root container naming¶
Status: Accepted
Date: 2026-09-20
Context¶
The durable container that holds media identity, representations, metadata, provenance, and
revisions is named Project: pp_project_* in the C ABI, a projects table, ProjectId
in the domain model, and the .pproj extension.
Every candidate host already owns that word. An editor, a compositor, and a digital audio
workstation each call their own file a project, session, or scene, and an integration would
place a PostProject Project inside a host Project. The resulting sentence — “which
project does this project belong to” — is one an integrator has to decode every time.
The product’s own prose does not use the word this way. The roadmap and documentation
describe what PostProject holds as a production: production knowledge, shared production
state, two consumers using the same production. The documented example file is
production.pproj. The domain type is the one place the word “project” is used for this
concept.
ADR 0001 settles the product, repository, crate, and symbol naming. It does not address the domain object, and the terminology reference has no entry distinguishing the two senses.
Decision¶
The durable root container is Production. One production may serve several host projects,
sessions, or scenes that participate in the same body of work.
The rename applies throughout the current model: ProductionId, Production,
pp_production_t, pp_production_*, the production storage table, object-reference kinds,
the C++ and Python APIs, CLI terminology, and documentation. Pre-1.0 interfaces and schemas
receive no Project compatibility aliases.
The .pproj extension remains. It identifies the PostProject storage format and product,
not the root domain type, and is already clear in names such as production.pproj.
Consequences¶
Host integrations can now distinguish their own project/session/scene from the shared production without a permanent translation step. The immediate cost is a breaking rename across the domain, persistence, C ABI, bindings, fixtures, examples, and documentation.
The PostProject product and repository retain their names, and native library artifacts
remain libpostproject as decided by ADR 0001.