map/archive/generated-history/STEP15_NOTES.md
2026-08-08 17:41:30 +09:00

6.6 KiB
Raw Blame History

Step 15 — residual cleanup and final verification

Scope

This step completes the cleanup work identified after Step 14. The goal is to remove dead/duplicated/compatibility-only code and avoid pointless transport repair work without changing the generator's intended map quality. The earlier Step 14 transport lifecycle remains conceptually intact: base transport -> pre-admin finalization -> post-admin transport -> output topology finalization.

Cleanup completed

Dead and compatibility-only code

  • Removed the remaining unused nearestNetworkPoint import.
  • Removed unused local bindings such as the old renderer history flag and unused satellite-classification return binding.
  • Removed test-only legacy name compatibility exports (NAME_PARTS, generateTemplateName).
  • Removed retired name-generation fallback debug fields.
  • Removed retired administration debug fields that were permanently zero after the older seed/snap pipeline was deleted.
  • Removed stale comments referring to the deleted patch candidate cache.
  • Reduced exports that were only used inside their own module.

Shared utilities / duplication

  • Centralized time measurement, world indexing, finite field access, nearest-point distance, and grid-path walking in mapUtils.js.
  • Centralized administrative border-field averaging in mapAdminShared.js.
  • Centralized transport path rasterization and occupancy connected-component labeling in mapTransportUtils.js.
  • Reused the shared raster/component utilities from mapTransport.js and mapOutput.js instead of keeping separate implementations.
  • Static audit now finds no unreachable runtime module, no unused runtime import/export/local top-level declaration, and no exact duplicate named function body among 773 scanned function bodies.

Pre-admin road connectivity

connectPreAdminRoadComponents() previously could repeat a failed topology state up to 4446 times. It now:

  • builds candidates only between different connected components,
  • reuses the influence field while the path topology is unchanged,
  • tries each candidate in the current topology state at most once,
  • stops a round immediately when no candidate succeeds,
  • rebuilds components only after an accepted connector changes topology.

Eight-seed probing shows failed attempts are now bounded to 02 in the common cases and no-success states stop after one round rather than 46 rounds.

Gap-stitch candidate work

The former gap-stitch pass enumerated tens of thousands of same-component near pairs only to discard them. Candidate indexing is now component-aware so same-component pairs are excluded before route construction.

Redundant road passes

  • Removed the effectively dead nationalPrune pass after national-road downgrade.
  • Made the final minor-road dedupe conditional on an actual connector having been added.
  • Removed obsolete constant transport debug fields associated with deleted passes.

Output road finalization

The output lifecycle now performs required additions before the final prune:

  1. municipal-center local access,
  2. required center stubs,
  3. nearby endpoint connectors,
  4. isolated-component pruning,
  5. final component measurement.

This removes the previous normal pattern of pruning first and then re-adding required roads. The final diagnostic is now finalOutputRoadTopology, measured after all output topology mutations.

Patch runtime regression found during cleanup

Static refactoring exposed one missed call site where createPatchContext() was still passed the deleted local worldIndex identifier. Normal map-generation tests did not execute that path. A real Expansion probe raised ReferenceError: worldIndex is not defined; the call site was corrected to the shared worldIndexOf helper. Expansion and rollback were rerun after the fix.

Verification

Runtime validation

STEP15_VALIDATION.mjs passes on the final source:

  • seeds 1 / 3 / 5: every municipal center has road access,
  • road-cell coverage remains above the regression floor,
  • pre-admin connectivity attempts are bounded and no-success rounds terminate,
  • Expansion succeeds with a clean seam,
  • footprint write escapes: 0,
  • unresolved road portals: 0,
  • unresolved rail portals: 0,
  • forced quality failure restores fields, source map, patch history state, serial, and source-map object identity.

Latest measured Expansion in this validation: 7.55 s in this container.

Eight-seed transport probe

Seeds 1, 3, 5, 101, 777, 999, 2026, 12345 retain 100% municipal-center road coverage. The former 4446 failed pre-admin connector retries are gone; observed attempts are 03 per seed.

Test shards

All eight test shards pass individually on the final source:

  • core: 0 failures, 17.46 s
  • terrain: 0 failures, 24.23 s
  • admin: 0 failures, 14.01 s
  • determinism-114514: 0 failures, 8.46 s
  • determinism-12345: 0 failures, 8.00 s
  • determinism-54321: 0 failures, 8.38 s
  • determinism-777: 0 failures, 7.80 s
  • determinism-999: 0 failures, 9.92 s

Total measured shard wall time when run as separate invocations: 98.26 s. Every shard is below three minutes.

The container tool used for this work applies a cumulative execution throttle/termination to long single tool invocations; consequently test-all.mjs could not be observed to finish as one monolithic invocation here even though each child suite completes independently. STEP15_TEST_RESULT.json records the authoritative per-shard verification rather than claiming a monolithic pass.

Static audit

Final runtime source:

  • runtime modules: 35
  • reachable runtime modules: 35 / 35
  • runtime source size: about 1.21 MB
  • unused imports found: 0
  • unused exported declarations found: 0
  • unused local top-level declarations found: 0
  • exact duplicate named function bodies found: 0 / 773 scanned
  • retired compatibility/debug symbols remaining: 0
  • all JS/MJS files pass node --check

Packaging

Two packages are produced:

  • map_step15.zip: clean development project with source, tests, Step 15 validation/report files, and patch.
  • map_step15_runtime.zip: runtime-only package containing index.html, styles.css, and the 35 reachable runtime JavaScript modules. Tests, validation scripts, patches, notes, and old Step artifacts are excluded.

Remaining caution

This cleanup deliberately avoids another redesign of the four lifecycle phases of the transport generator. Some output pruning may still legitimately remove isolated roads, and some isolated same-landmass municipal components may require terrain-aware connectors during final output. Those operations have functional purposes and were retained rather than treated as dead code.