.ready.yml file — one primitive per file. The .ready.yml extension is intentional: it lets tools reliably distinguish primitive source records from navigation Markdown, generated docs, manifests, and generic artifacts. Humans normally read compiled views in the Ready Room app or docs; the raw .ready.yml file is optimized for parsing, validation, diffing, and Git merge review.
Complete primitive record
The following example shows all required fields and the most common optional fields:Required fields
string
required
Always
readyroom/primitive/v1. Importers use this value to identify the record format version.string
required
Always
primitive. Distinguishes source records from manifests and other YAML files in the tree.string
required
Stable identifier for this primitive. Use the type prefix followed by a zero-padded number — for example
P-001, I-001, ST-001, or SV-001. Keep id stable across renames; paths and titles are refactorable, ids are not.enum
required
The primitive type. Valid values:
premise— why the product, milestone, or feature should existintent— what the product promises to dostandard— how the product must be built, measured, judged, or maintainedservice— what the product depends on to build, prove, run, or monitorquestion_card— unresolved product-shaping ambiguity
string
required
Human-readable label for this primitive. Used in compiled views, indexes, and navigation.
string
required
The owning stage id — for example
m1 or end-state. The v1 field name is milestone even though the root manifest groups stages under the key stages.string
required
Product-facing status. Common values are
active, draft, and blocked. This is product status, not implementation lifecycle state. Do not store coding lifecycle state on primitives.string
required
A concise, reader-friendly statement of the product truth this primitive captures. Compiled views often surface this field as the primary description.
object
required
Type-specific structured content. Every value that an app, compiler, validator, search index, or agent must read belongs in YAML here — not in prose comments or Markdown files.
array
required
Directed semantic edges to other primitives. See Ref Roles Reference for approved roles and direction rules.
Optional fields
array
List of artifact ids or paths that support this primitive. Artifacts live in the stage
artifacts/ directory. Use ids or paths; do not inline large payloads.array
Free-form notes from the primitive owner. These do not carry product-truth weight and are excluded from compiled views by default.
Type-specific fields content
Each primitive type has its own expected fields shape. The table below lists the key fields by type.
required_services and required_standards in an intent’s fields are reader aids. You still need matching refs entries with role: requires and role: governed_by so validators and graph-traversal tools can follow the edges.Refs format
Use the full ref format when the edge source is another primitive:from field is inferred as the current primitive id:
Artifact metadata format
Artifacts are not primitives. They use typed manifests or index rows rather than primitive fields. At minimum, each artifact entry should identify the id, artifact type, path, privacy state, and the primitives that use it:string
required
Stable artifact id using the artifact-family prefix — for example
SA-001 for sample data.string
required
The artifact family. Valid values:
sample_data, resource, snippet, design, manifest.string
required
Repo-relative path to the artifact file.
string
required
Privacy classification. For sample data use
sanitized_fixture or explicit_user_stub.array
List of primitive ids that reference this artifact.
array
Semantic roles this artifact plays, such as
input_sample, proof_screenshot, or design_ref.File rules
Keep these rules in mind when authoring.ready.yml files:
- Use one primitive per file.
- Keep files fragmented and small enough to review in a pull request.
- Store relationships in
refs, not in prose. - Store bulky samples, mockups, screenshots, snippets, and generated outputs as artifacts referenced by id or path.
- Do not store local chat logs, raw provider transcripts, source diffs, secrets, or unreviewed scratch content in primitive records.
- Do not store coding lifecycle state on primitives — seed and delta flags gate coding claims.