431 lines
27 KiB
Markdown
Executable File
431 lines
27 KiB
Markdown
Executable File
# Season VI implementation roadmap — The Last Hearth
|
||
|
||
Updated: 2026-11-02. Carried forward from the authoritative engine-checkout
|
||
document, doc/season-vi-roadmap.md, into this standalone game repository. Links
|
||
are adapted locally; the delivery strategy, M0–M6 scope, dependencies and gates
|
||
are retained. Status distinguishes implementation, automated evidence and
|
||
operator/human acceptance; it does not invent tester feedback or approval.
|
||
Feature IDs refer to the [launch checklist](launch-features.md).
|
||
|
||
**Current state: M0 technical gates complete; M1 implementation and automated /
|
||
native preflight complete, human acceptance pending; M2 implementation and
|
||
automated technical verification complete, human acceptance pending; M3
|
||
implementation and automated verification complete, two-player acceptance
|
||
pending; M4 technical implementation and automated verification are complete,
|
||
with its week-long group acceptance pending.** M2/M3 progress does not waive the
|
||
open M1 human gate. See
|
||
the [M0 evidence ledger](m0-decisions.md#verification-and-acceptance-ledger),
|
||
[M1 evidence](m1-verification.md), [M2 record](m2-verification.md) and [M3 record](m3-verification.md).
|
||
Windows checks ran on the existing development host, not a clean machine.
|
||
Linux/macOS paths are unit-tested only; native execution is unverified. Browser
|
||
launch readiness is not promised. Current release candidate contract is Luanti
|
||
**5.18.0**, game **0.5.0-m4**, save schema **1**. M4's human exit gate and all
|
||
earlier human/operator gates remain open.
|
||
|
||
**New ecosystem and journal/art pass:** original Dynamic Life-inspired succession
|
||
and the eom.dev Mocha botanical field journal are implemented as a further working
|
||
increment, not a new release. Main integrated tests and native visual validation
|
||
for this increment remain pending; earlier automated results below are historical
|
||
evidence, not validation of the new tree. See [living ecosystems](ecosystems.md),
|
||
[art direction](art-direction.md), and the [append-only M4 update](m4-verification.md#botanical-journal-and-ecosystem-survey--pending-main-validation).
|
||
|
||
## Delivery strategy
|
||
|
||
Build small playable increments, with a working saved world at each milestone.
|
||
First establish feel and a satisfying evening; then progression and sustainability;
|
||
then a safe public service. Presentation, accessibility, tests and performance are
|
||
part of each increment, not a final cleanup phase.
|
||
|
||
There is **no launch date commitment** yet. The breadth of original art, animation,
|
||
game systems and possible engine changes warrants milestone-based planning.
|
||
Estimate calendar dates after M1 establishes scope and available contributor time.
|
||
Treat effort as implementation + assets + tests + playtest revision, not Lua alone.
|
||
|
||
## Current baseline: M0 foundation through M3 home-building slice
|
||
|
||
Already present: standalone game loading, gathering/crafting, first-night needs and
|
||
queued hearth jobs, a versioned home and safe arrival, bounded room/vent shelter,
|
||
a small structural palette with refused unsafe support removal, shared claim roles
|
||
and protected storage, smooth movement/stamina, animated player/tools, material
|
||
feedback, opt-in sparring, a disposable movement course, and approximate solar/
|
||
climate behavior. M1 and M3 human acceptance and performance measurement remain open.
|
||
|
||
M0 adds an independent versioned game package, split module responsibilities,
|
||
schema validation/legacy migration, offline snapshot/restore/recovery tooling,
|
||
runtime isolation and fixture/production guards. See the
|
||
[actual module contracts](architecture.md) and [decisions](m0-decisions.md).
|
||
Integrated checks, fresh exports and Windows GUI play are verified; retained
|
||
old-save recovery evidence is qualified by its earlier package digest. M0 technical
|
||
completion is not operator acceptance or launch readiness.
|
||
|
||
Not established: fun progression, production-quality controls/combat/art, renewable
|
||
settlement economy, complete offline simulation, public multiplayer security,
|
||
browser parity, or clean-machine releases. Do not equate passing tests with launch
|
||
readiness.
|
||
|
||
## M0 — Establish a maintainable game and a shared rules contract
|
||
|
||
**Goal:** make subsequent work reproducible and prevent expensive incompatible choices.
|
||
|
||
Primary features: F11, F12, F17–F19. Prerequisite: P0.
|
||
|
||
1. Extract the game into its own content repository/package while preserving history
|
||
and keeping a reproducible engine integration. Do not discard the current world.
|
||
2. Pin the stock engine baseline and document local/staging/production data paths;
|
||
make the launcher/install process work on the intended development platforms.
|
||
3. Split responsibilities: player state, clock/climate, construction, interactions,
|
||
inventory/processes, UI, encounters and persistence. Preserve behavior with tests.
|
||
4. Introduce schema/version identifiers, validation and migrations before new saved
|
||
item/process formats. Add pre-migration backup and restore fixtures.
|
||
5. Agree on minimum supported hardware, concurrent-player test target, client
|
||
platforms, browser launch status, and measured latency/performance budgets.
|
||
6. Record decisions on death/recovery, initial progression ceiling, calendar display,
|
||
offline processing and claim boundaries. Select the community location before
|
||
staging climate balancing; local worlds retain their own selection.
|
||
7. Preserve a deterministic first-session fixture and explicit summer/winter/date
|
||
fixtures. Production configuration cannot accidentally enable test shortcuts.
|
||
|
||
**Exit gate:** a clean checkout runs tests and opens a versioned prototype;
|
||
the old save restores; scope decisions and unresolved risks have owners.
|
||
|
||
**Status qualification:** M0 technical exit gates are complete for the verified
|
||
Windows development path: integrated tests, clean temporary package exports,
|
||
isolated GUI play, retained copy-only recovery and owned decisions/risks. This is
|
||
not a clean-checkout/new-machine or Linux/macOS native certification, and no
|
||
user/operator sign-off is invented. Hardware/network figures are
|
||
[provisional acceptance targets, not measurements](m0-decisions.md#provisional-performance-acceptance-targets--not-measurements)
|
||
and remain M1 measurement/review work, not an open M0 performance gate.
|
||
User/operator approval of the community location is required before shared-world
|
||
climate staging; the M0 synthetic 45°N, 0°E fixture is not production selection.
|
||
M2 changes do not alter the historical M0 evidence or approval status.
|
||
|
||
## M1 — Make five minutes of interaction feel good
|
||
|
||
**Goal:** make moving, gathering, placing and one encounter enjoyable before adding grind.
|
||
|
||
Primary features: F01, F02, F09, F14, F15; F17 client decision. Prerequisite: M0.
|
||
|
||
**Implementation:** movement/stamina model, fresh isolated course, original skinned
|
||
and animated player/tool meshes, material/attack audio, contextual target and
|
||
placement feedback, and opt-in mobile sparring are implemented. The stationary
|
||
practice target remains for comparison. The stock engine is the deliberate M1
|
||
baseline: current features do not justify a custom client/protocol fork, though
|
||
future measured playtest evidence may change that decision. Browser launch remains
|
||
unpromised.
|
||
|
||
**Automated/native preflight evidence:** 31 Node tooling/asset tests pass; the real
|
||
engine compiles 36 Lua files and passes 13 isolated suites totalling 228 checks;
|
||
native check/smoke passes. The separate headless course preflight verifies staging
|
||
and observes 41,041 untouched volume nodes before player consent. Mock course tests
|
||
verify generator geometry/checkpoints. Neither constitutes human traversal or fun.
|
||
|
||
**Human acceptance remains open:** the user/regular testers should use the
|
||
[M1 playtest instructions and evidence](m1-verification.md), run the route and
|
||
moving spar repeatedly, and record actual FPS, server-step, corrections and
|
||
latency on the documented envelope. No group playtest or performance measurement
|
||
is claimed. M2 implementation proceeds only by explicit user direction; this does
|
||
not mark M1 accepted.
|
||
|
||
## M2 — Make the first night a complete game
|
||
|
||
**Goal:** a satisfying arrival → tools → fire → food/water → temporary shelter loop.
|
||
|
||
Primary features: F03, F06, F08, F10, F11, F14, F15. Prerequisite: M1.
|
||
|
||
**Implementation:** bounded safe-arrival/home revalidation; home points restricted
|
||
to the player's own claim; inventory-preserving death with partial needs recovery;
|
||
firestarter ignition, craftable torch, queued six-second cooking/four-second
|
||
boiling, persistent output collection, bedroll rest, searchable recipe/process
|
||
guide and an eight-seed real-engine mapgen check were delivered in **0.3.0-m2**.
|
||
Player needs remain paused offline; fuel/jobs expire by absolute real-time deadline.
|
||
No crop, spoilage, comprehensive shelter, or civil-timezone system is implied.
|
||
The M1 human gate remains open; implementation proceeds under explicit user direction.
|
||
|
||
**Technical verification:** compilation, integrated real-engine checks, Node tooling
|
||
tests and all eight fixed-seed starts pass on the documented Windows setup. Named
|
||
results and limits are in [M2 verification](m2-verification.md).
|
||
|
||
1. Implement safe arrival/home validation and multi-seed resource checks. Remove
|
||
inappropriate underground auto-teleport and handle pending/failed emergence.
|
||
2. Add contextual harvesting and a searchable recipe/process guide; rebalance
|
||
ingredient costs from observed play rather than arbitrary scarcity.
|
||
3. Add ignition, torches/lamps, timed cooking and boiling with visible process state.
|
||
4. Make a lean-to, bedroll, first meal and clean water achievable; include useful
|
||
nighttime activities because real-world time is not accelerated.
|
||
5. Tune need rates and recovery, initial grace and death consequences. No free
|
||
survival refill exploit and no punitive tutorial-death loop.
|
||
6. Validate date/location, season extremes, sky approximation and timezone labeling;
|
||
add weather transitions and clearly disclosed synthetic conditions.
|
||
|
||
**Exit gate:** five unfamiliar testers attempt the first 30–60 minutes without
|
||
coaching. Most can identify a danger and correct it; failures reveal actionable
|
||
feedback, not hidden recipes. Summer and winter versions both have feasible starts.
|
||
|
||
**Operator prerequisite:** approve shared community coordinates and explicitly
|
||
configure `hearth_latitude`/`hearth_longitude` before community climate staging.
|
||
Do not silently promote M0 fixture coordinates. Civil timezone policy/display
|
||
also needs an explicit decision when implemented; none is invented here.
|
||
|
||
**Human acceptance remains open:** five unfamiliar testers must attempt the first
|
||
30–60 minutes without coaching, across summer/winter starts, and report actionable
|
||
feedback. M2 implementation supports moving into M3 engineering, but M2 is not
|
||
accepted until that gate and operator review are recorded. Community coordinates
|
||
still require explicit operator selection before shared climate staging.
|
||
|
||
## M3 — Make a home worth improving
|
||
|
||
**Goal:** construction solves practical survival problems and supports personal expression.
|
||
|
||
Primary features: F04, F05, F08, F13, F15. Prerequisite: M2.
|
||
|
||
**Implementation:** bounded 7 × 7 × 5 room flood-fill with one-second cache and
|
||
structure-edit invalidation; roof/door/vent shelter and smoke classification;
|
||
stone foundations, timber frames, stairs, doors, windows, roof vents; support-aware
|
||
refusal of unsafe removals; household resident/storekeeper roles; private storage,
|
||
drying rack and a reusable rain cloak. The historical M3 release was **0.4.0-m3**. Details and
|
||
named technical evidence are in [M3 verification](m3-verification.md).
|
||
|
||
**Technical verification:** the pinned real-engine smoke, isolated room/access/
|
||
construction/storage/schema/persistence suites, and Node tooling/assets tests pass.
|
||
M3 adds versioned access data under schema 1; old saves receive an empty access
|
||
map. No separate migration format is claimed.
|
||
|
||
Decision boundaries: support removal is refused, not cascaded. Room probing fails
|
||
exposed for unloaded/unknown cells and is limited to 245 voxels. Windows and
|
||
materials are prototype approximations, not a fully simulated cabin or structure.
|
||
|
||
**Human/operator acceptance remains open:** the exit gate needs two real players to
|
||
build and share a cabin, confirm room/vent feedback and verify outsider denial; it
|
||
has not been performed in this technical session. The M1 repeat-play/performance
|
||
gate remains separate. This implementation proceeds under the user's explicit
|
||
direction so M4 engineering may begin, but M3 is not marked accepted until observed
|
||
two-player results are recorded.
|
||
|
||
1. Introduce foundations/frames and the small complete architectural palette.
|
||
Add preview, rotation, stairs, doors, windows and a functional vent/chimney.
|
||
2. Replace the ray heuristic with bounded room/roof detection and cached invalidation
|
||
when relevant blocks change. Verify correctness before adding more simulation.
|
||
3. Implement useful material/weather protection, clothing and drying, and a
|
||
dependable relationship between ventilation, fire and indoor comfort.
|
||
4. Apply support rules to additions/removals consistently. Prevent hazardous
|
||
cross-claim effects and test restart/unloaded structural changes.
|
||
5. Add protected storage/workstations, household roles and visible claim boundaries.
|
||
6. Complete the first cohesive set of building textures, sounds and animation.
|
||
|
||
**Exit gate:** two players build and share a small functional cabin without an admin;
|
||
its protection and comfort outperform a lean-to for explainable reasons. Another
|
||
player cannot steal, flood or undermine it through an unhandled interaction.
|
||
|
||
## M4 — Make the next week worth playing
|
||
|
||
**Goal:** complete a small, sustainable survival progression rather than an infinite checklist.
|
||
|
||
Primary features: F03, F07–F09, F11, F12; extend F15. Prerequisite: M3.
|
||
|
||
1. Add renewable forage/timber, a few crops, wildlife population limits and a
|
||
noncombat food path. Test community harvesting pressure near arrival.
|
||
2. Implement pottery/storage and preservation before enabling consequential
|
||
spoilage. Preserve age and quantities through every inventory operation.
|
||
3. Add the first useful metal tier: find source material → prepare fuel → process
|
||
at a workstation → make a visibly better tool. Keep the chain short enough
|
||
to finish and maintain without mandatory specialist classes.
|
||
4. Add modest material/climate variation to make ordinary journeys worthwhile;
|
||
give players preparation and route choices without authored adventure content.
|
||
5. Finalize bounded offline/unloaded processing, historic climate accounting and
|
||
process-completion idempotency. Publish the exact offline contract.
|
||
6. Tune temporary shelter, established home and seasonal preparation together.
|
||
Do not require daily maintenance or real months to test winter.
|
||
|
||
**Exit gate:** a small group plays several sessions over at least a week, returns
|
||
after absences and chooses new personal goals. Preservation works before harsh
|
||
decay is enabled. Loaded/unloaded outcomes agree and economic conservation holds.
|
||
|
||
**Technical status:** implementation and automated engine, ecology/process,
|
||
tooling/assets and eight fixed-seed checks are complete on the existing Windows
|
||
host. See [M4 evidence and the offline contract](m4-verification.md). This permits
|
||
M5 engineering to begin under the user's direction; it does not mark M4 human-
|
||
accepted or claim the loaded/unloaded group observations have occurred.
|
||
|
||
**Further ecosystem/presentation implementation (validation pending):** the guide
|
||
now prioritizes Living ecosystems over the optional Riverward goal. Original
|
||
loaded-only succession connects light/moisture competition, meadow/flower/fern
|
||
niches, slow tree stages and nutrient/decomposer feedback to bounded wildlife.
|
||
`/ecosystem` and the guide's Ecosystem survey observe a fixed habitat patch and
|
||
active global species totals, without mutation, spawning or force-loading.
|
||
Fishing recipes/process entries remain searchable for compatibility; fishing
|
||
mechanics and nodes are unchanged by this UI pass.
|
||
|
||
The shared journal treatment follows local eom.dev Mocha anchors with restrained
|
||
mauve/teal/yellow accents, pressed-sprig dividers, consistent buttons/fields/lists/
|
||
tooltips, seven bounded sidebar entries and readable content/footer spacing.
|
||
Inventory lists, transfer rings and permissions retain their behavior. The HUD
|
||
adds labeled percentages and colored reserve tracks on a dark panel; the hotbar
|
||
tiles one authored slot ten times and uses the matching selection outline.
|
||
See [ecosystem contracts](ecosystems.md) and [original art contracts](art-direction.md).
|
||
Focused journal regression results are recorded in the M4 appendix; full main
|
||
validation, native visual review and every human acceptance gate remain open.
|
||
|
||
**Landscape/diversity integration:** the [content expansion](content-expansion.md)
|
||
installs seasons → diversity → succession, then biome-owned terrain/species
|
||
registrations → diversity canonical nodes → seasonal variants → wildlife.
|
||
The old duplicate mapgen block is replaced, not stacked. Copper tool inputs and
|
||
a quartz window alternative extend resource utility; coal fuel/copper smelting
|
||
remain with the process integration owner. New worlds receive explicit broad
|
||
v7 relief and a ±4096 bound; saved mapgen/seed/bounds and generated chunks are
|
||
not rewritten. New ungenerated chunks in old worlds may have visible seams.
|
||
Focused tests cover registration/art/recipe contracts and unchanged saved metadata.
|
||
The earlier eight-seed evidence is historical, not certification of this preset:
|
||
native high-altitude emergence, species-aware resource/spawn checks, saved preset
|
||
verification, visual review and human acceptance remain required.
|
||
|
||
## M5 — Closed community alpha on the real deployment path
|
||
|
||
**Engineering status:** the first M5 slice now defines a private, digest-pinned
|
||
Kubernetes staging contract in [ansible-role-luanti](../../ansible-role-luanti/README.md).
|
||
Its direct Jinja render and fail-closed configuration checks pass offline. No
|
||
server image has been built, no cluster has been contacted, and no deployment is
|
||
claimed. See [M5 engineering verification](m5-verification.md).
|
||
|
||
**Goal:** prove the game can be shared, operated and recovered—not merely run locally.
|
||
|
||
Primary features: F12, F13, F16–F19. Prerequisite: M4.
|
||
|
||
1. Build pinned game/server/client artifacts and a non-destructive staging
|
||
deployment. Adapt or replace the old server role rather than assuming it fits.
|
||
2. Configure shared coordinates/timezone and access policy; remove debug grants
|
||
and test-only privileges. Preserve native game credentials initially if linking
|
||
is not yet ready; never ask players to reuse platform passwords.
|
||
3. Add moderation/reporting, production validation, security review, performance
|
||
telemetry and resource budgets. Exercise invalid/malicious client inputs.
|
||
4. Test restart, outage, disconnect, concurrent workstation use, full storage,
|
||
migrations and representative sustained multiplayer load.
|
||
5. Implement platform account linking and optional moderated Matrix bridge with
|
||
outage/loop tests. Add a minimal Play page and season feedback thread.
|
||
6. Take a consistent backup, deliberately break a staging instance, and restore
|
||
the complete world/player/process state. Record measured recovery objectives.
|
||
|
||
**Exit gate:** invited regulars can install/join from clean clients; no critical
|
||
data-loss/duplication/protection defect; recovery is demonstrated, not theoretical.
|
||
|
||
## M6 — Release candidate and public Season VI launch
|
||
|
||
**Goal:** ship an honest, polished and supportable experience.
|
||
|
||
Primary features: acceptance of all required F01–F19. Prerequisite: M5.
|
||
|
||
1. Freeze features; fix blockers, balance and usability rather than introduce new
|
||
mechanics. Complete asset attribution, controls, accessibility and UI review.
|
||
2. Repeat first-night, nighttime, winter-arrival, week-away and clean-install
|
||
tests on the release artifacts, not just development builds.
|
||
3. Publish supported hardware/clients, installation/join guide, survival/offline
|
||
rules, moderation/privacy policies and incident/support channels.
|
||
4. Prepare screenshots and a short authentic gameplay trailer. Schedule an
|
||
optional community first-evening stream; the game must not depend on the stream.
|
||
5. Verify production storage/backups, rollback, secrets and location configuration.
|
||
Keep the previous season archived/available under an explicit transition policy.
|
||
6. Announce launch only after signing off the checklist with recorded evidence.
|
||
|
||
**Exit gate:** no unresolved critical defects; a self-directed fun first session;
|
||
repeat-session evidence; measured performance at the declared target; a rehearsed
|
||
operational recovery. A calendar deadline never overrides those gates.
|
||
|
||
## Dependency summary and safe parallel work
|
||
|
||
**Critical path:** M0 → M1 → M2 → M3 → M4 → M5 → M6.
|
||
|
||
- Art/audio and UI can progress alongside each milestone using the current playable
|
||
loop; do not produce a large asset library before scale/style are validated.
|
||
- Deployment/backup scaffolding starts in M0 and can develop alongside gameplay;
|
||
public-server signoff waits for actual state/process schemas and exploits tests.
|
||
- Identity/Play-page work can begin after M0's platform decision, but integrations
|
||
must not delay proving that survival is fun or become gameplay dependencies.
|
||
- Conservation/persistence testing starts in M0 and expands with every new item,
|
||
process and permission; it is not deferred until M5.
|
||
- Defer worldgen-breaking changes until a migration/new-world decision is documented.
|
||
Do not silently regenerate regions containing player work.
|
||
|
||
## M1 status and remaining acceptance
|
||
|
||
M1 implementation and automated verification are complete for this slice. See
|
||
[M1 evidence and playtest instructions](m1-verification.md). The 31 Node tests,
|
||
228 Lua checks, pinned-engine smoke, and native no-consent course preflight pass.
|
||
M1 is **not human-accepted**: real route traversal, several voluntary repeat
|
||
testers, measured frame-time/network/load data, and the stock/custom decision
|
||
remain outstanding. M2 implementation is proceeding by explicit user direction;
|
||
this does not mark M1 accepted. M0 extraction and save/recovery work are not
|
||
repeated.
|
||
|
||
## M1 course fixture specification (implemented; human runs pending)
|
||
|
||
**Fixture identity:** a versioned, isolated staging course, separate from M0
|
||
seed/date scenarios in [scenario definitions](../tests/fixtures/scenarios.json).
|
||
The bounded generator, consent command and checkpoint/timing callbacks are
|
||
implemented in [course.lua](../mods/hearth/course.lua). The launcher always creates
|
||
a fresh nonce-marked `course` world; production and the preserved play world are
|
||
not eligible. Headless `test:course` is a no-consent preflight only. To generate
|
||
the route and kit, launch `node scripts/run.mjs course` and opt in with `/course`.
|
||
Never build the course in the preserved world.
|
||
|
||
- **Isolation and repeatability:** separate absolute `HEARTH_HOME`, explicit engine
|
||
executable, dedicated `staging` configuration when network testing, fixed seed
|
||
731104, recorded layout revision and exact start/end positions. Use synthetic
|
||
45°N, 0°E clear summer conditions for the reference run; repeat winter/rain as
|
||
a variant. This choice is only a course fixture, not community location approval.
|
||
Fuel still follows real time even when climate preview time is fixed.
|
||
- **Reset contract:** the launcher creates a fresh world and nonce for each course
|
||
session; `/course retry` resets only the current participant's timer/kit/route.
|
||
For *measured repeats*, launch a fresh course world to avoid terrain/entity
|
||
accumulation. No original survival-world snapshot is used or modified. Fixture
|
||
gear and test shortcuts remain unavailable in production. Record cold asset load
|
||
separately from warm traversal.
|
||
- **Route (about five minutes, not a measured result):** level walk/start/stop and
|
||
turning; long sprint to exhaustion/recovery; jump and 0.6-step-height boundary;
|
||
rough terrain/slopes; one-node and two-node doorway widths, corners, stairs and
|
||
low ceilings; water entry/exit/swimming and shore edges; controlled short falls
|
||
and recovery; repeat the route in reverse. Label geometry dimensions and record
|
||
any expected obstruction separately from a collision trap. Doors/stairs here
|
||
are test geometry, not a claim that new craftable building parts exist.
|
||
- **Interaction stations:** gather flint/stick/timber samples; compare
|
||
knife/axe/spear use, targeting/reach/occlusion, supported and intentionally
|
||
unsupported placement, protected-edge denials and full-inventory behavior.
|
||
Use the stationary target as a control and opt in to `/spar` for the moving
|
||
training opponent. Neither one is wildlife AI or a PvP mode.
|
||
- **Controls/accessibility:** record bindings, sensitivity, camera/FOV settings,
|
||
camera-motion preferences and input devices. Evaluate keyboard/mouse first;
|
||
additional devices/platforms get explicit results, not assumed parity.
|
||
- **Load/network matrix:** run an unshaped reference and RTT 0/80/150 ms with
|
||
20 ms jitter and 1% loss; document actual achieved shaping and direction.
|
||
Traverse alone, then with up to 10 concurrent real clients on 4 vCPU/8 GB.
|
||
Fake sessions do not satisfy multiplayer evidence. Use the provisional
|
||
4-core/8 GB/integrated OpenGL 3.3 client at 1080p low/view 96; target 60 FPS,
|
||
p95 frame time ≤25 ms and p95 server step ≤50 ms. These are targets, not data.
|
||
- **Evidence:** record revision/package inventory, host/OS/GPU/driver/settings,
|
||
warmup and timed sample duration, frame-time distribution, server steps, memory,
|
||
corrections/stalls and invalid action handling. Keep an issue log with route
|
||
station, reproduction, observed versus expected behavior and severity. Use
|
||
opt-in anonymized observations; private coordinates/account data stay out of
|
||
public reports. Report failed and incomplete runs, not just averages.
|
||
- **Telemetry limit:** `/course report` exposes checkpoint/time progress, engine
|
||
globalstep `dt` p95 and course-callback wall duration p95. It explicitly does
|
||
**not** profile client FPS, rendered frames, or CPU usage. Obtain those using
|
||
client instrumentation and record the actual network shaper configuration/results.
|
||
- **Acceptance:** several testers choose to repeat the loop; no known collision
|
||
traps or timing exploits, readable distinct tool/encounter feedback, and a
|
||
written stock-versus-custom decision supported by measurements. Performance
|
||
target revisions must be explicit, not relabeled passes. Browser testing is
|
||
conditional on a separate launch-scope decision, never assumed from native tests.
|
||
No human route run or performance matrix is currently recorded. The M1 evidence
|
||
document explains safe use of `/course`, `/course report` limitations and the
|
||
remaining user/operator gate.
|
||
|
||
## How progress is tracked
|
||
|
||
For each feature, record: owner, milestone, dependency IDs, code/asset changes,
|
||
save impact, automated test evidence, playtest observations and open defects.
|
||
Statuses: planned → implementation → automated verification → playtest → accepted.
|
||
|
||
After every milestone, decide **continue, revise, or reduce scope**. Reduce breadth
|
||
(creature count, material count, decorative variants) before cutting movement feel,
|
||
clear feedback, sustainable play or save safety. Any change to a required feature
|
||
must be reflected in the checklist, not hidden by marking the milestone complete.
|