Update 2.60
6/9/2026
v2.60.0BETA
Seymour
Reusable read-only Atlas evidence badges, applied to the Monster AI Editor
- First layer of
HANDOFF_ATLAS_READONLY_MODULE_BADGES: a reusable evidence-badge component that shows, per entry, where the data came from and how far it can be trusted — with no writer, no apply, no SIN. NewModules/Common/AtlasEvidenceBadgeStrip.axaml(.cs)(drop-in UserControl with anEvidenceproperty) +Modules/Common/AtlasEvidenceBadge.cs(AtlasEvidenceBadgecolored by severity +AtlasEvidenceInfocarrying badges/origin/"where it appears", factoriesForBibleEntry/ForDetail). Key decision (after the adversarial review): ONE engine —AiBibleEvidencewas parameterized intoDerive(...)and the strip reuses the entry's canonical badges viaentry.EvidenceBadges, so the Monster AI inline strip and the full BIBLE window can never disagree;IDAstays a separate structural badge and never collapses into a greenproved(a bug the review caught and fixed). Added the mission'spartialtoken. The "where it appears in game" text becameAiBibleWhereAppears(one DRY source shared by BIBLE and the modules). Applied to theMonster AI Editorinline BIBLE panel: badges + origin + a "where it appears" expander for the selected entry; the existing 📖 Abrir guia completo button opens the focused BIBLE. No runtime, SIN, save-path, orSpiraDataAtlasCatalogprovider changes. Build 0 errors / 361 warnings;--spiraatlas-rt0and--aicmdmeta-rt0PASS;AiScriptLab --ai2PASS (validator clean 346/346)
v2.59.0
v2.60.1BETA
Seymour
Atlas evidence badges in the Sphere Grid Explorer (second read-only application)
- The
v2.60.0badge infra got its second home: selecting a node in theSphere Grid Explorernow shows the node's evidence badges (parser-corpus+RT0+read-only), origin, and "where it appears", viaAtlasEvidenceInfo.ForDetail+<common:AtlasEvidenceBadgeStrip>. A tiny read-only accessorSpiraDataAtlasCatalog.TryGetSphereGridNode(layout, nodeIndex)(mirrorsTryGetMonsterDetail) mapsSourceKind(Original/Standard/Expert →OSG/SSG/ESG) + node index toatlas:sphere-grid-node:{layout}:{index}— the exact id the catalog builds, so the node resolves; on any miss the strip hides itself (no false badge). Crosslink honesty (guardrail re-stressed by Halyson): of the 4 requested modules, only Sphere Grid has a stable crosslink.Treasure(opaquesourceKey, not reverse-derivable from the buki_get index),Shop(the atlas key is bank+slot anditem_operand_hexis empty for items; mapping by operand would be a category error), andMix(no Mix detail kind exists in the atlas) were intentionally left out — forcing a badge there would break the "no stable crosslink → hide" guardrail. No writer, SIN, runtime, or badge-engine changes. Build 0 errors / 361 warnings;--spiraatlas-rt0PASS (2493 sphere-grid nodes) and--aicmdmeta-rt0PASS. Adversarially verified: 0 defects
v2.60.0
v2.60.2BETA
Seymour
Atlas evidence badge in the Treasure Editor (gear chests) + honest correction of the Treasure crosslink
- The
HANDOFF_ATLAS_RIKKU_TREASURE_SHOP_MIX_CROSSLINK_SCOUTscout reopened thev2.60.1"Treasure has no stable key" claim and proved the opposite for gear chests: thetreasure-buki-getcrosslinksource_keyis NOT opaque — it istreasure:0x{index:X4}, reconstructible straight from the editor's row index. Byte-grounded check: the crosslink's(treasure_index, buki_get_id)≡takara.bin's(logical_index, type)across all 82 Kind=0x05 rows, 0 mismatches. New read-only accessorSpiraDataAtlasCatalog.TryGetTreasureGear(treasureIndex, expectedBukiGetRow)resolvesatlas:gear:treasure-0x{index}with a value-guard: since Treasure is an editable module, the badge only shows while the chest's currentbuki_getstill matches the corpus — repointing it or changing the Kind hides the strip (no stale badge). Wired into theTreasureEditor"Gear Pickup / buki_get" card viaAtlasEvidenceInfo.ForDetail+<common:AtlasEvidenceBadgeStrip>(badgesparser-corpus+RT0+read-only, neverproved). Shop stayspartial(the positional0x{bank}:slot:{n}key IS stable and reconstructible, but item-shop only carriesdisplay_textand gear-shop carries no per-slot index, so there is no clean value-guard on an editable module → UI deferred to avoid a false positive). Mix staysblocked(no Mix detail kind exists in the atlas; adding one would invent an anchor). BukiGet = redundant/1:many (already self-references takara). The--spiraatlas-rt0gate gained 3 durable asserts (positive lookup + value-guard + non-gear miss), all PASS. No writer, SIN, runtime, orCommonbadge-engine changes. Build 0 errors / 361 warnings;--spiraatlas-rt0,--aicmdmeta-rt0, and--treasure-rt0PASS. Doc:docs/ai/ATLAS_RIKKU_TREASURE_SHOP_MIX_CROSSLINK_SCOUT_RESULT_2026-06-09.md
v2.60.1