{
  "contract": "course-content/1",
  "slug": "ritual-what-it-refuses",
  "title": "What ritual/1 Refuses, By Design",
  "primitive": "ritual/1 refusals",
  "audience": "Anyone tempted to couple a practice record to value, standing, or a flattering metric",
  "summary": "Why ritual/1 refuses any money or amount vocabulary and any standing vocabulary at any depth, and why coupling to value is deliberately absent from the format entirely — accrual belongs in reward/1, downstream of a consecrated observance, never inside the practice record itself.",
  "track": "ritual-the-present-tense-track",
  "pin": {
    "source": "@flashyos/ritual — the refusals: money/amount and standing vocabulary invalid at any depth; value lives in reward/1, never inside",
    "ref": "flashyos:packages/ritual",
    "revision": "dfa8c88e71077d70535e1ded0cfd85e032fa40d2",
    "state": "current"
  },
  "intro": [
    "A format that records a practice is one temptation away from becoming a format that scores it — and the moment a practice record can carry a number that pays or ranks, every incentive shifts toward performing FOR the record instead of the thing the record was meant to witness. ritual/1 is built to make that shift structurally unavailable.",
    "This track is the refusals, read as a set of deliberate decisions rather than an accident of an early draft.",
    "Three lessons."
  ],
  "lessons": [
    {
      "n": "01",
      "title": "No money vocabulary, no standing vocabulary, at any depth",
      "outcome": "State what ritual/1 refuses to carry and why the check runs at any depth rather than only at the top level.",
      "body": [
        "Any money or amount vocabulary, anywhere in a ritual/1 fragment, at any depth, is invalid. Any standing vocabulary — `streak`, `rank`, `score`, and the like — is invalid the same way. This is not a top-level field restriction that a nested object could route around; the refusal reaches into however deeply a caller tries to bury the forbidden field.",
        "The reason for checking at depth rather than trusting a flat schema is the same reason the estate refuses derived fields like `payable` or `available` by name everywhere else: a caller who builds a fragment in memory and never runs it through validation has to still be unable to construct a broken one. A schema that only checks the top level is a schema a determined caller learns to nest around.",
        "The practical test: if you are integrating ritual/1 and find yourself wanting to add a `streak` counter or a value field 'just for internal tracking', that want is the format telling you the thing you are building does not belong inside a practice record — it belongs somewhere else, on purpose."
      ],
      "source": {
        "label": "@flashyos/ritual — what it refuses",
        "href": "https://flashyos.com/packages/ritual"
      }
    },
    {
      "n": "02",
      "title": "Value is deliberately absent — reward/1 is a separate, later step",
      "outcome": "Explain where an entitlement from a consecrated observance is actually recorded, and why it is never inside ritual/1 itself.",
      "body": [
        "The coupling to value is deliberately absent from ritual/1, on purpose, not as a gap waiting to be filled. When a consecrated observance SHOULD accrue an entitlement, the record for that is a `reward/1` entry whose `basis` is the observance's own evidence URL — a separate format, a separate record, linked by reference rather than merged into one.",
        "That separation is what keeps the caps, the venue refusal, and the payability rules honest: they all live in reward/1, where a derived field like `payable` is refused by the SAME discipline ritual/1 uses for money and standing vocabulary. Nothing in ritual/1 needs to know about any of that, because a practice record's whole job is proving the practice happened — not proving what it is worth.",
        "The estate's own phrase for this format is 'unpublished, on purpose, until the first adopter' — publication is earned by real use, never assumed in advance. That patience is easier to keep precisely because the format has nothing inside it that would tempt anyone to publish early to claim a value nobody has actually accrued yet."
      ]
    },
    {
      "n": "03",
      "title": "The refusal is proven, not just documented",
      "outcome": "Explain why a documented refusal needs a test that actually tries to violate it.",
      "body": [
        "A README that says 'money vocabulary is refused' is a claim; a test that constructs a fragment carrying a money field at three levels of nesting and asserts the validator throws is a proof. ritual/1's conformance corpus exists exactly so a non-JavaScript implementation has the same bar to clear — every case in it names the specific rule it exercises, so 'we implement the spec' means passing the same adversarial cases the reference implementation does, not just reading the same prose.",
        "This connects to a mistake the wider estate has made more than once: a rule stated only in documentation is a rule that erodes the moment someone reasonably assumes a small exception is fine. 'Just this one internal counter' is how a refusal that exists in prose gets quietly bent; a refusal enforced by a validator that throws does not have that failure mode, because there is no code path where bending it compiles.",
        "The habit worth taking from ritual/1 into your own designs: if a rule matters enough to write down, it matters enough to write a test that tries to break it. A rule nobody has tried to violate is a rule nobody actually knows holds."
      ]
    }
  ],
  "faqs": [
    {
      "q": "Why does ritual/1 check for forbidden vocabulary at every depth instead of just the top level?",
      "a": "Because a flat, top-level-only check is one a determined caller learns to nest around. Checking at any depth means a caller who builds a fragment in memory and never validates it still cannot construct a broken one — the same discipline the estate applies to refused derived fields everywhere else."
    },
    {
      "q": "Where does an entitlement from a consecrated observance actually get recorded?",
      "a": "In a separate reward/1 entry whose basis is the observance's own evidence URL — never inside ritual/1 itself. The caps, venue refusal and payability rules all live in reward/1, keeping the practice record's only job as proving the practice happened."
    },
    {
      "q": "Why is ritual/1 \"unpublished until the first adopter\" rather than published with a caveat?",
      "a": "Publication is earned by real use, never assumed in advance — the estate's rule for a new format generally. It is easier to hold that patience here specifically because nothing inside the format tempts anyone to publish early in order to claim a value nobody has actually accrued."
    }
  ],
  "related": [
    {
      "label": "ritual/1: the Present Tense",
      "href": "/academy/curriculum/ritual-the-present-tense"
    },
    {
      "label": "The State Ladder: Observed, Witnessed, Consecrated",
      "href": "/academy/curriculum/ritual-the-state-ladder"
    },
    {
      "label": "Value and Rewards",
      "href": "/academy/curriculum/value-and-rewards"
    }
  ]
}