Files
transcience/docs/ROADMAP.md
T
claudeandClaude Opus 5.5 3d1b5da72b Fix the smoke test's intermittent failure: a bot taking the wrong portal
The long-standing smoke flake -- failing now and then, always first in a
pre-push hook whose logs were discarded -- finally failed with its logs
kept. bot1, whose account picks the Proving Grounds, had gone into the
Choir Vault, so "the proving grounds opened" never matched.

The bot wandered a full-speed Lissajous for 90 of every 120 ticks in the
hub, then walked toward its entrance for 30 holding interact the entire
way. The three entrances sit in a row, so a wander that happened to end
near the middle one sent the bot bound for the right-hand portal across
the Choir Vault's ring with the key down, and in it went. Where the
wander stopped depended on network timing, which is why it was
intermittent and why it never reproduced on demand.

The bot now walks straight to its own entrance and presses interact only
while standing on that one. Six consecutive smoke runs pass.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 13:12:43 +02:00

4.7 KiB

Status and roadmap

Read this first when picking up work. It maps every feature in the design brief to its current state and the files that implement it, so you can find the relevant code without re-reading the whole project.

Art and audio source packs, and their licence status, are recorded in ASSETS.md — the packs themselves are not in git.

Design decisions that are already settled — and the reasoning behind them — live in DECISIONS.md. Check there before asking the user something that may already have an answer.

Legend: done · partial (works, with a stated gap) · todo (not started)


Where things stand

Every stage in the original brief is built. The MVP asked for a twin-stick bullet hell, server-side hit validation, predictable enemies, an adaptable boss, a lobby hub with dungeon runs, and an emergency escape. All of that exists, plus the four stages that followed: characters and permadeath, inventory and loot, upgrades, and a second boss that moves.

So there is no obvious "next ticket". What follows is the honest list of candidates, none of which the user has chosen — ask before starting one.

Candidate Why it might be next What it needs first
Replace LocalAuthProvider It is the one thing standing between this and a server anyone else can reach. Any client can claim any account id. Nothing technical — it is one AuthProvider subclass. Needs a decision about Steam vs something else.
A reason to keep playing past level 15 Levels cap, --depth never rises in play, and a cleared dungeon gives experience and a potion. The long loop is missing. Open question 1 below.
An economy Loot only drops from kills; nothing sells anything. The quartermaster is the obvious shop and has no currency to take. Open questions 2 and 3.
Impact and hit feedback Art.IMPACT is loaded and validated and nothing plays it. No hit flash, no screen shake, no death animation. Nothing. This is the cheapest visible win.
Replace the two non-redistributable packs Bullet and FX art is local-only and non-commercial, which blocks both a public repo copy and a commercial release. CC0 or CC BY replacements. See ASSETS.md.
Transport encryption ENetMultiplayerPeer supports DTLS. Required before a public server, not before then. Follows the auth decision.

Each stage below also carries its own Known gaps section — those are smaller and more specific than the table above.

The smoke flake (diagnosed and fixed)

tools/smoke.sh failed intermittently, always first in a pre-push hook, whose logs were thrown away. With KEEP=1 the third occurrence was readable: bot1, whose account picks the Proving Grounds, had gone into the Choir Vault. The bot wandered for 90 of every 120 ticks in the hub and then walked to its entrance holding interact the whole way; the three entrances sit in a row, so a wander that ended near the middle one carried it across the wrong ring with the key down. Which dungeons opened depended on where a timing-dependent wander stopped. The bot now walks straight to its own entrance and presses interact only on it (ClientRuntime._bot_input). If smoke fails again, push with KEEP=1 git push so the logs survive.

Open questions for the user

Genuinely unspecified. Do not guess at these — each changes the design, and several have no obvious default. The seven questions that blocked Stage 4 were answered and are recorded in DECISIONS.md; these are what is left.

  1. What advances dungeon depth? --depth is a dev flag and nothing raises it in play. Depth already drives map size and could drive difficulty and rewards. Without an answer there is no progression past level 15.
  2. Where do items come from outside a dungeon? Loot only drops from kills. If the hub should sell potions, that is the quartermaster's second job.
  3. Is there a currency? Nothing drops money and nothing costs anything. A shop needs one; so does any reward for a cleared run beyond experience.
  4. Should items stack? Four potions currently take four slots, which makes a four-slot bag small. Stacking is a count byte per slot plus a rule for splitting one — neither is hard, and both change the UI.
  5. Does a dungeon ever get harder within a run? Enemies are placed once at generation and never reinforce. That is a deliberate decision (DECISIONS.md), but it means a slow party is never punished for it.
  6. What happens to a party when one member dies? Permadeath removes them to the roster screen while the run continues without them. Nobody has said whether that is right.