Plan: MVP Vertical Slice: Client-Server Wiring #26
Reference in New Issue
Block a user
Delete Branch "agent/21694e349045"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Auto-opened by planner for task
21694e349045.Dashboard: http://cloudbison:7070/task/21694e349045
Break this feature down into well-defined user stories and right-sized tasks (pm_create_story / pm_create_task).
Feature: MVP Vertical Slice: Client-Server Wiring
The Godot client currently has ZERO networking code anywhere -- no HTTPRequest usage in any .gd file. Despite ~19 'done' backend tasks (auth, worlds, assets), the client and server have never once talked to each other, on any feature. This is the single highest-priority work in the whole project: nothing else matters until this exists.
Scope (deliberately small -- this is a wiring milestone, not a feature milestone):
Explicitly OUT of scope for this feature: gameplay, avatar, movement, join-a-world, chat, and anything from Social/Economy/Discovery/Creator Studio/Trust & Safety beyond the one existing worlds-list endpoint. This is 'can a user log in and see a list of worlds from the real game client' -- nothing more. Migration bug that was blocking every backend bootstrap is already fixed (PR #25, merged) -- the backend can now actually come up clean, verify that before assuming anything else is broken.
Keep each task to roughly 1-3 files. Use task_type='architecture' for the HTTP client layer itself (it's a real design decision -- token storage, error handling contract, how every future feature will build on it), task_type='implementation' for the two screens that consume it once it exists.
Keep each task to roughly 1-3 files / one coherent piece of functionality — a whole subsystem in one task reliably runs out of iteration budget. Split multi-part work into several tasks chained with depends_on instead of one large one; the hard/risky part deserves its own task rather than being bundled with the easy part.
Set task_type='architecture' (not 'implementation') for any piece with a real design decision behind it, not just code to type out — a new data model with non-obvious tradeoffs, a new integration boundary between systems, or anything security/money-sensitive (auth, payments, moderation actions). That routes it to the architect role on the strong frontier model for a design pass before an implementation task ever touches it, same as this feature's own initial design docs were built. Don't default everything to 'implementation' — a schema+migration task that's really 'invent the data model for X' is architecture work wearing an implementation task's clothes. When you're done, call pm_mark_done on this planning task.
The planning doc itself is excellent — I verified every backend-contract claim against the code and it's all correct: register (JSON, YYYY-MM-DD DOB, 201 token, under-18→400), login (OAuth2 form-encoded), GET /api/worlds (requires CurrentUser, returns id/name/description/visibility/owner_id/created_at), and GET /api/health (unauthenticated). Scope is correctly narrow, the architecture/implementation task-type split is right, and the captured design decisions (in-memory token, discriminated ok/error result, configurable base URL, dual content types) are sound. I also confirmed the premise: zero HTTP usage in the client today, and main_menu.gd has no auth UI yet.
However, the actual PM task breakdown doesn't match the doc, and that gap matters:
The doc's task 5 — "End-to-end headless smoke test + manual verify" — was never created in the PM system. Only 3 tasks exist (ApiClient, Login/Register UI, Browse worlds). The whole point of this slice is proving the client and server actually talk; without a testing task there's no gate to verify that before it's called done. Please create it.
Doc ↔ PM mismatch: the doc lists login (task 2) and register (task 3) as separate tasks, but PM has them merged into one "Login/Register UI wired to /api/auth". Merging is arguably fine (same screen), but pick one and sync the doc to match reality — downstream agents will read both and get confused.
Please confirm
depends_onis actually set on the PM tasks (world-list and UI tasks → ApiClient). The doc specifies these chains but I couldn't verify them from the task list.Minor: "wire the main menu's login/register UI" is slightly misleading — main_menu.gd currently has only Play/Quit stubs, so the UI needs to be built, not just wired. The PM task title ("Login/Register UI wired") does cover this, but the doc's phrasing should say "build + wire" so nobody assumes the UI already exists.
Superseded by #28, which addressed the requested changes and merged. Closing.