Observed (Kira NPC level-up proof, trial 3, 2026-09-16, real OpenAI, headless)
Scout Kira (Rogue 3 -> 4, Outlander background) was saved with the Tough feat on her sheet and a maximum of 38 hit points. Tough adds 2 hit points per character level, so the saved maximum should have been 46. The sheet on disk is internally inconsistent.
How it got there:
- The features author (T115) granted Tough as the "restored Outlander Origin feat" and declared it as a rule fact for downstream domains. (Whether a level-up should back-fill a background feat at all is a separate question; owner ruling 2026-09-16 is to leave that behaviour as it runs today.)
- The numbers author (T119) saw Tough in its packet and included the +8 in its first two drafts, both rejected by the numbers reviewer (T120) for an unrelated proficiency-bonus error (it used +3 at level 4). While fixing that, the third draft dropped the Tough contribution: maximum 38.
- T120 approved the third draft without noticing the feat was no longer reflected in the hit points.
- The write committed. Only the report-stage validator (T048) caught it: "Because Tough was saved and increases hit point maximum by 2 per character level, the observed result should include 8 additional hit points at level 4 (maximum 46)". By then the sheet was already saved; the report merely described the discrepancy.
Trial 1 of the same battery granted the same feat and did apply the hit points (32 -> 46). Trial 2 granted no feat. Brim (Outlander, #413 run) got no feat.
Why it matters
A cross-domain fact (a feat with a numeric effect) can be authored by one specialist and silently not applied by the other, and the reviewer of the second domain does not re-check the first domain's declared facts against the numbers. The pre-write review is the last line before the atomic commit; the post-write report cannot undo it.
Possible directions (for later; not started)
- Numbers reviewer: require every declared feat/feature fact with a numeric effect to appear as an operand in the numbers proposal (rejection names the missing fact).
- Or a code-side assembly check that a granted feat with a known fixed HP formula is reflected in
maxHitPoints before commit (values compared, not prose).
Evidence: scratchpad capture-kira-3/T115.json, T119.json (3 records), T120.json, T048.json record 2; saved sheet game-kira-3/characters/scout_kira.json (session bdde1eb1).
Observed (Kira NPC level-up proof, trial 3, 2026-09-16, real OpenAI, headless)
Scout Kira (Rogue 3 -> 4, Outlander background) was saved with the Tough feat on her sheet and a maximum of 38 hit points. Tough adds 2 hit points per character level, so the saved maximum should have been 46. The sheet on disk is internally inconsistent.
How it got there:
Trial 1 of the same battery granted the same feat and did apply the hit points (32 -> 46). Trial 2 granted no feat. Brim (Outlander, #413 run) got no feat.
Why it matters
A cross-domain fact (a feat with a numeric effect) can be authored by one specialist and silently not applied by the other, and the reviewer of the second domain does not re-check the first domain's declared facts against the numbers. The pre-write review is the last line before the atomic commit; the post-write report cannot undo it.
Possible directions (for later; not started)
maxHitPointsbefore commit (values compared, not prose).Evidence: scratchpad
capture-kira-3/T115.json,T119.json(3 records),T120.json,T048.jsonrecord 2; saved sheetgame-kira-3/characters/scout_kira.json(session bdde1eb1).