- Runtime now boots directly against canonical
src/game/*andsrc/kernel/*modules; legacysrc/project/*andsrc/core/kernel/*facades were removed. - Dev-only LLM helpers now live under
tools/llm/*, and runtime/UI imports no longer depend on LLM modules. - Sim cleanup follow-up landed: foundation eligibility moved to
src/game/runtime/foundationEligibility.js, fog intel moved tosrc/game/viewmodel/fogIntel.js, and Lage-panel stat helpers moved tosrc/game/viewmodel/lageStats.js. - Reducer cleanup continued: phase gating moved into
src/game/sim/gates/phaseGates.js, and worker order parsing/patch builders moved intosrc/game/sim/commands/orderCommands.js. - Reducer cleanup continued again: grid and mask helpers moved into
src/game/sim/grid/index.js, and active order execution moved intosrc/game/runtime/processActiveOrderRuntime.jswith navigation insrc/game/runtime/orderNavigation.js. - Runtime/sim helper cleanup continued: shared alive/role/mask counters moved into
src/game/runtime/stateCounts.js, removing duplicate counting logic between reducer and win-conditions. - Runtime/sim helper cleanup continued again: infra candidate-mask hydration and committed-anchor checks moved into
src/game/runtime/infraRuntime.js, shrinking inline infra staging logic in the reducer. - Worldgen/MapSpec/presets cleanup landed behind stable facades:
src/game/sim/worldPresets.js,src/game/sim/mapspec.js, andsrc/game/sim/worldgen.jsnow re-export dedicated internal modules instead of owning the full implementations inline. - Sim-layer dedupe cleanup landed: duplicate founder 8-neighbor connectivity logic was consolidated into
src/game/sim/grid/index.jsand reused by both foundation eligibility and phase-gate checks. - Slice B MapSpec wiring is now active.
- Kernel input hardening now blocks non-serializable
SET_MAPSPECpayloads, rejects cyclic map inputs fail-closed, and keeps invalidSET_SIZEdimensions out of committed state. - Kernel manifest validation now fails closed when a
simGatemanifest is passed withoutdomainPatchGate, preventing contract-manifest miswiring on runtime store boot. - Product SoT was moved to the v1.1 RTS basis in
docs/PRODUCT.md. - Architecture SoT now states the dual rule: contracts and product docs stay truth, traceability stays derived.
- Action lifecycle metadata exists for every contract action.
SET_MAPSPECnow has reducer wiring and no longer behaves as a scaffold no-op.GEN_WORLDnow compiles frommap.specwhen MapSpec is active and syncs legacy preset runs into the same map snapshot.SET_MAPSPECandSET_MAP_TILEnow have active UI dispatch sources and dedicated dispatch-source regression guards.- Builder pipeline now keeps world mutation behind
GEN_WORLD;SET_MAPSPECandSET_MAP_TILEonly compile/sync map/meta state. - Slice C visual baseline upgraded to 0.9.0: Implemented minimal RTS layout. The top-bar is completely removed. A minimal sidebar (
ui.stats.js) exclusively displays necessary RTS statistics alongside the active canvas grid. - String extraction retained:
UI_STRINGSinui.constants.jscontinues to serve all feedback messages. - Module separation restored:
ui.input.js,ui.builder.js,ui.stats.jsandui.orders.jsform a clean layer. - Version bump to 0.9.0 finalized.
- Slice A contract scaffold test exists but is currently being migrated to enforce the DROP_LINE policy for Phase-0/PLACE_CORE removal.
- Slice B MapSpec test was added for deterministic compile + world boot.
- Longrun evidence budget now has explicit headroom at
300_000 ms. - Evidence runner now logs verification registry state as
registryStatus=instead of the ambiguousstatus=. - LLM-Gates verlangen ab jetzt vor jedem Commit aktualisierte Doku inklusive betroffener Stringmatrix-/Inventar-Dateien sowie eine explizite Endpruefung auf Gesamtaktualitaet.
- Slice-Versionierung ist ab jetzt strikt: jeder abgeschlossene Slice erhoeht die Version um
0.0.1; Teilstufena/b/c/dbleiben reine Dokument-Anhaenge. - Legacy compatibility code may remain in isolated facades, but it is no longer treated as a target runtime path.
- Dispatch contract hardening update (2026-03-24): premature UI rewires (
WORKER_HARVEST -> QUEUE_WORKER,ZONE_PAINT/SPLIT_PLACE -> PLACE_BUILDING) were rolled back to schema-valid actions (HARVEST_WORKER,SET_ZONE,PLACE_SPLIT_CLUSTER) to remove silent dispatch failures. - Deprecated
SET_BRUSHis no longer emitted by the builder dropdown; builder tool changes stay local in UI mode state. src/game/contracts/dataflow.jsdispatch sources now match live runtime paths (including builder actions), removed staleui.overlayentries, and trackISSUE_MOVEviasrc/game/ui/ui.orders.js.devtools/evidence-runner.mjsnow boots stores with the runtime manifest object (not module namespace), restoring fail-closed kernel compatibility in evidence runs.- Evidence registry inventory was synchronized for active tests
tests/test-legacy-zone-compat-routing.mjsandtests/test-whole-repo-dispatch-truth.mjs;npm run test:quickandnpm testnow pass withAUDIT_OK ... warnings=0.
src/game/contracts/manifest.jsexportsactionLifecyclealongside schema, matrix, gate and dataflow.src/game/runtime/index.jsis now the canonical reducer/sim-step entry instead ofsrc/project/project.logic.js.src/game/contracts/actionSchema.jsnow hardensSET_MAPSPECto an explicit JSON-safe field set instead ofallowUnknown.src/kernel/store/signature.js,src/kernel/store/createStore.js, andsrc/kernel/validation/validateState.jsnow fail closed on non-serializable or circular values instead of collapsing them tonull.src/game/manifest.jsnow binds gate validation throughruntimeManifest.domainPatchGate; module-namespace named gate exports are no longer the authority path.src/game/contracts/dataflow.jsexposes lifecycle metadata and planned writes per action.src/game/contracts/actionSchema.jsnow contains Slice A RTS scaffold actions plus the liveSET_MAP_TILEbuilder action.src/game/contracts/mutationMatrix.jsnow allowsGEN_WORLDto synchronizemapstate, grid dimensions, lineage ids, physics, and the world/sim payload.src/game/contracts/stateSchema.jsnow tracks the active migration slice asslice_b_mapspec.src/game/contracts/stateSchema.jsandsrc/game/contracts/simGate.jsstill carrypatternCatalogandpatternBonuses; removal remains open until Gameplay migration completes.src/game/contracts/simGate.jsallows future-safe world registries such ascores,buildings,workers,fighters,beltsandpowerLines.src/game/sim/mapspec.jsnow provides deterministicvalidate -> compilehelpers for Slice B.src/kernel/store/persistence.jsnow persistsmaptogether withmetain the default web driver while still strippingworldandsim.src/game/ui/ui.model.jsnow reads presentation labels fromsrc/game/viewmodel/advisorLabels.jsinstead of importing Dev-LLM modules.src/game/ui/ui.lage.jsno longer importssrc/game/sim/foundationEligibility.jsdirectly; the runtime boundary now owns that read selector.src/game/render/fogOfWar.jsnow contains render-only fog logic; advisor fog shaping moved intosrc/game/viewmodel/fogIntel.js.src/game/sim/reducer/index.jsnow re-exportsshouldAdvanceSimulationwhile consuming extracted gate and order command modules instead of defining them inline.src/game/sim/reducer/index.jsnow delegates active order execution throughsrc/game/runtime/processActiveOrderRuntime.jswhile keeping the runtime/public export surface stable.src/game/runtime/stateCounts.jsnow owns shared role/mask counting helpers used by bothsrc/game/sim/reducer/index.jsandsrc/game/sim/reducer/winConditions.js.src/game/runtime/infraRuntime.jsnow owns shared infra staging helpers used bysrc/game/sim/reducer/index.jsfor candidate-mask cloning and committed-anchor checks.src/game/sim/world/presetCatalog.js,src/game/sim/world/presetRuntime.js,src/game/sim/world/generationRuntime.js, andsrc/game/sim/mapspec/runtime.jsnow own the moved preset/worldgen/MapSpec logic while the old top-level sim paths remain stable facades.src/game/sim/grid/index.jsnow owns shared 8-neighbor founder connectivity checks used bysrc/game/runtime/foundationEligibility.jsandsrc/game/sim/gates/phaseGates.js.tests/test-active-order-runtime.mjsnow hardens blocked, wait, harvest-progress, and harvest-complete branches for the extracted active-order runtime.
docs/traceability/rebuild-preparation-inventory.mddocs/traceability/rebuild-string-matrix.md
Both files## Slice C Minimal UI Runtime (Minimal RTS Layout)
- UI runtime uses a modular structure:
ui.js,ui.input.js,ui.builder.js,ui.orders.js,ui.stats.js, andui.constants.js. - The interface is strictly divided into two areas: a minimal left sidebar for essential RTS metrics (
ui.stats.js) and the main interaction canvas. - Top bars, headers, and floating panels are completely removed.
- Interaction on the grid remains 100% canvas-based. All feedback strings are statically defined in
ui.constants.js(UI_STRINGS). names may exist before reducer wiring, but they must stay no-op safe until implemented.
- Continue Slice C by keeping the
PLACE_WORKERpath and evidence guards current as the slice closes out. - Expand Map Builder from current field/zone overrides to richer product tile semantics only after contract and worldgen support exists.
- Preserve the longrun headroom policy and runner wording when additional regression slots are added.
- Keep the hardening quick-suite current when future slices add new contract entry points or persistence surfaces.
todo.slice_b.dispatch_sources(done 2026-03-19) Erfuellt:SET_MAPSPECundSET_MAP_TILEhaben aktive UI-Dispatch-Quellen,dataflowist befuellt, Regressionstests vorhanden.todo.slice_b.builder_pipeline(done 2026-03-19) Erfuellt: Builder-Flow laeuft ueberMapSpec -> compile -> GEN_WORLD; direkte Weltmutation ist ausSET_MAPSPEC/SET_MAP_TILEentfernt.todo.slice_c.phase0_replacement(in progress) Done wenn die tote Phase-0/PLACE_CORE-Linie aus aktiven Tests, Devtools und SoT-/Traceability-Doku entfernt ist und nur noch als historische Migration referenziert wird.todo.truth.regression_wrapDone wenn nach jedem Slice der wrapped Regression-Run wiederevidence_matchliefert undoutput/current-truth.jsonauf denselben Slice zeigt.