RESIDUE_CLASSIFICATION_2026-07-27.md

pipelines/RESIDUE_CLASSIFICATION_2026-07-27.md

RESIDUE QUEUE — item-by-item classification (READ-ONLY audit, 2026-07-27)

Sources enumerated: C:/dev/humanity-forgotten/docs/PRE_5090_BUILD_PLAN.md ▶ PROGRESS LEDGER

entries 2026-07-26g … 2026-07-27b (the residue list is at lines 145-151, entry 26g), the full

residue batch restated at C:/dev/humanity-forgotten/docs/archive/SESSION_HANDOFF_2026-07-26_ACCOUNT_SWITCH.md

lines 36-71, and C:/dev/Humanity/Humanity/TODO_CANON.md flag/rider/placeholder sections

(lines 125-158, 690-733, 847-862, 1004-1053, 1104-1272).

Canon HEAD at audit time: da6b29c (ledger entry 2026-07-27c — one entry NEWER than the 27b

named in the brief; it lands docs/proposals/QA_WATCHING_PROGRAM.md).

Canon working tree is DIRTY by design — 5 modified files, all belonging to the in-flight

natural-voice lane (see item 22).

Verdict key: SEED = doctrine/flag exists, data or code does not · PARTIAL = some rows/columns/code

landed · BUILT = done, verified · STALE = superseded or already closed.

Tally: 15 SEED · 6 PARTIAL · 1 BUILT · 1 STALE (23 items).

---

Summary table

#ItemVerdictSizeEvidence (absolute paths)
1Ch-5 unlock_chapter_ref rowsSEEDMC:/dev/humanity-forgotten/registries/T0_Ability_Tree_Registry [ACTIVE v0.1]/Sheet1.csv
2Boss display_name (16 rows)PARTIALS+Ssame file col 46; C:/dev/Humanity/Humanity/Source/Humanity/Public/Data/BossEncounterRegistryRow.h
3Chapter-title game importPARTIALS.../registries/T0_Chapter_Index [ACTIVE v1.2]/T0_Chapter_Index DRAFT v1.1.csv; .../Public/Data/ChapterIndexRow.h:24
4DT_Clue game-import + per-clue trigger wiringPARTIALM.../Private/Discovery/HumanityClueSubsystem.cpp:48-106; .../Tools/registry_import_manifest.json
5Manggarai proverb cycle (S3)SEEDM.../Private/Combat/HumanityEncounterVolume.cpp:494-506; .../build/spine_rows/CH_03/boss.csv
6S2 crew rostersSEEDM.../registries/T0_Character_Index [ACTIVE v1.1]/…csv; C:/dev/Humanity/Humanity/TODO_CANON.md:1018-1025
7status_immunity roster columnSEEDS.../registries/T0_Creature_Roster [DRAFT v0.1]/Sheet1.csv (52 cols)
8presentation_tier_ref columnSEEDSdocs-only; .../docs/COMBAT_PROGRAM_ADDENDUM.md
9magnitude extension columnsSEEDM.../registries/T0_Ability_Tree_Registry [ACTIVE v0.1]/Sheet1.csv (34 cols)
10ability_class→composure routing (JOSH)SEED · UNFILEDS.../docs/spine/DECISIONS_PENDING_JOSH.md (absent)
11compang bbox split (JOSH)SEED · UNFILEDS+SC:/dev/humanity-forgotten/build/zones/flores_island.csv lines 6 & 8
12uluwatu terrace meshSEEDLC:/dev/Humanity/Humanity/TODO_CANON.md:1187-1192; .../Tools/sculpt/pads_bali.json:5
13§7 tier-bonus schemaSEEDLdoctrine _source/01_Tier_1_Foundation/T1_Combat_System_Spec…§12; no registry column
14§8 imprint schemaPARTIALL.../registries/T0_Rune_Registry [DRAFT v0.1]/Sheet1.csv RN_0018
15§9 loadout / spec schemaSEEDL.../registries/T0_Worldstate_Variables [ACTIVE v0.1]/Sheet1.csv WS_036
16§10 universal pools + sweeps harnessSEEDL+LC:/dev/humanity-forgotten/harness/gates_config.json
17§11 role tagsSEEDMno role_tag/build_role/combat_role in any registry
18§12 ally stat spreads + INT axisSEEDL.../registries/T0_Familiar_Registry [DRAFT v0.1]/Sheet1.csv (40 cols, 22 rows)
19BUG-0006/7/8 moot-check vs UMG HUDSTALESC:/dev/Humanity/Humanity/QA/bugs/BUG-000{6,7,8}.json; .../Private/UI/HumanityDebugHUD.cpp:523
20Guardian-station scene-lifetime bleedSEED · UNRECORDEDS-M.../Private/Combat/HumanityEncounterVolume.cpp:611-621; .../Private/QA/HumanityQACaptureSubsystem.cpp:951-955,1176
21psutil soak memory samplingPARTIALSC:/dev/Humanity/Humanity/Tools/run_soak.py:46-49,70-92
22Natural-voice pass targetsPARTIAL (in flight, uncommitted)S remainingC:/dev/humanity-forgotten/docs/spine/player_strings/CH_0{2,3,4,5}.csv
23Nightly soak cadenceBUILT (docs stale)Windows task HumanityNightlySoak; .../Tools/nightly_soak.cmd:6

---

Per-item detail

1. Ch-5 unlock_chapter_ref rows — SEED (M)

registries/T0_Ability_Tree_Registry [ACTIVE v0.1]/Sheet1.csv, 185 rows. Parsed distribution of

unlock_chapter_ref: Ch_02=4 · Ch_03=2 · Ch_04=5 · Ch_05=0 · Ch_06=4 · Ch_07=2 · Ch_10=1 ·

Ch_15=5 · Ch_16=1 · Ch_19=1 · Ch_21=1 · Ch_38=3 · Ch_46=1 · Ch_55=1 · Ch_65=1 · blank=153.

POSITIVE CONTROL: the identical column parse returns non-zero for Ch_06 (4) and Ch_15 (5) — the

zero at Ch_05 is real data, not a failed match. Matches TODO_CANON:1232-1235 ("an honest 0").

Work: author the Ch-5 unlock set grounded in CH_05's staged systems (Datu/Naga Padoha/Mahakala/

devaraja), critic-gate, fidelity re-emit, then Tools/import_all_registries.py.

2. Boss display_name (16 rows landed 26h) — PARTIAL (S canon + S game)

281 rows, 16 filled (BE_0002 · BE_0002_S1/S2 · BE_0003 + S1/S2/S3 · BE_0004 + S1/S2/S3 ·

BE_0005 + S1/S2/S3/S4 — exactly the Ch 2-5 slice).

rule "replacing a fresh critic under the budget constraint"; ledger 26h line 128-129 says "the

next session's critic pass may tighten". No critic artifact exists for it.

display_name member. POSITIVE CONTROL: the same file *does* carry defeat_protected at

line 54, so the header genuinely lags the CSV by ≥2 columns (hitzone_parts is also missing).

Consumer still hardcoded: Source/Humanity/Private/Core/HumanityBossCharacter.cpp:1165-1172

two literal names (BE_0002 → "Rangku Wera", BE_0003 → "Kaba Lomes") + the

"a hostile presence" fallback, with the TODO comment naming the column at :1167-1168.

natural-voice lane (see item 22) — so any critic pass should run on the NEW values, not the 26h ones.

3. Chapter-title game import — PARTIAL (S)

79/79 (CH_02 = "Ch 2 — Flores Island: Liang Bua Cave").

Content/Data/Registries/DT_ChapterIndex.uasset exists; the manifest entry is live in

Tools/registry_import_manifest.json.

own self-references — no .cpp reads the struct, and grep "->title|ChapterTitle" Source/**/*.cpp

= 0. POSITIVE CONTROL: the same grep style over BossEncounterRegistryRow finds real

consumers in HumanityBossCharacter.cpp. Also no hardcoded chapter title in the UI/quest code

(grep "Flores Island|Liang Bua|Chapter 2" over Private/UI/ + Private/Quest/ = 0).

docs/spine/player_strings/CH_NN.csv sidecars, whose README asserts "consumer: the W10 UI wave

reads it at import" — it does not. Decide which of the two is the shipping title before wiring.

4. DT_Clue game-import + per-clue trigger wiring — PARTIAL (M)

player-surface firewall documented on player_text); UHumanityClueSubsystem loads

/Game/Data/Registries/DT_Clue.DT_Clue at HumanityClueSubsystem.cpp:50, with a greybox seed

fallback at :102-106 and a test seam (LoadFromTable).

39 registries + 7 spine tables: Beat/Site/Fork/ForkOption/SceneAnchor/SideQuestBeat/BossPhase —

clues is not among them), and no DT_Clue.uasset exists under Content/Data/.

POSITIVE CONTROL: the same find Content/Data -iname "*Clue*" pattern style finds

DT_BossEncounter.uasset / DT_ChapterIndex.uasset, so Content is searchable.

C:/dev/humanity-forgotten/build/spine_rows/*/clues.csv carries **10 player_text rows total —

every one of them CH_02.** CH_03/CH_04/CH_05 clues.csv are header-only (verified by cat:

chapter_id,clue_id,chain,source_kind,beat_scope,trigger_context,player_text,status,src and

nothing else). So the import would land 10 rows for one chapter.

the HUD's clue-staged objective layer is a TODO at

Source/Humanity/Private/UI/HumanityPlayerHUDWidget.cpp:413.

5. Manggarai proverb cycle (S3) — SEED (M)

struct FProverbWave { Twist; Choices[3]; Correct; } with GProverbWaves[] = 3 hard-coded

waves; the DECODE/EXPOSE loop is real (:511-605) and test-covered

(Humanity.W9.DecodeExposeMechanic).

("the Twisted-Word Sorcerer's proverb-constructs, Tombo Holes (DECODE/EXPOSE, 20/50/30 …)") but

carries zero proverb lines. No proverb registry, no untwisted-register lines for Elder Bernardus.

POSITIVE CONTROL: grep -c Bernardus on T0_Character_Index [ACTIVE v1.1]/…csv = 1

(CHAR_0016 exists), so the character is real — only his lines are missing.

sourcing + a care-register pass (living culture, §17.1) + localized string-table copy.

6. S2 crew rosters — SEED (M)

= 0. POSITIVE CONTROL: grep -c "Bernardus" on the SAME file = 1. So the search method

works; Poka Puar (the BE_0003_S2 scout-captain) genuinely has no character row.

prose — no conscript roster rows anywhere.

placeholder; MarkingLineNodes=3 and ConscriptCount=2 are illustrative

(TODO_CANON:1018-1025, restated at :847-852 as "STILL OPEN").

7. status_immunity roster column — SEED (S)

grep -ril "status_immunity" registries/0 files. POSITIVE CONTROL: the identical

invocation grep -ril "defeat_protected" registries/T0_Boss_Encounter_Registry [DRAFT v0.1]/Sheet1.csv.

T0_Creature_Roster [DRAFT v0.1]/Sheet1.csv header (52 columns, read in full) has no immunity field.

Game greybox: IsCreatureImmuneTo hardcodes CR_0001 (Komodo) immune to its own septic/poison

(TODO_CANON:1252-1254).

8. presentation_tier_ref column — SEED (S)

Ripgrep over the whole canon repo finds presentation_tier_ref in exactly 3 files, all docs:

docs/PRE_5090_BUILD_PLAN.md, docs/archive/SESSION_HANDOFF_2026-07-26_ACCOUNT_SWITCH.md,

docs/COMBAT_PROGRAM_ADDENDUM.md. Zero registries. Game synthesizes the key as

"<element>_T<tier>" (TODO_CANON:1268-1272). This is the DR-2 asset-contract key, so it should land

BEFORE the 5090 asset freeze.

9. Magnitude extension columns — SEED (M)

T0_Ability_Tree_Registry header (34 columns) carries only bucket/class fields —

tier_numerical, tier_name, vril_cost_class, resource_cost, mastery_point_cost,

cooldown_class. No magnitude, damage, cooldown-seconds, or animation/VFX/GameplayCue FK column.

POSITIVE CONTROL: the same header scan finds cast_pattern (col 24), which the foundry does

consume — so the header parse is live. Long-standing: this is real-kit FLAG #3/#4

(TODO_CANON:147-151), re-raised by the foundry at :1240-1242.

10. ability_class → composure routing (JOSH call) — SEED, and UNFILED (S)

combat/combat_control/mobility → Direct; defensive → VrilManagement; stealth → Stealth;

social → Character (TODO_CANON:1236-1239). No canon column specifies it.

8 hits, all the historical R4/R8 composure-node rulings (lines 718-766) — none is this question;

grep -n ability_class on that file = 0 (it matches only docs/PRE_5090_BUILD_PLAN.md:171).

POSITIVE CONTROL: grep -c -i mythic on the same decisions file = 10 (D-MYTHIC-GATE is

live there), so the file is searchable and the absence is real.

recommendation), not the bare ledger line it has today.

11. Compang bbox split (JOSH call) — SEED, and UNFILED (S canon + S re-derive)

line 6 (manggarai_village_edge) and line 8 (compang_lingko_fields) carry byte-identical

zone_bounds_wgs84 = w=120.36445;s=-8.59321;e=120.38445;n=-8.57321. Mirrored at

_source/02_Tier_2_Region_Pages/flores_island.md:54. So every bbox-resolving tool lands the

compang anchor on the shared manggarai post, ~500 m off the real lingko fan.

region_bbox w 120.26417 / s -8.895 / e 121.83667 / n -8.51061 wholly contains it.

Side finding: that params file lists only 4 geo_anchored_zones and is dated 2026-07-23 while

the catalog now carries 10 rows (2026-07-25) — compang never contributed to the derived tile bounds.

COMPANG_MOVE_OFFSET_CM = (50000.0, 0.0) (+500 m E), applied identically at

Tools/audit_encounter_spaces.py:52-53 and Tools/sculpt/pads_flores.json:78-84; symptom recorded

at QA/SPACE_AUDIT_FLORES.md:112; named as an open rider in game commit 9872544.

12. Uluwatu terrace mesh — SEED (L if built; S if ruled deferred)

Design flag only: C:/dev/Humanity/Humanity/TODO_CANON.md:1187-1192 — the one Bali SEVERE footprint

is an INTENTIONAL seacliff; a heightmap cut-and-fill measurably WORSENS the cliff-edge max

(49° → 52°), so it wants "a built-out temple-terrace MESH prop … NOT a landscape flatten".

Tools/sculpt/pads_bali.json:5 is intentionally empty with that note in _note.

Staged today as a marker only (Tools/stage_bali_ch04.py:85; capture shot

Tools/qa/capture_script_bali.json:28-30; audit QA/SPACE_AUDIT_BALI.md:26 = SEVERE 22.3/49.0°).

No asset: find Content -iname "*uluwatu*" -o -iname "*terrace*" -o -iname "*seacliff*" = 0.

POSITIVE CONTROL: find Content -name "*.uasset" = 309 files, so Content is populated and

the search reaches it. This is a DR-2 / 5090 asset-pass item, and not in DECISIONS_PENDING_JOSH.

13. §7 tier-bonus schema — SEED (L)

Doctrine landed today at canon b8dc09e (T1_Combat_System_Spec §12 bonus lanes). Data home: none.

grep -ril "bonus" registries/0 files (positive control: defeat_protected → Boss_Encounter).

A token scan of all 41 registry headers for bonus|pool|spread|apex yields exactly one hit —

trait_halo_pool in T0_Creature_Roster (creature temperament, a false friend).

Nearest scaffolding without payload: T0_Ability_Tree_Registry tier_numerical/tier_name/

mastery_point_cost; T0_Trade_Registry twelve_tier_quest_gates (quest IDs only, e.g.

gate_1_neophyte:Q_TR1_NEO … gate_12_magus:Q_TR1_MGS); T0_School_Registry.tier_role (free prose);

T0_Weapon_Registry (18 cols) has no tier column at all. Neither the incremental lane

(cast-time / pierce / superiority / crit) nor the transformative quest-gate lane exists in data.

14. §8 imprint schema — PARTIAL (L)

The only residue item with real rows.

`rune_id, rune_name, rune_lane, consumption_model, operator_family, operator_token, rarity_class,

element_affinity, physical_transition, trade_source, mastery_tier_gate, acquisition_source,

acquisition_chapter_ref, rng_drop_ref, reroll_model, care_firewall_flag, effect_summary, source_ref`.

rarity_class=none, reroll_model=cheap-rising-lockable-floor, mastery_tier_gate=tier-6,

acquisition_source=crafted-and-bounded-drop.

1/2/3/4 for Common/Rare/Epic/Legendary; re-roll a cheap deterministic cost rising per consecutive

re-roll with a hard lockable-affix floor after ~5"). No imprint_*, roll_*, or affix_* column.

anywhere in registries (the §10 apex has no data representation).

(base_rate_mean, sigma_floor_rolls, sigma_ceiling_rolls, mastery_tier_gate, …) and **ZERO data

rows**; RN_0018's rng_drop_ref is blank.

15. §9 loadout / spec schema — SEED (L)

worn_rune_loadout**, type=object, domain "combat-spellcraft runtime state", note

"WS7 systems-wiring anchor (DRAFT)" — an untyped placeholder (contrast WS_027/WS_041, which

carry full field lists). It IS live at runtime: build/spine_rows/CH_15/beats.csv writes

ws.worn_rune_loadout=crown_device_force_bound. So the key exists, the schema does not.

regen-per-sec / HoT / personal-vs-AoE (header token scan, all 41 CSVs).

(25 cols, 42 rows) site_class enum = ceremony_anchor · dimensional_threshold · megalith · obelisk ·

orb · pyramid · site_reservoir · songline_path · tomb · underground_facility · vimana_facility ·

vortex_anchor · waterfall. grep -ic "sanctum\|loadout" on that file = 0.

16. §10 universal pools + build-space sweeps harness — SEED (L schema + L harness)

one column, trait_halo_pool (creature ecology) — unrelated.

→ 5 files, all false positives: check_ws_value_form.py (a ws.* value-form corpus sweep),

scan_migration_integrity.py ("0.F sweep"), condition_expr.py ("unbalanced parens"),

check_grand_sage_silence.py (literal-substring sweep), rag/triage_floor.py. No build_space

token exists in any .py.

layer_register, no_dead_end, …) has no balance/pick-rate gate — the AAAAA "a never-picked pool

option is a balance defect" rule currently has zero teeth, which is exactly the class of

doctrine this repo normally arms.

mythic-monster encounter, MYTHIC_MALEVOLENT_BEING_FOUGHT_NON_VELHEIM, book titles).

17. §11 role tags — SEED (M)

grep -riEl "role_tag|build_role|combat_role" registries/0 files.

POSITIVE CONTROL: identical invocation with defeat_protected → matches Boss_Encounter;

second control with rarity_class → matches Flora, Mineral, Rune registries.

Every existing role-named column is narrative or ecological, not a player build axis:

T0_Character_Index.role (persona descriptors, e.g. abhayagiri_monk_heterodox_mahayana_…),

T0_Creature_Roster.trophic_role, T0_School_Registry.tier_role.

T0_Boss_Encounter_Registry carries encounter shape (`boss_kind, primary_verb, secondary_verb,

axis_split, defender_element), never a player-role axis. T0_Familiar_Registry` has no role column.

18. §12 ally stat spreads + INT axis — SEED (L)

canonical familiar slots). No str/int/agi, no stat_spread, no ai_intelligence, no

specialty, no combat_style. abilities_granted is BLANK on all 22 rows. The one

"intelligence" hit in the file is prose ("Rotational Flying familiar, intelligence/trickster type").

loyalty_belief_axis, loyalty_departure_threshold, attackability_tier` — a bond ledger, no stats.

a 110-row bond_abilities child table). None of §§7-12 is registered even as a deferred extension

— i.e. the doctrine landed in tier docs with no corresponding entry on the extension rail.

19. BUG-0006 / 0007 / 0008 moot-check vs the UMG HUD — STALE (S, records hygiene)

All three exist and all three still read status: open, but the defects are moot on the player path:

(HumanityDebugHUD.cpp:556, :677).

(:686, :934).

d_local decays live (:681, :686).

and :523 early-returns when it is 0 — every cited line sits after that return; the file comment

at :66-69 states the overlay is retired on the player path.

Source/Humanity/Private/UI/HumanityPlayerHUDWidget.cpp = 0. POSITIVE CONTROL: the same

grep on the same file matches Composure at 42/206/508/521 — the widget has a boss Composure bar

but no lever/tension column at all.

regenerator (a records edit, not engineering).

20. Guardian-station scene-lifetime bleed — SEED, and UNRECORDED (S-M)

This item appears in the handoff (line 69-70) but exists nowhere in either repo's trackers:

matches real teardown work — BUG-0009.json:3 (teardown hang), BUG-0011.json:3 (leaked

standalone GameInstance).

(e.g. :1146 soak in-process leak, :1015 offscope-boss leak tooth) but nothing about a guardian

or part-break actor outliving its scene.

POSITIVE CONTROL: grep -rniE "scene sub.?system" over the same set hits TODO_CANON:748 and

QA/bugs/INDEX.md:26.

Source/Humanity/Private/Combat/HumanityEncounterVolume.cpp:611-621 resets transient meters only —

explicitly "never bSpawned / bGuardiansWithdrawn / the enemy roster / any world state";

Source/Humanity/Private/QA/HumanityQACaptureSubsystem.cpp:951-955 mirrors it, and

FrameGuardianVolume (:1176) spawns idempotently and never destroys the serpents.

AHumanityEncounterVolume has no EndPlay overridePOSITIVE CONTROL:

grep -rn "EndPlay" --include=*.cpp Source returns exactly one site,

Source/Humanity/Private/World/HumanityVrilRechargeZone.cpp:79.

(bug record + regression test), then add the teardown hook.

21. psutil soak memory sampling — PARTIAL (S)

:70-92 walks p.memory_info().rss across the process + p.children(recursive=True) on a 3.0 s

poll; consumed at :137, :151, :155; growth delta at :164-167, :204.

artifact Saved/QA/Soak/soak_2026-07-26_053721.md:5 reads "psutil memory sampling: OFF

(psutil not installed -- memory n/a)" (emitted by run_soak.py:181).

pyproject.toml / setup.py / Pipfile / environment.yml. POSITIVE CONTROL: the identical find

for run_soak.py returns ./Tools/run_soak.py, and grep -rln "DEFAULT_BELT" --include=*.py .

returns the same file. The dep is simply undeclared.

22. Natural-voice pass targets — PARTIAL, IN FLIGHT AND UNCOMMITTED (S remaining)

The rewrite is not pending — it is 93 % authored in the working tree right now, unstaged by

design. Canon HEAD da6b29c's own commit message states: "the natural-voice lane's in-flight sidecar

edits are deliberately NOT staged."

The string sidecars are at C:/dev/humanity-forgotten/docs/spine/player_strings/CH_NN.csv

(columns kind,key,player_text; merged into build/spine_rows/ by harness/extract_spine_rows.py;

contract in that folder's README.md).

Real counts for the slice:

Chapterchapter titlebeat objectivesfork optionssite namestotal authoredrewritten in tree
CH_02110351919 / 19
CH_03112472421 / 24
CH_04112472424 / 24
CH_05112792929 / 29
Total44618289693 / 96

Plus:

(e.g. the hunterthe one who tracks me; the bound serpentNaga Padoha, the earth-shaker;

the court officialthe one who keeps the water back).

TOTAL natural-voice surface for the Ch 2-5 slice = 96 + 16 + 10 = 122 strings, of which

104 are already rewritten and uncommitted.

Remaining work is downstream, not authoring: (a) the 3 unchanged CH_03 rows,

(b) re-run the mergebuild/spine_rows/CH_02/beats.csv still carries the OLD text

("Wake in the dark of the cave. Get to your feet and climb toward the daylight.") while the sidecar

now reads "It bit me and ran, and from the crack in the rock I watched it stop moving…", so

harness/extract_spine_rows.py has not been re-run, (c) the reveal/natural-voice critic pass,

(d) fidelity re-emit + gates + commit, (e) game re-import (DT_Beat/DT_Site/DT_ForkOption).

23. Nightly soak cadence — BUILT (the docs are stale)

Handoff item 3 and TODO_CANON.md:1148-1150 both say nightly scheduling "is the director's" and a

task "*should*" be created. It already exists: Windows scheduled task HumanityNightlySoak,

State Ready, daily trigger StartBoundary 2026-07-27T04:00:00, action

C:\dev\Humanity\Humanity\Tools\nightly_soak.cmd (which runs the explicit 7-map belt at :6),

NextRunTime 7/27/2026 4:00 AM, LastTaskResult 267011 (0x41303 = has not yet run). Armed by game

commit 0e69c4e. POSITIVE CONTROL / method note: schtasks /query under Git Bash returned

0 tasks (a FALSE ZERO — Git Bash mangles /query into a path); PowerShell Get-ScheduledTask

returned 204 tasks and found it. Worth remembering as a false-zero class.

Note it will run with memory sampling OFF until item 21 is closed.

---

Cross-cutting findings

1. None of the 23 residue items is registered in C:/dev/humanity-forgotten/docs/DESIGN_GAP_REGISTER.md

(295 lines). Greps for compang / uluwatu / status_immunity / presentation_tier / display_name /

DT_Clue all return 0 there. POSITIVE CONTROL: grep -ic gap on that file = 24, so the file is

real and searchable. The residue lives only in the ledger + TODO_CANON + the handoff — a wiring gap

against the standing anti-orphan rule.

2. Three items tagged "a JOSH call" have no decision brief. ability_class→composure routing,

the compang bbox split, and the uluwatu terrace mesh are all absent from

docs/spine/DECISIONS_PENDING_JOSH.md (positive control: D-MYTHIC-GATE / mythic = 10 hits).

The standing protocol requires a full brief with alternatives + recommendation, never a bare line.

3. The §§7-12 doctrine landed with zero extension-rail registration. Canon commit b8dc09e

touched only 4 .md tier docs + baselines/scorecards — no registry CSV, no harness logic, and

docs/registry_extensions.json _deferred names only familiar-bond-ladder.

4. The game's row structs lag the canon CSVs. BossEncounterRegistryRow.h is missing both

display_name and hitzone_parts, which are live columns in the CSV. Any residue that adds a

column also needs Tools/gen_row_struct.py + Tools/import_all_registries.py, so batching the

column work (items 2, 7, 8, 9) into one reimport is the efficient shape.

Generated by harness/site/structure_site.py — the URL path is the repo path. review root