ReviewOS

stacks/the-settlers-iii-remake

[S3-074] Complete skirmish setup, difficulty, and random maps

#76
Open chris opened this 8 days ago ·
8 days ago

S3-074: Complete skirmish setup, difficulty, and random maps

Parent and ownership

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

Problem and observable result

Configure factions, teams, rules, and victory modes. Generate seeded validated maps. Document reproducible difficulty behavior.

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

AI submits the same commands as players and observes an allowed player view. Difficulty is explicit and seeded. AI must not create resources or use concealed enemy information.

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

  • Configure factions, teams, rules, and victory modes.
  • Generate seeded validated maps.
  • Document reproducible difficulty behavior.
  • 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

  • Repeat a configured skirmish seed.
  • Validate starts and supported victory conditions.
  • 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.
7 days ago

The source-first web AI corrections through #202 are now qualified on main at b0d1df3. Exact CI 40242723177 succeeded; its original artifact 12618051922 matches SHA256 a5a9df03b47549820dcac09d0c7defcfb69649b48b63a0da9c82cd415fc9e4fc, with every CRC/all 385 steps/no error collections verified.

All four sampled ordinary two-policy matches now finish: seeds 1/5/2/3 at ticks 31801/73581/184761/139741. Complete traces have no failed commands and clean conservation. The charcoal correction uses the existing real recipe and demand; it changes no rules, starting stock, physics, speeds or battle deadlines. The source and rejected-candidate evidence are retained in the receipt. The qualified framework cohort remains Stacks 0.75.311 / STX 0.2.691 / Craft 0.0.341 / Pantry 0.11.127 / Bun 1.4.4.

This advances the browser engineering prototype. Keeping this broader issue open. A human-input skirmish victory, all-seed behavior, broader configuration, native presentation and original Gold Edition agreement remain unproven. Work continues on #203 after normal browser input exposed a woodcutter suggestion with no reachable trees despite other known usable sites. Seed 1 has no initially known granite, so its quarry fallback needs an honest warning rather than an invented productive-site claim.

7 days ago

Browser qualification advanced with #203, now closed after cc702ac8 and exact main CI40244633903. All318unit tests and385browser steps pass. The original19651byte artifact12618617732 matches SHA256 46b79dfa1daa049459610a92c9ee7f6836cdb17b8d32b434a3d224fd0d23bdfe, all CRCs/steps/error collections verified.

Keyboard construction now prefers known reachable harvest sites, retaining legal fallback and an honest absent-resource warning. Native input confirms the suggestion and actual log production. Receipt. Simulation rules/AI/locks are unchanged from the qualified charcoal publication; its four completed sampled AI matches remain source-pinned evidence, not a new all-seed claim.

The next actual human-playability frontier is #204, with an ordinary four-site reproduction of all hammers stranded in idle construction crew. Lowering the cap leaves the tools unavailable for a geologist. The pinned reference has periodic surplus jobless-crew conversion and actual tool drops; a versioned source correction must preserve old saves and real accounting. The manual match ended in defeat after this shortage. No human victory, full sustainable game, native UI or original Gold parity has been proved. Keeping this broader issue open.

7 days ago

Staffing controls can now return idle construction workers and their tools to carrying. Ground drops also preserve ownership when another player's pile is nearby. These fixes are covered by #204 and #205.

329 unit tests and 385 browser steps passed, including save/reload. CI and validation details.

The player test got tools and storage working, but lost the rival match. Testing the original tutorial map then exposed a separate staffing stall: unreachable trained workers kept blocking reachable carriers. That is tracked in #206.

7 days ago

The staffing fix passed 336 unit tests and 385 browser steps, including the full battle and save/reload.

Implementation, passing CI and validation details. Crew limits, goods accounting and older save rules are preserved.

Full Gold parity and broader game qualification remain unfinished.

8 days ago

Progress (still open)

New settlement now offers a computer rival: a seeded 128 by 128 generated landscape with two Roman castles at least 40 tiles apart, the second controlled by the economic AI through the command queue (rivalSession() in resources/game/controller.ts, tested for several seeds). Factions, teams, rule and victory-mode selection, difficulty levels, validated random-map generation and the original start-resource settings are still to do.

8 days ago

New two-player Roman rival games now have a last-completed-castle-or-tower elimination mission in 0c8b8d3. The existing mission DSL handles victory, defeat and simultaneous elimination, while prior checkpoints keep their original mission definitions. The browser displays and saves the objective through ordinary controls.

The implementation receipt pins the three reference Java files and records public-command captures for either side, mid-attack restore checksum equality, surviving completed towers, unfinished towers and simultaneous defeat. This is remake implementation evidence, not a Gold executable observation.

Exact main CI 40190952158 passed. Local checks passed 254 unit tests, 22,562 assertions, lint, app/tools/STX types and production build. I downloaded original diagnostics artifact 12597797612, verified its GitHub SHA-256 (ebe21c0f4fbcef187b2b1fc2427e03f0ab7b75cff08ccc957a053e60df13dccc), byte count (17,621), every ZIP CRC and all 332 browser steps across nine suites, with no recorded console, request or collection errors. Original-media rasters remain local.

Keep this issue open: factions, teams, difficulty and configurable victory modes remain incomplete. This browser scenario covers objectives and save/reload, not a full rival battle to its conclusion. Original timing, postgame map reveal and Gold parity are not established. A separate longer seeded run also exposed a timber recovery deadlock under S3-071/#73; that source investigation is continuing.

8 days ago

The timber-recovery source correction in e33c9bf now preserves an exhausted woodcutter while a nearby forester finishes. Detailed reproduction and retained evidence are recorded under #73 and in the receipt.

Latest exact main CI 40191970245 is green, including the new elimination mission and both AI recovery regressions. The original 17,633-byte diagnostics artifact matches GitHub SHA-256 a41415a1fff513db4cebe3aaa6efed00ba66d3d0a0d20a93e21575a3c589d945; every ZIP CRC and all 332 browser steps pass without recorded console or request errors.

The issue remains open. The longer seeded simulation still exposes survey/mineral progression work, and a full rival battle through browser input is not yet accepted. Teams, faction, difficulty and configurable victory setup retain their existing acceptance criteria.

8 days ago

Browser-first progress: the normal seed-2 rival now reaches a complete battle using its ordinary 44-person start and 30 starting planks. It surveys known neutral mountains, explores visible frontiers when minerals are still missing, orders real pioneers to expand toward positive survey signs, and builds mines only when a known owned deposit is in range. Production and recruitment remain ordinary engine jobs and commands; no goods, soldiers or hidden mineral knowledge are granted.

The deterministic regression produces iron ore, iron and swords, captures the human castle at tick 38341, and matches a fresh-AI mid-game restore. All 267 unit tests pass, plus app/tools/STX types, lint, production build and 339 existing browser scenario steps. A normal native-input browser run through the seed-2 field and 4x control reached Mission lost; saving and reloading retained the seed, loss and captured castle.

The retained command-line full-match scenario exposed an independent Stacks driver failure after a minute of idle waiting. A static page reproduced it. The fix is upstream in stacksjs/stacks#2992, source acaab209, with a real 65-second idle regression. Maintained bun run release:patch created 0.75.310; its CI/publication qualification is pending before normal game adoption and the full scenario rerun.

These are engineering-profile results for one passive-player battle. They do not establish original Gold rules/timings, human-victory acceptance, religious AI, every seed, or native game completion. The game source and final acceptance receipt are still being prepared for main.

8 days ago

Pushed to main as Chris without coauthors: bfa7cb4 mineral progression, c5b0f55 stone recovery, and 85ac0f1 qualified framework adoption.

The ordinary seed-2 rival surveys known land, uses real pioneers to reach resources, constructs mines, produces iron and weapons, and defeats a passive player at tick 38,441 with a clean conservation audit. A fresh-AI mid-game restore matches. The captured seed-3 material deadlock now resumes stone production through actual civilian refunds and a real stonecutter. The map-seed field and both unsigned seed endpoints survive ordinary checkpoints.

Installed Stacks 0.75.310 qualification passed all 95 selected original package trees and all seven consumer checks. Ten browser suites passed 385 steps with zero recorded console, network or collection errors. The complete battle ran 612,342 ms through the normal 4x control, reached defeat, then saved and reloaded the same seed and outcome. The execution receipt retains identity and pacing samples; original rasters remain local.

Exact main CI40208919317 is running. Keeping the broader roadmap open: this proves one passive-player Roman engineering battle, not a human victory, every seed, religious AI, original Gold balance/timing, all civilizations or native application completion.

8 days ago

Exact main CI 40208919317 succeeded on 85ac0f1, which remains origin/main. The original job log confirms 272 unit tests, zero failures, 22,758 assertions.

The original campaign-browser-check artifact 12604504234 is 19,659 bytes. Its SHA-256 481b25aad73ed1cad91acf0c5bb7e1137055e895aaedf5b9f6522c852275d3f4 matches GitHub's digest, every ZIP CRC passes, and every recorded assertion across 385 browser steps passes with zero console, network or collection errors. The complete normal seed-2 battle ran 610,472 ms, reached defeat, then acknowledged save and passed the seed/outcome assertions after a real reload. The archive contains diagnostics and media identities only, with no original raster upload.

This qualifies the specific source fixes and the published Stacks 0.75.310 adoption recorded in the source/publication and browser acceptance receipts. The broader roadmap remains open for human-victory coverage, all seeds, factions, religious AI, original Gold balance/timing, campaigns and complete native applications.

8 days ago

The owning simulation fix is implemented on base 85ac0f1: a new construction site rejects an outside settler's current tile and committed next step. The original resting occupancy check remains in place. No teleportation, free goods, patched runtime or clock changes are used.

New settlements use engineering profile 0.10.0, digest ac7a5d264941b39ef94fe8f9d11613356de3c70e130617ce7d19960fc060021b. Published 0.9.0 is retained verbatim in the catalog. Six command/placement regressions cover leaving and entering a site, mid-step restore, eventual valid construction, future-path obstruction recovery, old saves/replays and rule validation.

Current validation: 278 unit tests pass with 22810 assertions; lint has zero errors/warnings; type checks, assets, fidelity/roadmap checks and the production build pass. The production browser suite has passed campaign, desktop/phone control frames, resize, production, selection, recruitment, working areas and skirmish. The full paced rival battle and final document reload are still running, so this is progress, not final acceptance.

A stronger normal-start, two-economy seed-2 probe reaches 200000 ticks, checksum 60a8248b, with both players alive, clean conservation and zero rejected command submissions. The geologist is no longer enclosed. Both sides' production is unchanged between ticks 100000 and 200000, so the wider same-rules economy/skirmish issues remain open while resource planning is traced separately.

8 days ago

The source correction now uses the production worker's router to forecast harvesting from legal proposed sites. The query stays on explored owned walking tiles, blocks the future building footprint, and considers only known own or neutral harvest objects. It does not read hidden deposits or change stock, terrain, ownership, workers, rules or clocks.

The captured ordinary two-economy seed-2 checkpoint at tick 200000 now orders and completes a stonecutter, increases produced stone beyond 72 and continues identically after restore. Five focused cases cover that actual recovery, usable neutral granite, water isolation, enemy/unexplored resources and expansion toward known neutral forests.

The first revision regressed timber expansion: the existing fallback treated any resource anchor as already owned. Once neutral anchors were added, this prevented the tower that would open space for a timber workplace. A comparison with the committed policy isolated the first changed decision at tick 1120. The ownership-aware expansion correction passes the existing passive-rival match without changing its seed, clocks or bounds.

Final local game checks: 283 tests pass, zero failures, 22852 assertions; Pickier lint has zero errors/warnings; application, tool and stx type checks pass. A fresh normal-start match with both ordinary economic policies now completes at tick 45321: player 1 lost, player 2 won, checksum 26b13881, clean conservation and zero rejected enqueue submissions. Both start with 44 people and 30 planks. Player 2 actually produces 56 iron ore, 44 iron, 3 swords, 5 spears and 9 bows. Final checkpoint SHA256: 34f31c5eac9095af51658794c63a9a572e58efde7fdd9ea9ecb9972b5c7d89db.

The retained execution history also contains one refused move at tick 45120 because a garrison keeps its last soldier. That separate military-planning issue is not hidden by the clean enqueue result. Broader military, skirmish, human-input victory, all-seed and Gold fidelity acceptance remain open.

Publication is pending: the game changes are local while Stacks 0.75.311 completes its original package/native publication and verification for the related browser preparation fix (stacksjs/stacks#2994). Normal adoption, the full production browser suite, a normal main push and exact-head CI will precede closure of these specific fixes.

8 days ago

The issues-193-194 candidate on base 85ac0f1e805edca6f6d008897089218345657f85 now passes the complete fresh browser acceptance through the published Stacks 0.75.311 driver: 385 successful steps in ten suites, no console errors, failed requests or collection errors. This includes ten real minutes at the normal 4x setting, defeat, an ordinary save and actual document reload. All 283 unit tests, lint, type checks, asset provenance, fidelity catalog, roadmap validation and the production build pass.

The stronger two-computer seed-2 match reproduces a player-2 win at tick 45321 with checksum 26b13881 and clean conservation. Exploratory seeds 1, 3 and 5 remain unfinished at 80000 ticks with clean accounting. Seeds 1 and 5 retain executed scouting refusals. A four-case public-policy regression now reproduces selecting a sole tower guard despite a two-person castle being able to supply a scout. Its outside-ready preference case passes; the three guard cases fail. That follow-up is retained separately and has no tactical source changes yet.

The 0.75.311 source and publication are qualified. Normal Buddy upgrade, original Pantry installation and frozen Bun installation completed; the installed published release verifier is now executing consumer checks. The final installed receipt, normal main push and exact main CI are still pending. Broader skirmish/military AI, original Gold behavior, human victory and native game acceptance remain open.

7 days ago

The city-site correction #197 is complete at ccaf4315f5301811a1848de8106136937ed937b7, normal FF origin/main push as Chris/no coauthors. Exact-main CI40234111784 succeeded. Original artifact12614458702 (19648bytes), SHA256 e93aad842ce81646a591ed969e4a5b3cfda993cff973e81736934cca1c536b5b, matches GitHub; everyZIPCRC/all385steps/empty browser error arrays verified. The committed receipt retains 296passing units, full local385step browser run and three finished sampled two-policy matches.

The subsequent quarry-budget fix #198 is pushed at 340ddc2a561354a9df8c2c246745e7e957b08ddb, with299passing units and another fresh385browsersteps including ten real minutes at4x/save/reload. Its exact-main CI40235769537 is still running, so #198 remains open. It restores real stone/metal/weapons in seed3. Ordinary two-policy seeds1/5finish34021/72501; seed2's normal continuation finishes119001, zero failed executions and clean accounting. Seed3remainsunfinished100000 despite14troops.

The matched forestry control disproved the initial permanent-deadlock hypothesis in #199: unmodified AI wins earlier than the manual work-area probe. #199 is closed as not planned; no forestry code change was made. The next reproduced military frontier is #200: all six fixed home rays explored,513unknown off-axis tiles and no scouting order at the normal100800decision. Its source fix is in progress.

This broader issue stays open. These are Roman engineering-profile browser checks, not complete AI difficulty/religion, human victory, every map seed, original Gold rules/content, or native presentation acceptance. Published Stacks311/STX691/Craft341/Pantry127 adoption remains as recorded in the95tree/sevenconsumer receipt; this app-only work changes no framework package or profile identity.

Sign in to comment on this issue.