Dated source reference. Current release status: handoff state. Full original relative paths are in the developer archive.
Roster Studio starting rosters
October18,2026 UTC. Web0.3.0.dev2 adds four private starting rosters to New workspace and to existing empty workspaces at https://openhoops.io/rostereditor. The separate import-your-own option remains. No original or already-imported workspace is replaced.
| Choice | Teams | Players | Uniforms | Contents |
|---|---|---|---|---|
| Base game · Default | 105 | 1,665 | 579 | Byte-identical preserved stock roster |
| Base game · Blank | 105 | 1,665 | 579 | Placeholder team/player names and cleared player nicknames; original gameplay defaults |
| Expanded · Default | 905 | 13,665 | 3,779 | Original105 teams plus800 editable templates,15 distinct assigned players/four uniforms per added team |
| Expanded · Blank | 905 | 13,665 | 3,779 | Same expanded structure with placeholder team/player names and cleared player nicknames |
The user explicitly selected Keep sensible defaults. Blank changes name labels, preserving ratings, coaching, rotations, membership, uniform asset identifiers and other non-label fields. Native uniform Name is an asset identifier rather than a free-text label and is preserved. Blank does not erase history/stats/staff or zero every table. Both expanded choices reuse stock artwork and require the existing OpenHoops hook when loaded in game. They are editable templates, not finished college rosters. Existing native12-active-player and finite capacity limits still apply.
Source, identities and verification
Private asset manifest records original/source hashes, all four native/archive hashes, counts, health checks and unchanged-field counts. Generation runs on Dell using the exact accepted55t writer. All four have zero health errors/warnings. Blank comparison checks625,497 base and5,103,097 expanded non-label values against their defaults. New players have12,000 separate physical records and ASA/ID2 identities, disjoint from original ASA identities. Every added team resolves exactly four uniforms. Generation avoids orphan stock uniform GIDs when assigning new team graphics identifiers.
The historical37 capacity specimen failed the new stricter ASA identity assertion; it is retained as capture-time load/save evidence and is not the new starter. Early58 generation checks also caught the native uniform Name encoding and orphan-uniform GID collisions. These failed candidates remain isolated. Current starters were regenerated from untouched stock with the current writer and explicit uniform-GID allocation. None of those failures changed production or original files. No new native game run is claimed for these exact starters; prior native writer/capacity evidence retains its original scope.
Final deployed source58c, archive c4c846f5214d9823d5b1734edc3680bf98969d99693748674f4c1ef43da88da5, Worker 2bb99237-86cb-4722-891d-4dc8810f5090. Deployment. Source58c changes only dashboard dialog spacing relative to functionally tested58b; 118 unchanged inputs. Python writer payload remains cf05198c008c55a7ea7eee3a89787382139a4ffc536e99ac1d003cd3f1c75d4d; no writer/API/native version change or new public Windows package.
- 29 coordinator cases: actual project/account classes, SQLite and checked Python writer; all choices, exports, idempotency, incompatible choices, pending setup, account acknowledgment retry, missing/corrupt asset and R2/SQL failure injection, private copies and permission/archive refusal.
- 25 local HTTP cases: actual local Worker, private R2 and account-owned starter creation with retry; 25 production HTTP cases: authenticated empty-workspace initialization, counts/names, receipts, no replacement, private access and actual exports for all four choices.
- Writer readback and eight local/cloud export comparisons: every exported native byte matches its verified template.
- 46 existing account cases and 28 frontend cases pass on current58b. Production account email56 evidence remains history; sending/authentication was not changed or re-certified in58.
- Build58b, exact live assets/version, browser verification and preservation record remaining scope.
Isolation and retry behavior
Private, content-addressed ZIPs live under starters/v1/{sha256}.zip in the existing private R2 bucket. No public asset/download route serves them. The coordinator verifies size/SHA before sending the archive to the unchanged checked writer. A normal atomic snapshot/history/receipt commit creates revision1; permissions, row epoch, archive/recovery guards and browser journal apply. An editor/owner may seed an empty workspace; a viewer may not. Templates cannot replace loaded rosters.
Account creation reservations retain the selected starter durably and reject changing the choice under an existing creation ID. A missing writer/asset/save leaves pending setup retryable with its original choice. Lost account-library acknowledgment resumes the same workspace without duplicating its initial roster. Library Finish setup preserves that choice. Each workspace gets independent immutable revisions and metadata; template bytes remain unchanged after edits. Ordinary imports, backups/recovery and legacy private links remain available.
March Madness Legacy is identified by workspace3a5fdd78-c8fb-47a0-ba24-b9eaa147f357. Its bare link does not grant this browser access: it redirects to sign-in. No access was bypassed and it was not seeded automatically. Its owner can open the empty workspace, choose Expanded · Blank or Expanded · Default, and click Use starting roster. The original separate OpenHoops College Rosters workspace remains empty/r0.
Mac usage stayed editing/storage/SSH/existing Cloudflare login/native Paseo. All generation/builds/tests ran on Dell without game/API/MVP/shared desktop input. Historical packages,95 original saves in both reference copies, stable35/restored50 and four hosts remain protected. Temporary QA workspaces are archived, local QA services/forward stopped; production continues as authorized. No agents or automation created.