The Occestra Quality Standard · v1.0.0
The rubric that grades every artifact — including ours.
Most AI creative services have no standard at all; the rest have a standard you cannot read. Occestra's is published, versioned, and generated from the exact constants the grading engine executes — this page is rendered at build time from rubricAsMarkdown() in @occestra/tribunal, so it cannot drift from the shipped code.
Philosophy: deterministic first
Cheap checks run first, on everything, every time. Budget sums, schedule overlaps, real calendar dates, pixel dimensions, WCAG contrast, dead links, file weight, policy violations — deterministic code that never hallucinates and cannot be argued with. A hard failure cannot be rescued by a good score.
Model critique is versioned and constrained. The critic scores five axes against the published thresholds. It applies a substitution test to copy — if a sentence could be pasted into a thread about a different product, it is filler and scores accordingly. Its identity and rubric version ship in every report.
Failures go back. A failing artifact receives a concrete repair brief and is regenerated — at most two passes. And when repair isn't enough, the artifact ships marked fail, report included. We have real packs in the gallery whose pass rate is 60% — kept, because the alternative is a standard that bends.
Reports always ship. Every pack carries the full TribunalReport for every artifact: axes, checks, issues, repairs, gaps. Grading that hides its results is decoration.
The rubric, verbatim
Occestra Quality Standard (OQS) v1.0.0
Every artifact Occestra produces is graded against this rubric before it ships. The rubric below is generated from the same constants the grading engine runs, so what is published here is exactly what is enforced.
Pass rule
An artifact passes when every axis scores at least 70/100 and no hard check fails. On failure the Tribunal writes a concrete repair brief and the artifact is regenerated — at most 2 repair passes. The full report ships inside the pack either way, pass or fail.
Scored axes
| Axis | Threshold | What it measures |
|---|---|---|
| Composition | 70/100 | Deliberate structure and hierarchy. Focal point, balance, and breathing room — not a centred blob or a wall of undifferentiated text. |
| Legibility | 70/100 | Every word readable at its intended size, on its intended surface. Type sits on adequate contrast and is never crushed, clipped, or overflowing. |
| Style fidelity | 70/100 | Faithful to the requested House Style — its palette, its type direction, its material and texture language. Not a generic default rendering. |
| Grounding | 70/100 | Every factual claim is real, sourced, and timestamped. Nothing invented; nothing overclaimed; uncertainty stated plainly rather than smoothed over. |
| Platform fit | 70/100 | Correct for where it will actually live — dimensions, aspect, length, and tone appropriate to the medium and the audience. |
Deterministic checks
These run first, on every artifact, every time — they are cheap, they never hallucinate, and a hard failure cannot be argued away by a good score.
| Check | Applies to | Severity | Description |
|---|---|---|---|
SCHEMA_INVALID |
all | hard | The artifact does not satisfy its own published schema. |
POLICY_VIOLATION |
all | hard | Final copy re-screened by the PolicyGate: third-party IP, real-person likeness, or unsafe content. |
SOURCE_MISSING |
grounded claims in plans | hard | A factual claim (venue, hours, weather, price) ships without a source and a retrieval timestamp. |
BUDGET_SUM_MISMATCH |
budget | hard | Line items do not sum to the stated total (tolerance $0.01). |
SCHEDULE_OVERLAP |
schedule | hard | Two schedule items overlap in time, or two venues are separated by an impossible gap (under 5 minutes to travel). |
DATE_INVALID |
plan | hard | A date is not a real calendar date, or contradicts the occasion date. |
DIM_ASPECT_MISMATCH |
images | hard | Rendered pixel dimensions do not match the dimensions the artifact was specified at. |
CONTRAST_LOW |
invites/cards | soft | Body text falls below a 4.5:1 WCAG contrast ratio against its background. |
PALETTE_DRIFT |
images | soft | Dominant colours drift away from the declared House Style palette. |
LINK_DEAD |
launch kit | soft | A referenced link does not resolve. |
TEXT_OVERFLOW_RISK |
invites/cards | soft | Copy is long enough to overflow or crush its layout slot. |
FILE_TOO_LARGE |
images | soft | A PNG exceeds 4 MB, which is too heavy to share comfortably. |
Thresholds
{
"budgetToleranceUsd": 0.01,
"minTravelGapMinutes": 5,
"minContrastRatio": 4.5,
"maxPaletteDistance": 70,
"maxPngBytes": 4194304,
"textBudgets": {
"invitation": 420,
"guest_guide": 3000,
"toast": 1200,
"carousel": 1800,
"launch_thread": 2400,
"story_page": 6000,
"og_image": 120,
"landing_spec": 9000,
"demo_script": 4000
}
}
Machine-readable
GET https://api.occestra.xyz/standard returns the same rubric — JSON with an Accept: application/json header, markdown otherwise. Version changes bump oqsVersion, and every pack records the version that graded it.