.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
Always
readyroom/primitive/v1. Importers use this value to identify the record format version.Always
primitive. Distinguishes source records from manifests and other YAML files in the tree.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.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
Human-readable label for this primitive. Used in compiled views, indexes, and navigation.
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.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.A concise, reader-friendly statement of the product truth this primitive captures. Compiled views often surface this field as the primary description.
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.
Directed semantic edges to other primitives. See Ref Roles Reference for approved roles and direction rules.
Optional fields
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.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.
| Type | Key fields |
|---|---|
premise | confidence, evidence_source, provenance |
intent | value, actor, action, end_state, scope, non_scope, failure_behavior, input_data, output_data, required_services, required_standards, operating_envelope |
standard | rule, applies_to, measurement, enforcement |
service | readiness, environments, access, proof_policy, failure_modes, simulation_rules, observability, privacy, owner, readiness_gaps |
question_card | question, context, options, resolution_criteria |
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:Stable artifact id using the artifact-family prefix — for example
SA-001 for sample data.The artifact family. Valid values:
sample_data, resource, snippet, design, manifest.Repo-relative path to the artifact file.
Privacy classification. For sample data use
sanitized_fixture or explicit_user_stub.List of primitive ids that reference this artifact.
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.