- add data-state/test/saveablesRoundTrip.test.ts: public CoreState.saveState/loadState over 5 saveables x 3 compressions, codes 112/113/177/178
- append 06-09 section to 06-COVERAGE-MAP.md (11 codes, create-or-append)
- register #06-09-1..5 suspected defects and the pre-existing test:ci blocker in 06-TEST-FINDINGS.md
- cover setPos/setFaceDir/setMoveDir/jump/stepFace/forward/backward/speed/face/animDir/push/clear/start
- add controller stop and start-while-moving contract checks with real timers and await onEnd
- mark the multi-step backward case as skipped suspected bug #06-08-1
- mover.test.ts: successful step and layer reindex, cumulative/diagonal movement, warn 126 on an unexpected move code, lifecycle hook order, concurrent start rejection, initial face direction
- registry/attribute defaults incl. error 53 for non-serializable values
- prefab add/get/create/delete/change and reuse mapping reads
- modifyPrefabAttribute callback and index rebuild
- comparer lifecycle: warn 117 on repeat compareWith, warn 118 without comparer
- skip #06-03-1 (createEnemy does not resolve reuse mapping) per D-05
- enemy.test.ts: attribute get/set/add independence and cloneAttributes deep copy
- special.test.ts: CommonSerializableSpecial value/name/description and NonePropertySpecial units
- fixtures inline, legacy and save/load excluded per D-30/D-32
- add a normal case for GuardAuraConverter.convert (code 26 -> GuardAura)
- assert GuardAura priority/couldApplyBase/couldApplySpecial/range/applySpecial
- keeps D-30 per-public-method coverage symmetric with CommonAura
- add D-26 attribute-to-damage linkage and getCalculator coverage in damage.test.ts
- cover markEnemyDirty refresh and unregistered delete in mapDamage.test.ts
- cover off-map handler and standalone computed enemy in combat.test.ts
- register suspected buildup compounding bug as #06-01-4 it.skip with a findings entry
- complete the 06-COVERAGE-MAP.md code rows for 106/107/102/103/104/138/139/140/141
- cover full buildup aura conversion and one/two-layer nested auras
- assert four-stage order specials -> base -> query -> final with forward-only visibility
- cover local requestRefresh, needTotallyRefresh full fallback, and warn codes 97/98/99/100/101/110
- fill the 06-COVERAGE-MAP.md rows for the stage 2 warning codes
- Zone/Repulse/Laser/Between/Ambush views: range params, damage info, guards
- MainMapDamageConverter: per-special view order and laser face lookup
- MainMapDamageReducer: sum, max-damage type and catch/repulse union
- MainDamageCalculator: base, defeat, all special branches, guard recursion/warn 137, negative-damage flag, critical limit
- MainEnemyFinalEffect: solid/mimic/unchanged branches and priority
- MainEnemyComparer: base attributes, special count/code/value deep equality
- add combat.test.ts for same-state binding, foreign-state warn 138, script priority sort and duplicate warn 140, guard warns 139/141, awaited script/hook ordering with real timers, and battleComputed delegation
- extend the 06-TEST-FINDINGS.md sink with the #06-01-3 before-return semantics row
- add mapDamage.test.ts for sourceless add/delete, sourced conversion, reduction caching, warns 102/103/104 and the #06-01-2 deleteEnemy finding
- add context.test.ts for the enemy registry (register/lookup/unknown-null/delete/resize/scan) and effect-registry add/remove behavior
- extend the 06-TEST-FINDINGS.md sink with the #06-01-2 row
- add damage.test.ts covering DamageContext/DamageSystem results, handler identity, warns 106/107, cache invalidation, with(hero) and calculateCritical
- declare api-coverage in COVERAGE.md for the test-only phase
- open the shared 06-TEST-FINDINGS.md sink with schema and #06-01-1 finding
- rewrite every built-in as EventXxx implements BuiltInFunction<P, E>
(setBlock/moveBlock/deleteBlock/moveHero/moveHeroStep/touchFront/
insertEvents/insertEvent), matching the EventSetBlock reference style
- move shared helpers to event/utils.ts (getPossibleMap, getPossibleLayer,
getEventExecutor, enter/exitEventInsert); utils is not exported via index
- move per-class helpers into private methods (EventTouchFront and
EventInsertEvents collectInvocations)
- use IObjectMover.push for move sequences instead of manual step calls
- registrations.ts: one createEventRegistrations() writing the eight entries
in order, categories separated by single-line comments
- remove EventBuiltinName; classes own short string names
- update event tests; core.ts uses createEventRegistrations
- rename all anon-tokyo imports to @motajs/anon-tokyo in data-common,
data-system and data-state
- declare @motajs/anon-tokyo workspace dependency in data-common and
data-system; refresh pnpm-lock.yaml
- ReplayUseItemCommand / ReplayEquipCommand / ReplayUnequipCommand now extend
BaseReplayCommand with fixed numeric params and per-false-position logger
error codes (2006-2010); string item/slot params removed, autoUnload is a
required bool.
- remove isNumber/isItem/isBoolean/isSlot/resolveSlot helpers; all logic now
lives in the command classes.
- drop createReplayCommandItems/registerReplayCommandItems; CoreState owns a
private registerReplayCommand() registering the eight stable codes directly.
- prune unused replay boundary types from replay/types.ts.
- fix ReplaySandbox: a replay ending on a run of moves now finalizes the
trailing run through notExecuted (previously the last move never started).
- rewrite commands.test.ts for the base-class design and direct registration.
Verified: data type gate 0 in-scope; vitest 19 files / 112 tests pass; prettier
and eslint clean on touched files.
- BaseReplayCommand with name/paramTypes and assertParameter guard
- add optional IReplayCommand.notExecuted for trailing-step finalization
- sandbox invokes previous command notExecuted when the next command differs
- rewrite ReplayMoveCommand (batched step + notExecuted start/await) and ReplayTeleportCommand
- add replay logger error codes 2001-2005 and warn 175
NOTE: command tests still reference the pre-rewrite class names; updated in follow-up.
- Convert map, hero, event, and registration-assembly function JSDoc
into multiline form for every touched declaration
- Preserve export-only barrels, class-owned registration order, direct
Statement[] insertion, hero front-touch ownership, and Chinese event
test comments
- Convert replay command, helper, and registry JSDoc into multiline form
- Add declaration-aware script/check-touched-jsdoc.ts scanner that
inventories constructors as explicit exemptions and fails any other
touched top-level function or class method without multiline JSDoc
- Assert the real eight-entry class registry, fresh per-group instances,
and the three-map/three-hero/two-control ownership split
- Prove every class owns its stable name and function, classes originate
from their owning modules, and hero owns the front-touch registration
- Verify both event barrels stay export-only while prior public event
symbols remain reachable from the data-state root index
- Add event/registrations.ts as the sole direct-construction assembler for
the eight class-based registrations in stable map/hero/control order
- Reduce event/index.ts and data-state/src/index.ts to export-only barrels
that re-export the four public registration creators
- Point CoreState at event/registrations and record the ownership and
public-export boundaries in the event contract
- Replace generic per-invocation registration factories with explicit
SetBlock/MoveBlock/DeleteBlock, MoveHero/MoveHeroStep/TouchFront, and
InsertEvents/InsertEvent registration classes
- Move eventTouchFront, invocation collection, and target resolution into
the hero event layer while keeping awaited OnTouch behavior
- Keep map and control modules limited to their own registration ownership