Skip to content

Remove false agency and the splices from the adaptations register - #143

Merged
mmacy merged 2 commits into
mainfrom
chunk/prose-agency-3
Sep 15, 2026
Merged

mmacy merged 2 commits into
mainfrom
chunk/prose-agency-3

Conversation

@mmacy

@mmacy mmacy commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Summary

docs/adaptations.md is the last hand-written page #72 names. It held every em dash and semicolon left in the documentation, 167 and 159 of them, and read as one long splice: entries of three and four spliced clauses where the register needed one fact per sentence. It also had the agency defect in its own dialect, where the dice belong to the things being ruled about: gems rolled the value table, a trap rolled its 2-in-6, a door rolled no die, a fall rolled nothing, a gate rolled each round, and a magic item rolled its own save.

332 punctuation replacements and 58 changes of wording, across 113 of the page's 119 paragraphs, in two commits: the pass itself and the corrections review asked for, which are the third table below. 34 of the wording changes apply the agency and carry rules from #72; 24 apply the house prose rules.

Three things particular to this page are intact, and I checked each mechanically rather than by eye:

  • The "Locked by" tails. All 110 are byte-identical, checked by extracting every Locked by … sentence from both revisions and comparing the sorted lists.
  • The headings. Identical, checked the same way, because the packet forbids heading changes. Nothing links to them: every reference to this page in src/ and in the other docs is prose ("the adaptations register") or a link to the page root, and a search for an anchored link to adaptations.md#… finds none.
  • Every backticked identifier. The multiset of backticked spans is unchanged: nothing added, nothing removed. Where a list separator sat between two of them (`affected_1_3`/`affected_4_5`), only the separator changed.

The line count is unchanged at 459, so every line number below is the same before and after. The literal carry family stays throughout: on this page a carrier is a party member holding loot, and the treasure-distribution entry is built on that sense.

Verification

  • uv run mkdocs build --strict passes, before the corrections and again after them.
  • uv run pytest tests/test_docs_gates.py tests/test_docs_examples.py tests/test_docs_site.py -q: 376 passed, 73 skipped, before the corrections and again after them.
  • The three invariants re-checked mechanically after the corrections: the 110 Locked by tails byte-identical, the 113 headings byte-identical, and the multiset of backticked spans unchanged.
  • The full gate: ruff format --check (160 files already formatted), ruff check (all checks passed), pyright (0 errors), uv run pytest -q (2935 passed, 146 skipped, 2 xfailed).
  • No CHANGELOG.md entry: prose corrections are not behavior changes.

Review table

Two tables, because a row per punctuation mark would bury the changes you have to check. The first holds every change of wording, which is what to read. The second lists the punctuation work paragraph by paragraph, since each mark is a mechanical substitution the diff shows in full.

Changes of wording

This table is not exhaustive. Thirteen further wording changes are listed under it, and the rest of the work is punctuation, in the second table.

File and line Before After Reason
docs/adaptations.md:3 This page is the single register for the places where that isn't enough: Every place where that isn't enough is recorded here, as one of two kinds of entry: The page describing itself. The authority claim survives in the new subject.
docs/adaptations.md:5 This register doubles as the project's evidence ledger … Those citations refer to the repository — they are provenance for the curious, not links on this site The register doubles as … Those citations point into the repository. They are provenance, not links on this site "For the curious" is filler, and the em dash spliced two sentences.
docs/adaptations.md:27 "For every two points by which an ability score is reduced, one point may be added" — the SRD doesn't say whether The SRD says "For every two points by which an ability score is reduced, one point may be added", and doesn't say whether The quotation was the subject of a sentence the SRD is the subject of.
docs/adaptations.md:31 a consequence chosen, not overlooked (an appositive after an em-dash pair) That consequence is chosen, not overlooked. The appositive had no verb and hung off a 40-word sentence.
docs/adaptations.md:35 under both tracking modes under basic and detailed tracking alike The quantifier never named its two members.
docs/adaptations.md:79 Gate → roll (+ STR for melee) → doublings (brace, charge, back-stab) → minimum 1 → reductions (floored, never below 1). The gate resolves first, then the damage roll (plus STR for melee), then the doublings (brace, charge, back-stab), then the minimum of 1, then the reductions (floored, never below 1). An arrow chain in prose. The order is unchanged.
docs/adaptations.md:103 The three dual-listed gear items carry pinned damage-source semantics The three dual-listed gear items have pinned damage-source semantics Metaphorical carry.
docs/adaptations.md:143 1d6 per full 10 feet fallen; a 9-foot fall rolls nothing The engine rolls 1d6 per full 10 feet fallen, and nothing at all for a fall under 10 feet A fall does not roll. falling_damage's docstring in core/combat.py: "a fall under 10 feet, which takes no dice and no draw".
docs/adaptations.md:155 1hp and the hydra's 8-hp-per-HD forms roll nothing The engine rolls nothing for 1hp and for the hydra's 8-hp-per-HD forms A stat-block form does not roll.
docs/adaptations.md:159 one sentence of nine semicolon-joined conventions four sentences, same nine conventions in the same order Clause stacking at its worst on the page.
docs/adaptations.md:175 Rules_of_Magic.md carries identical content Rules_of_Magic.md has identical content Metaphorical carry: a file contains text.
docs/adaptations.md:183 divine copies never carry a reversed flag divine copies never have a reversed flag Metaphorical carry.
docs/adaptations.md:187 Cause wounds touch attacks roll a melee attack only in combat Cause wounds touch attacks take a melee attack roll only in combat An attack does not roll itself.
docs/adaptations.md:195 a drained character may hold a book over capacity and simply cannot add more and cannot add more Minimizer.
docs/adaptations.md:227 Spell morale modifiers ride check_morale's existing modifier argument Spell morale modifiers use check_morale's existing modifier argument Modifiers do not ride an argument.
docs/adaptations.md:235 item instances carry no ids item instances have no ids Metaphorical carry.
docs/adaptations.md:275 One 2d6 turn roll compares per candidate type against its cell The engine compares one 2d6 turn roll per candidate type against its cell A roll does not compare anything.
docs/adaptations.md:283 the two hydra cells carry variant_dice the two hydra cells have variant_dice Metaphorical carry.
docs/adaptations.md:287 a core → data → crawl transitive import a transitive import from core through data into crawl An arrow chain in prose.
docs/adaptations.md:307 so silence is genuinely ambiguous so silence is ambiguous Stock word.
docs/adaptations.md:311 the player-facing exploration.trap.safe emits only for a known trap the engine emits the player-facing exploration.trap.safe only for a known trap An event does not emit itself.
docs/adaptations.md:311 while a found treasure trap still rolls its 2-in-6 on every TakeTreasure while the engine still rolls a found treasure trap's 2-in-6 on every TakeTreasure A trap does not roll. Springing, which is a physical event, stays the trap's own verb throughout.
docs/adaptations.md:311 a door or an area edge rolls no die, so there is nothing to report the engine rolls no die for a door or an area edge, so there is nothing to report Same defect, same paragraph.
docs/adaptations.md:311 A trap needs a living victim: a party with no one left rolls no spring die A spring needs a living victim, so the engine rolls no spring die for a party with no one left A trap cannot need anything, and a party does not roll the spring die.
docs/adaptations.md:317 Each item prefers a carrier whose class may use it Each item goes to a carrier whose class may use it An item has no preferences. The fallback in the next sentence is untouched.
docs/adaptations.md:318 Pieces deal richest-first, each to whoever currently holds the least by value The engine deals pieces richest-first, each to whoever currently holds the least by value Pieces do not deal themselves out. _distribute_haul in crawl/exploration.py does.
docs/adaptations.md:319 the one place where a fair share and a mobile party want the same thing the one place where a fair share and a mobile party come to the same thing Neither a share nor a party wants anything here.
docs/adaptations.md:327 A light-kind expiry surfaces to players as exploration.light.expired appended by the session When a light-kind effect expires the session appends exploration.light.expired for players "Surfaces" as a verb, and an expiry that cannot append anything. The session was already named as the appender.
docs/adaptations.md:327 the escape params ride the effect the escape params sit on the effect Params do not ride.
docs/adaptations.md:339 monsters whose treasure ref carries letters monsters whose treasure ref has letters Metaphorical carry.
docs/adaptations.md:339 the AC penalty rides attack_penalty_of_attackers +2 the AC penalty applied through attack_penalty_of_attackers +2 A penalty does not ride an argument.
docs/adaptations.md:347 the kernel validators reject, the machine surfaces them the kernel validators reject and the machine reports them "Surfaces" as a verb.
docs/adaptations.md:355 individually turned members of a mixed group simply don't act individually turned members of a mixed group don't act Minimizer.
docs/adaptations.md:355 a per_round_chance_in_six gate rolls each round the engine rolls a per_round_chance_in_six gate each round A data field does not roll.
docs/adaptations.md:359 neither view carries the seed neither view includes the seed Metaphorical carry.
docs/adaptations.md:367 Gems roll the d20 value table per stone and jewellery rolls 3d6 × 100 gp per piece The engine rolls the d20 value table per gem and 3d6 × 100 gp per piece of jewellery Gems and jewellery do not roll.
docs/adaptations.md:391 everything else carries manual-tagged prose everything else ships manual-tagged prose Metaphorical carry.
docs/adaptations.md:407 the curse is no disease and carries no condition the curse is no disease and attaches no condition Metaphorical carry, and "attaches" is the effects engine's own verb.
docs/adaptations.md:415 the wearer's own +1 rides the equipped-item channel the wearer's own +1 goes through the equipped-item channel A bonus does not ride a channel.
docs/adaptations.md:419 Use-time item resolution … rides the "magic" stream Use-time item resolution … draws from the "magic" stream Same defect. "Draws from" is what the RNG streams reference calls it.
docs/adaptations.md:423 so its kit shield rides carried, unwielded so the kit shield is carried rather than wielded A shield does not ride. The literal carrying stays.
docs/adaptations.md:431 All services are always available in the 1.0 marker town Every service is available in the 1.0 marker town Absolute qualifier doubled up.
docs/adaptations.md:439 The Phase 1–2 flags … are SRD optional rules The Phase 1 and 2 flags … are SRD optional rules An en dash between two phase numbers.
docs/adaptations.md:455 each carried magic item rolls against the owner's save value the engine rolls each carried magic item against the owner's save value An item does not roll its own save, even though the flag is named for that save.
docs/adaptations.md:23, :207, :223, :271, :287, :327, :335, :451 numeric ranges written 1–2, 6th–10th, 3–8, 7–9, 4–5, 1–3, 20'–120', 2–3 1-2, 6th-10th, 3-8, 7-9, 4-5, 1-3, 20-120', 2-3 En dashes in ranges. Every value is unchanged.

Thirteen further wording changes, which the table above does not list one by one. Each is a clause the punctuation work had to re-say, and none changes what the entry claims:

  • docs/adaptations.md:263 - "magically augmented STR above 18 in 4 rounds" had elided its verb across a semicolon; it now reads "escapes in 4 rounds".
  • docs/adaptations.md:295 - "except construction tricks, dwarf-only with a zero baseline" became a sentence, "Construction tricks are the exception, dwarf-only with a zero baseline, because the SRD grants that perception to dwarves alone".
  • docs/adaptations.md:335 - "on a rectangular room exactly that room's extent … down a straight corridor the whole passage" supplies the two elided verbs, and "a caller-supplied distance — every referee spawn — is never capped" becomes "a caller-supplied distance, which is every referee spawn, is never capped".
  • docs/adaptations.md:327 - "require light — searching and listening alone also work on the actor's own infravision" becomes "require light, while searching and listening alone also work on the actor's own infravision".
  • docs/adaptations.md:391 - "the sparse basic column compiles as printed" becomes "with the sparse basic column compiled as printed", inside the parenthesis.
  • docs/adaptations.md:247 - "when the recorded level exceeds the dispelling caster's, it survives" becomes "the effect survives". "It" had the level, the caster and the effect to choose from.
  • docs/adaptations.md:359 - "and cause — poison when … — feeding" becomes a parenthesis, and "neither view carries the seed (it lives only in the save)" becomes "neither view includes the seed, which lives only in the save".
  • Slash pairs spelled out, where the slash stood for "or" or "and" in the page's own voice and not in a quotation: :119 death/poison, :159 leader/chieftain, :163 combat.attack.hit / combat.attack.missed, :175 **Duration:**/**Range:**, :179 once-a-day/after-uninterrupted-sleep/one-hour, :331 torch/lantern, :367 gem/jewellery, :391 category/tag, :407 affected_1_3/affected_4_5/affected_6_plus.

Corrections after review

File and line The first pass had It now reads Reason
docs/adaptations.md:135 "Magical healing is ineffective**,** natural healing is ten times slower" "Magical healing is ineffective**;** natural healing is ten times slower" Inside a quotation. The semicolon is srd/Mummy.md's.
docs/adaptations.md:207 "three missiles at 6th**-10th level, five missiles at 11th-**15th level" "…6th**–10th … 11th–**15th…" Inside a quotation.
docs/adaptations.md:331 RAW's "referee may increase or decrease" RAW's "referee may increase**/**decrease" Inside a quotation.
docs/adaptations.md:343, :451 "2**-**3 characters in a 10' passage" "2**–**3 characters in a 10' passage" Inside a quotation, in both entries that quote it.
docs/adaptations.md:451 leaves the rest to judgement : "The referee should judge leaves the rest to judgement**. The SRD's own words: "The referee should judge** The em-dash replacement had left a space before the colon.
docs/adaptations.md:391 as ability-derived template sets) rather than string-matched prose as ability-derived template sets), never string-matched prose A prohibition, not a contrast.
docs/adaptations.md:399 at query time rather than as ledger effects at query time**, never as** ledger effects Same.
docs/adaptations.md:411 a rejection (items.device.inert) rather than a silent no-op a rejection (items.device.inert), never a silent no-op Same. Nine plain "X, not Y" contrasts keep "rather than".
docs/adaptations.md:367 structured magic clauses (any, a named category, or a pool, then a count or count dice, then exclusions, then + 1 potion-style extras) structured magic clauses. A clause's parts are any, a named category, or a pool, a count or count dice, exclusions, and + 1 potion-style extras The grammar's semicolon list named four parts and stated no order between them; "then" asserted one.
docs/adaptations.md:367 TreasureRef letters resolve by SRD section, where parenthetical letters are lair treasure, extra_gp joins the hoard, … resolve by SRD section, and parenthetical letters are lair treasure**.** extra_gp joins the hoard, … "Where" subordinated four independent pins to the letter resolution.
docs/adaptations.md:339 treasure for monsters whose treasure ref has letters, the intelligence proxy, override-correctable per encounter, and food otherwise treasure for monsters whose treasure ref has letters (the intelligence proxy, override-correctable per encounter) and food for everything else The bait contrast had flattened into a comma list.
docs/adaptations.md:311 springs the trap (the classic reading, where RAW says only "attempted once per trap") springs the trap, which is the classic reading**. RAW says only "attempted once per trap".** "Where" read as RAW supporting the classic reading. RAW is silent.
docs/adaptations.md:335 (pinned), and releases turned effects when it ends (pinned). An encounter releases turned effects when it ends "And releases" could attach to the relative clause rather than to the encounter.
docs/adaptations.md:335 the printed 20-120' band the printed 20'-120' band The lower bound lost its foot mark.
docs/adaptations.md:275 (minimum 1**,** fixed bonuses dropped, the sleep convention) (minimum 1 and fixed bonuses dropped, the sleep convention) The gloss read as a third item in the list.
docs/adaptations.md:307 rolled regardless of occupants, because undead make no noise and silence is therefore ambiguous rolled regardless of occupants**. Undead make no noise, so silence is ambiguous** The noiselessness is why silence proves nothing, not why the roll happens regardless of occupants.
docs/adaptations.md:317 Each item goes to a carrier whose class may use it The engine prefers a carrier whose class may use the item "Goes to" is stronger than _hand_item, which sorts a usable class first and falls back. The preference is the engine's, which keeps the actor real.
docs/adaptations.md:283 so the printed HD dice roll once on the wandering stream and select the template so the engine rolls the printed HD dice once on the wandering stream and selects the template Dice as the subject, which the same pass had fixed everywhere else.

The punctuation, paragraph by paragraph

166 em dashes, 151 semicolons, and 15 en dashes, replaced by a full stop, a colon, a comma, or parentheses according to what each was doing. The marks inside quotation marks are not here: house punctuation stops at a quotation mark, so the ones the SRD prints stay as printed. Where a mark joined two independent clauses the sentence splits, where it set off an aside the aside goes in parentheses or commas, and where what followed explained or listed, a colon. No fact was added or dropped in any of them. Twelve of the em dashes sat in an "X, not Y" or "never Y" construction: three of those were prohibitions and keep "never" (:391, :399, :411), and the other nine are plain contrasts that now read "X rather than Y".

Line Marks replaced
docs/adaptations.md:3 1 semicolon
docs/adaptations.md:5 1 em dash
docs/adaptations.md:11 1 em dash
docs/adaptations.md:23 2 en dashes
docs/adaptations.md:27 1 em dash
docs/adaptations.md:31 2 em dashes, 1 semicolon
docs/adaptations.md:35 1 em dash
docs/adaptations.md:39 1 em dash
docs/adaptations.md:51 1 em dash
docs/adaptations.md:55 2 em dashes
docs/adaptations.md:59 2 em dashes, 1 semicolon
docs/adaptations.md:67 1 em dash
docs/adaptations.md:71 1 semicolon
docs/adaptations.md:75 2 em dashes, 5 semicolons
docs/adaptations.md:79 wording only
docs/adaptations.md:83 1 semicolon
docs/adaptations.md:87 3 em dashes, 1 semicolon
docs/adaptations.md:91 1 em dash
docs/adaptations.md:95 1 em dash
docs/adaptations.md:99 1 em dash, 1 semicolon
docs/adaptations.md:103 1 em dash
docs/adaptations.md:107 1 em dash, 1 semicolon
docs/adaptations.md:111 2 em dashes, 1 semicolon
docs/adaptations.md:115 2 em dashes, 1 semicolon
docs/adaptations.md:119 1 em dash, 1 semicolon
docs/adaptations.md:123 2 em dashes
docs/adaptations.md:127 1 semicolon
docs/adaptations.md:131 1 em dash, 1 semicolon
docs/adaptations.md:135 1 em dash, 1 semicolon
docs/adaptations.md:139 2 em dashes, 1 semicolon
docs/adaptations.md:143 1 semicolon
docs/adaptations.md:147 1 em dash
docs/adaptations.md:151 2 em dashes
docs/adaptations.md:155 1 semicolon
docs/adaptations.md:159 8 semicolons
docs/adaptations.md:163 1 semicolon
docs/adaptations.md:167 1 em dash
docs/adaptations.md:171 1 em dash, 1 semicolon
docs/adaptations.md:175 1 em dash
docs/adaptations.md:179 1 semicolon
docs/adaptations.md:183 1 em dash
docs/adaptations.md:187 2 em dashes, 1 semicolon
docs/adaptations.md:191 1 semicolon
docs/adaptations.md:195 1 em dash, 2 semicolons
docs/adaptations.md:199 1 em dash, 1 semicolon
docs/adaptations.md:203 1 semicolon
docs/adaptations.md:207 1 em dash
docs/adaptations.md:211 1 em dash
docs/adaptations.md:215 1 semicolon
docs/adaptations.md:219 1 semicolon
docs/adaptations.md:223 2 semicolons, 3 en dashes
docs/adaptations.md:227 2 em dashes, 1 semicolon
docs/adaptations.md:231 1 em dash
docs/adaptations.md:235 1 em dash, 1 semicolon
docs/adaptations.md:239 1 em dash
docs/adaptations.md:243 1 semicolon
docs/adaptations.md:247 2 semicolons
docs/adaptations.md:251 2 em dashes, 3 semicolons
docs/adaptations.md:255 2 em dashes, 1 semicolon
docs/adaptations.md:259 2 em dashes
docs/adaptations.md:263 1 semicolon
docs/adaptations.md:267 1 semicolon
docs/adaptations.md:271 1 em dash, 1 semicolon, 1 en dash
docs/adaptations.md:275 1 em dash, 5 semicolons
docs/adaptations.md:279 3 em dashes
docs/adaptations.md:283 1 em dash, 1 semicolon
docs/adaptations.md:287 1 semicolon, 2 en dashes
docs/adaptations.md:291 3 em dashes
docs/adaptations.md:295 1 em dash
docs/adaptations.md:299 2 em dashes, 3 semicolons
docs/adaptations.md:303 2 em dashes, 5 semicolons
docs/adaptations.md:307 2 em dashes, 2 semicolons
docs/adaptations.md:311 8 em dashes, 3 semicolons
docs/adaptations.md:315 2 em dashes
docs/adaptations.md:317 1 em dash
docs/adaptations.md:318 2 em dashes
docs/adaptations.md:319 1 em dash
docs/adaptations.md:320 1 semicolon
docs/adaptations.md:321 2 em dashes
docs/adaptations.md:323 1 em dash
docs/adaptations.md:327 3 em dashes, 4 semicolons, 2 en dashes
docs/adaptations.md:331 2 em dashes
docs/adaptations.md:335 8 em dashes, 8 semicolons, 4 en dashes
docs/adaptations.md:339 6 em dashes, 4 semicolons
docs/adaptations.md:343 3 em dashes, 3 semicolons
docs/adaptations.md:347 5 em dashes, 5 semicolons
docs/adaptations.md:351 3 semicolons
docs/adaptations.md:355 1 em dash, 6 semicolons
docs/adaptations.md:359 3 em dashes, 5 semicolons
docs/adaptations.md:363 2 semicolons
docs/adaptations.md:367 3 em dashes, 7 semicolons
docs/adaptations.md:371 3 em dashes, 1 semicolon
docs/adaptations.md:375 3 em dashes, 2 semicolons
docs/adaptations.md:379 1 semicolon
docs/adaptations.md:383 3 em dashes, 3 semicolons
docs/adaptations.md:387 2 em dashes, 1 semicolon
docs/adaptations.md:391 2 em dashes, 4 semicolons
docs/adaptations.md:395 2 em dashes, 1 semicolon
docs/adaptations.md:399 2 em dashes
docs/adaptations.md:403 1 em dash
docs/adaptations.md:407 3 em dashes, 1 semicolon
docs/adaptations.md:411 1 em dash
docs/adaptations.md:415 1 em dash
docs/adaptations.md:419 2 em dashes, 2 semicolons
docs/adaptations.md:423 3 em dashes, 2 semicolons
docs/adaptations.md:427 1 em dash, 3 semicolons
docs/adaptations.md:431 3 em dashes, 1 semicolon
docs/adaptations.md:435 1 em dash, 1 semicolon
docs/adaptations.md:439 1 semicolon, 1 en dash
docs/adaptations.md:443 1 em dash, 3 semicolons
docs/adaptations.md:451 3 em dashes
docs/adaptations.md:455 3 em dashes, 1 semicolon
docs/adaptations.md:459 1 em dash

Open questions

1. House punctuation stops at a quotation mark. Quoted text is this page's evidence, so it keeps the marks the source prints: the semicolon in srd/Mummy.md's "Magical healing is ineffective; natural healing is ten times slower" (:135), the en dashes in "6th–10th" and "11th–15th" (:207), the slash in RAW's "referee may increase/decrease" (:331), and the en dash in "2–3 characters in a 10' passage" in both entries that quote it (:343, :451). The first pass had house-styled all five inside the quotation marks, and the corrections commit puts them back.

2. Eight marks survive, all in headings. No heading changed, because the packet forbids it. Nothing in the repository links to an anchor on this page, so you can rename any of these without touching src/. What stays: an em dash in "### The holy damage key is admitted through any gate on undead targets — and only there" (:89), and semicolons in "### Torch and burning oil deal fire damage; holy water carries the holy key" (:101), "### Poison failure is death, with optional onset; riders leave the damage unaffected" (:117), "### Asleep grants auto-hit and dies-to-a-blade; dozing is a caller modifier" (:137), "### Arcane casters fix normal/reversed at memorization; divine casters choose at cast" (:181), "### Starting books hold exactly capacity; book capacity is per level; books never auto-shrink" (:193, two), and "### Lightning bolt kills destroy equipment; disintegrate kills permanently and destroys carried gear" (:209).

3. Two headings carry defects of their own, and stay for the same reason. :9 reads "### Multi-prime-requisite XP tiers carry no penalties", which is the metaphorical carry in a heading, and :101 has "holy water carries the holy key". Both stay only because the packet forbids heading changes; nothing links to either anchor.

4. A numeric surface count in a heading. :389, "### The magic item catalog: 164 templates, a wired census, and manual prose". AGENTS.md rules numeric surface counts out of prose, and this is the kind that drifts when the catalog grows. It is a heading, so it stays here.

5. Numeric counts in the body, left alone deliberately. :175 ("the compiler census (106 pages, 34 + 72 list entries)"), :51 ("the twenty Other Languages"), :415 ("MAX_RINGS_WORN = 2"). These count fixed SRD input or a constant rather than a project surface, and on an evidence ledger the numbers are the evidence.

6. "Carrier" and the carry family, kept throughout. On this page the literal sense is the subject matter: :315 quotes RAW on what "any character can carry", :317-:323 are built on carriers as party members holding loot, :191 quotes Cleric.md on carrying a holy symbol, and :35, :39, :303, :375, :383, :387, :455 all mean physical carrying. Only the five metaphorical uses changed.

7. The SRD and the dice stay actors. :335 ("RAW rolls 2d6 × 10' only 'if there is uncertainty'") and the pervasive "the die shows", "the roll compares" idioms where a person or the engine is plainly behind them. This is the call osr-editor#65 made and #138 followed.

8. Effects act. "the effect attaches", "expiry applies the listed damage", "a darkness-family effect suppresses the whole party's light". The effects engine is software resolving them, and the docs treat an effect as the mechanism rather than as authored content. Left alone.

9. Contractions and "you" stay at effectively zero, the two fingerprints still outside the house range. The page is a register of rulings that never addresses a reader, and adding second person would be a rewrite rather than an edit in place.

10. Sentence length is still above the house median at the 90th percentile. Splitting the splices brought the median to 18 words, and the long tail is what remains: entries like :311 and :343 state a dozen related pins in one paragraph. Cutting them further would restructure the register, which the edit-in-place instruction rules out.

Undefined jargon found

Location and term only. Nothing here was changed. This page is written for a reader who already has the SRD open, so the list is short by design.

  • the odometer, and thirds-of-feet - docs/adaptations.md:299.
  • the simulation floor - docs/adaptations.md:303.
  • the no-leak doctrine - docs/adaptations.md:307, :311.
  • game territory, as the phrase for what the library deliberately leaves out - docs/adaptations.md:355, :367, :431.
  • registered, used as a standalone marker for "recorded as a known gap" - docs/adaptations.md:259, :327, :367, :431, :435.
  • the marker town - docs/adaptations.md:431.
  • packed-variant pages - docs/adaptations.md:159, :283.
  • the wandering-re-roll precedent - docs/adaptations.md:367.
  • work-item-4 list - docs/adaptations.md:391.

Vocabulary decisions for the owner

1. "Carrier", the specification's word. Unchanged, as in #138 and #141. On this page it is also the literal word for a party member holding loot, which is exactly the collision docs/spec.md:207 and :209 leave open. Nothing here forces the decision either way.

2. "Carries" in two headings. :9 and :101. I left them because the packet forbids heading changes, not because anything depends on their anchors: nothing links to them, so renaming them is a one-file change whenever you want it.

3. "Pinned" as the register's own verb. "Pinned:", "pinned as", "all pinned" appear throughout, and the page defines the term in its opening sentence. Left alone, and worth keeping.

4. "Surfaces" as a verb. Removed in the two places it appeared here (:327, :347), for "appends" and "reports". Both replacements are verbs the same entries already use.

5. "Game territory". The page's phrase for a decision the library declines to make. It is undefined but consistent, and renaming it would touch a dozen entries.

Cross-repository effects

1. The gate docstring, still open. src/osrlib/crawl/gates.py:108 reads "so a door that swings shut needs another key", and "needs" is on #72's own list. This page does not contain that sentence, so nothing here fixes it. It reaches osr-editor through the generated types and that editor's gate condition builder help text until osrlib's docstrings are corrected and osr-editor's osrlib pin moves.

2. No cross-project surface runs through this page's headings. I said otherwise when I opened this, and it was wrong: every reference from src/ is prose or a link to the page root, and no file in the repository links to an anchor here. The headings are byte-identical anyway, and the mkdocs strict build passes.

3. Nothing else propagates. No schema, no code identifier, no generated page, and no test name changed, so osr-forge and osr-editor see nothing from this pull request.

4. #72's Markdown half is complete with this. docs/index.md, docs/getting-started/, docs/guides/, docs/front-ends/, docs/reference/rng-streams.md, and now docs/adaptations.md. docs/reference/rejection-codes.md and docs/reference/message-codes.md are generated at build time and have no file to edit. The docstring half of #72 is untouched and still open.

Part of #72.

https://claude.ai/code/session_01NmCezTw8hKKujkaEZ3YGAs

The register held every em dash and semicolon left in the hand-written
docs, 167 and 159 of them, and it read as one long splice. The dashes
become full stops, colons, commas, or parentheses, the semicolons split
into sentences, and the damage-pipeline arrow chain becomes a sentence.
On the agency side the engine takes back the rolling: gems, a trap, a
door, a gate, a fall, a spawn form, and a magic item no longer roll
anything themselves, a file no longer carries content, items no longer
prefer a carrier, and pieces no longer deal themselves out. The literal
carrying stays, because on this page a carrier is a party member
holding loot.

Every "Locked by" tail, every heading, and every backticked identifier
is byte-identical, and the line count is unchanged.

Part of #72.

Claude-Session: https://claude.ai/code/session_01NmCezTw8hKKujkaEZ3YGAs
Quoted text keeps the punctuation the source prints: the mummy-rot
semicolon, the magic-missile level ranges, "referee may
increase/decrease", and both copies of "2-3 characters in a 10'
passage". House punctuation stops at a quotation mark.

"Never" comes back where it was a prohibition rather than a contrast:
versus clauses are never string-matched prose, equipped-item bonuses
are never ledger effects, and an activation of an inert device is never
a silent no-op. The nine plain "X, not Y" contrasts keep "rather than".

Six replacements had changed what a sentence claims. The treasure
grammar no longer asserts an order its list did not state and no longer
subordinates four independent pins to the letter resolution; the bait
contrast is a contrast again; RAW is silent about the classic reading
rather than supporting it; the encounter releases the turned effects,
not the parenthesis before it; the sleep convention glosses the
parenthesis it sat in; and the noiselessness of undead is why silence
proves nothing rather than why the roll happens. The distance band gets
its foot mark back.

The engine prefers a carrier whose class can use an item, which is what
`_hand_item` does, rather than sending it there outright, and it rolls
the hydra cells' variant dice.

Part of #72.

Claude-Session: https://claude.ai/code/session_01NmCezTw8hKKujkaEZ3YGAs
@mmacy
mmacy merged commit 4069723 into main Sep 15, 2026
5 checks passed
@mmacy
mmacy deleted the chunk/prose-agency-3 branch September 15, 2026 05:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant