Patterns
Status and lifecycle
Kramor separates claims that sound alike. Accepted policy is not implementation, implementation is not testing, testing is not certification. Each state has its own name, icon and treatment.
Status vocabulary
PROPOSEDIdea or design under consideration.
ACCEPTED_POLICYNormative rule approved for implementation. Not yet built.
RECOMMENDED_DEFAULTThe path to take without asking routine questions.
IMPLEMENTEDCode written and committed. Not yet tested.
TESTEDExecuted against suites with retained evidence.
CERTIFIEDRoute and entity verified end to end under real conditions.
DEFERREDExplicitly postponed to a future milestone.
OPENNeeds evidence or a benchmark before it can be resolved.
Ledger stages
Ledger track
Ledger timeline
prd_48213Pre-dispatch
09:12 · plannerPayload hashed from source revision 2026-11-08.
sha256:7b1e44a0…1c5e92Staged
09:20 · Priya RamanLocked in plan revision r14.
sha256:e2c94b7a…e9d4b7Dispatched
09:41 · worker eu-3productCreate committed on attempt 1.
sha256:a4d07c2e…a5b2e4Verified
WaitingRead-back confirms the record exists at the destination.
Certified
WaitingSigned evidence record committed to the database.
Exception states
Outcome unknown
A write timed out or returned a 5xx. Retries are blocked.
Read-back
Query the destination for the record and compare its hash.
Reconciled
Verified if it landed. Only a confirmed failure can be retried.
Warning: Never show a retry button on an unknown outcome
Wave pipeline
W1Foundations
Taxonomies, metafields, custom data and inventory locations
4,812 / 4,812CertifiedW2Media
Media assets and file uploads through staged targets
38,240 / 38,240CertifiedW3Hierarchy
Collections, categories, menus and visual hierarchy
1,206 / 1,206CertifiedW4Catalog
Products, the variant matrix and multi-location stock
61,430 / 98,75012 exceptionsDispatchingW5Customers and orders
Customers, historical orders and draft orders
0 / 412,88025 exceptionsBlockedW6Theme
Theme AST transpilation and Liquid conversion
0 / 214Queued
Field dispositions
Copied one to one into a destination field.
Converted by a deterministic, versioned rule.
No destination exists. Required fields halt strict completion.
Left out on purpose, with a recorded reason.
Waiting on a decision before the plan can be approved.
Value states
| Field | Source | Destination | Outcome |
|---|---|---|---|
| compare_at_price | null, Null: The source sent an explicit null. | missing, Missing: The field is absent from the source payload. | Explicit null is kept. The destination field is not written. |
| inventory.available | 0, Zero: A real numeric zero, such as stock on hand. | 0, Zero: A real numeric zero, such as stock on hand. | A real zero. Stock is written as 0, not skipped. |
| seo.description | "", Empty string: Present, with zero characters. | clear, Clear: A command to wipe the destination value. | Empty string becomes a clear command, behind the destructive gate. |
| taxable | false, False: A real boolean false, such as taxable: false. | false, False: A real boolean false, such as taxable: false. | Boolean false is preserved, never treated as missing. |
| custom.fit_notes | unknown, Unknown: A value the engine does not recognise. | missing, Missing: The field is absent from the source payload. | Unrecognized value raises an exception for review. |
Do
Show the literal value
An operator reading null, "" or 0 knows exactly what the source sent and what will be written.
Don't
Collapse different states into a dash
A dash for every empty-looking value hides the difference between missing and cleared, which is where data loss starts.