ReviewOS

stacks/the-settlers-iii-remake

[S3-037] Implement finite deposits, surveying, and terrain changes

#39
Closed chris opened this 10 days ago ·
10 days ago

S3-037: Implement finite deposits, surveying, and terrain changes

Parent and ownership

Parent epic: https://github.com/stacksjs/the-settlers-iii-remake/issues/7 Source owner: stacksjs/the-settlers-iii-remake. Master roadmap: https://github.com/stacksjs/the-settlers-iii-remake/issues/4.

Problem and observable result

Exhaust actual resource deposits. Discover minerals through surveying. Update world navigation after clearing or growth.

The current application is a browser prototype. Passing the Riverlands campaign does not establish original-game or native parity. This issue is complete only when its stated behavior has retained evidence.

Evidence and interfaces

Ordered commands advance an integer-tick world. Goods have locations and reservations, people have identities and jobs, and a player view renders only actual simulation state.

Pin the inspected revisions and fixture hashes in the implementation evidence. Original-game observations govern rules and timing. JSettlers is implementation evidence, not an authoritative balance specification. Unknown values remain explicitly unverified.

Acceptance criteria

  • Exhaust actual resource deposits.
  • Discover minerals through surveying.
  • Update world navigation after clearing or growth.
  • The visible result agrees with the underlying simulation or platform state, including failure paths.
  • Tests exercise the maintained public interface and retain reproducible fixtures or execution receipts.

Test matrix

  • Extract the last resource.
  • Survey and modify terrain during routing.
  • Exercise invalid input, cancellation or interruption, and repeated execution where this interface permits them.
  • Verify determinism/conservation for simulation changes and resource ownership/disposal for platform changes.
  • Run owning-repository lint, relevant type checks and tests. Capture actual native output for native capability claims.

Scope constraints

Implement this behavior as a complete verifiable slice. Do not silently expand into adjacent tickets or substitute simplified gameplay. Keep the shared TypeScript simulation, shared stx signals, and ts-css conventions. Native gameplay and HUD must not depend on a WebView. HomeOS reuse must not introduce a kernel dependency into the game. Existing unrelated edits and authored guidance must be preserved.

Blocked by

Upstream release and adoption

Application behavior belongs here. If a reproduction identifies a framework defect, repair and release its owning source first, update Stacks where affected, then install the verified packages here.

No node_modules edits, copied runtimes, generated-source string patches, fabricated globals, successful no-op implementations, or skipped release gates. Push tested conventional commits as Chris to the owning origin/main without coauthor trailers or force pushes.

Completion evidence

  • Implementation commits and relevant upstream issue links.
  • Exact checks and results, fixture hashes, and screenshots/native execution evidence where applicable.
  • Published package versions, downstream lockfile identity, and release receipts when affected.
  • Remaining limitations stated explicitly. Partial work does not close this issue.
9 days ago

Surveyed tiles now draw the original demo's empty or resource sign using only the player's recorded discoveries. Tests cover both resource frames, empty and exhausted results, expiry, another player's signs and save/reload. #207 records the change and passing CI.

Frame scaling follows the supplied remake; mining reserves are unchanged. Original Gold quantities, timings and complete terrain behavior remain unverified.

10 days ago

Completed: finite deposits, surveying and terrain changes

  • Deposits are per-tile goods with quantities. Mines take one unit per cycle, stop with exhausted and report it; fishermen deplete fish; stone objects lose one unit per trip and vanish at zero; trees are felled; saplings and crops grow on a schedule.
  • Geologists survey mountain tiles and leave signs with the deposit found, visible only to their owner.
  • Clearing, planting and levelling bump the navigation version, and walkers re-plan.

Tests: the last coal unit is mined without negatives; stone and fish are exhausted with every remaining fish provably out of reach; geologist signs match the deposits; routes change when objects appear mid-trip.

Evidence base for this update (all on main, authored as Chris):

  • 3ca4847 deterministic session, rules profile, routing, goods, carriers, construction, production, territory, visibility, saves and replays
  • da2a104 reference building geometry and the delivery livelock fix
  • b2efc1f the browser game on the engine, expanded original-media import
  • 7b1cc36 worlds from decoded original maps
  • a495e7a, 0a3ff46, 0e7889e, e5c1a53, f3b71ce, ed1dc8f controls, missions, render scene, save migration, checkpoints, audit and statistics

Checks: ./buddy lint (0 problems), bun run typecheck (app, tools, stx), ./buddy test --unit (106 tests, 0 failures), bun run assets:verify, bun run content:verify, and the production browser scenario. CI passed on 0e7889e and 9e2ba7c (which contains f3b71ce), including the production Chrome check.

Rule values are the roman-engineering 0.2.0 profile (resources/game/engine/rules.ts). Every value names its evidence class: manual candidates (M) from the pinned manual, reference-remake geometry (E), or placeholders (U) that name their owning issue. qualificationGaps() lists them and the profile cannot qualify a release. Adopting observed original values remains with S3-002/S3-007; nothing here is an original-executable observation.

10 days ago

Fixed the captured automatic survey failure in 6583568. At rival seed 2, tick 3884, a geologist selected the next mountain tile inside an active coal mine and stopped as unreachable. New engineering profile 0.9.0 checks enterability and the normal movement route before selecting the next duty target. The receipt retains the original trace and public-command tests for a mine footprint, isolated peak and mid-duty restore with matching checksums. Profile 0.8 remains frozen with its original data digest and automatic duty routing.

Exact main CI 40193838620 passed. Local acceptance passed 262 unit tests and 22,612 assertions, lint, app/tools/STX types, production build and all 332 browser steps. Downloaded original diagnostics artifact 12599132458 matches GitHub SHA-256 7bd49fa9eca20e6c0b56ddbebf0464725b2bd5cc8991369677f74166fc253fe5, 17,625 bytes, all ZIP CRCs and all 332 browser steps with no recorded console, request or collection errors. The archive contains no media rasters.

This is engineering recovery evidence, not an original Gold executable observation. The issue remains open for its remaining acceptance criteria.

Sign in to comment on this issue.