Files

81 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Development plan
This plan was written before implementation. Each stage ends with a reproducible result in the local repository. `docs/STATUS.md` is updated after verification. An interface, a stub, a catalog of names, or a successful compilation does not make an item complete.
Current progress: stages 06 are implemented for the local MVP profile. The components are integrated; actual checks, load limits, and compatibility limitations are documented in STATUS and VERIFICATION. The original stage order is preserved below.
## Stage 0. Preserve context and review the design
- Record the original requirements, decisions, contracts, and acceptance criteria.
- Record compatibility data sources and licensing constraints.
- Separate the components so that storage, compatibility, the network server, and the client can be developed independently.
- Agree on error handling, coordinates, revisions, operation limits, and the diagnostic format.
Deliverable: documents in `docs/` and a list of decisions, with no silent reduction in scope.
## Stage 1. Core and verifiable memory management
- A Rust workspace; coordinates that handle negative values correctly; a registry of canonical block states.
- Sections of 16×16×16 cells: a uniform state or a palette with packed indices. No separate object for each block.
- A custom versioned storage format, bounded cache, and unloading to disk; reads do not modify the world.
- Independent instances of a shared map. Editing or resetting one instance does not affect others; the base snapshot has precise semantics.
- Atomic edits with a recovery journal, revisions, and idempotency. History and undo reside on disk with bounded RAM use.
- Checks for section boundaries, packing, world isolation, retries, conflicts, persistence, and crash recovery. Measurements comparing shared-map storage with copies.
Deliverable: an independent library and reproducible tests/measurements. This is not yet the complete MVP.
## Stage 2. Server and minimal client: an end-to-end scenario
- The server owns the world and simulation: a fixed tick, server-side movement/collisions, and interaction validation.
- A versioned protocol: connection, initial snapshot, block changes, players, world switching, errors, and reconnection.
- Limits on player count, world radius, messages, action rates, and queues. A slow client cannot increase server memory without bound.
- A test client with a custom renderer, camera, controls, blocks, simple entities, and connection states. The server remains graphics-free.
- Two independent clients see the same changes. Restarts preserve the world. Joining and leaving do not leak entities or background tasks.
Deliverable: a runnable local networked sandbox. A small material set is acceptable on the first pass; it does not satisfy the full-catalog requirement.
## Stage 3. Control API and dedicated MCP
- A shared API for reading, editing, history, and diagnostics; MCP runs as a separate process over stdio.
- Material search, bounded region reads, batch construction and templates, preview/commit, and undo that protects other edits.
- Resources describing coordinates and capabilities; structured responses and clear errors.
- Visual feedback: an image with an explicit rendering type and revision; a topographic preview is not presented as a game-client screenshot.
- Test worlds, entities, arena management, and metrics. Control API authorization; the token never enters client code or logs.
- A real MCP session: initialize → list → build → inspect/capture → undo; a connected client sees the result.
Deliverable: a complete automated construction workflow with verification of the result.
## Stage 4. Content and bidirectional compatibility
- Verify the complete catalog source specifically for Java 26.2; generate it reproducibly and retain data provenance and version.
- Implement shapes, collisions, and rendering for block families; track unsupported features separately. Base entity definitions and persistent properties.
- Import Anvil/NBT in chunks with a bounded memory budget; handle dimensions and additional NBT.
- Export worlds to the target version; an accuracy mode and explicit substitutions, sidecars for unsupported data, and correct provenance invalidation after edits.
- `.schem` import/export; test fixtures; reopen exports with an independent reader and, when the target game is available, with the game itself.
Deliverable: verified interchange of the declared data with a coverage report. A complete list of names without shapes/data does not complete this stage.
## Stage 5. Unified packages and a complete minigame
- A versioned manifest with dependencies, client/server parts, sizes, hashes, licenses, and capabilities.
- A small set of original base assets. Verified client resource downloads and caching; required resources are separate from optional quality enhancements.
- The first extension through the unified format, with working client and server behavior. Declarative configuration is not described as a full environment for arbitrary modules.
- Spleef: waiting → countdown → play → elimination → winner → reset. Multiple independent arenas use a shared map.
- Repeated matches, disconnects, joining during play, returning to the lobby, and settings that survive restarts.
Deliverable: friends can play a complete match, and another developer can add an extension through a documented interface.
## Stage 6. Acceptance, measurements, and delivery
- Check every criterion in `ACCEPTANCE.md`; keep a separate record of actual coverage and limitations.
- Measure RSS/peak memory, section storage, caches, network queues, p95/p99 tick time, and behavior after repeated matches and restarts.
- Compare with Paper only when a comparable test setup is available. Until then, publish the project's own figures without claims about multiplicative improvements.
- Startup instructions, MCP configuration, API/package-format documentation, licenses, the source archive checksum, and the Git commit.
- Production publishing and launcher changes are separate integration work after local verification.
Deliverable: a reproducible local MVP release with an accurate report, a source archive, and known limitations.
## Working order after planning
Start with stage 1. Protocol and client preparation against the agreed contract, as well as catalog/converter research, can proceed in parallel. Integrating these parts, changing shared interfaces, and verification happen sequentially. Save the result after every stage; do not leave the only copy in a disposable environment.