OPENHOOPS / 2K14Final team archive · November 9, 2026Reference libraryChecksums

Dated source reference. Current release status: handoff state. Full original relative paths are in the developer archive.

Collaborative browser roster editor

Roster feedback60, live web0.3.0.dev3/source60k/Workerc4824824-5169-40ef-933e-69adca43a88e, fixes exported unset-rank reimports and selected-cell recovery refresh, adds All rows with windowed rendering, spreadsheet TSV/delimiter detection and editable/retryable preserved CSV drafts.148 Windows writer cases,47 exact-payload grid/server cases,35 frontend cases,10 local/13 production HTTP cases and actual live browser recovery/readback pass. Existing user projects/drafts remain protected;50,000 changed cells per edit/500,000 loaded cells are explicit bounds. Presentation and full RED MC semantic/career/IFF/physical-device coverage remain separate.

Roster metadata52 connects optional roster metadata to any external client. Private API0.2.0.dev52/HTTPv1 keeps ABI26/event4/profile4/court3 and all67 native inputs unchanged. Its539-test/98-schema source now has real native61a acceptance: the last two teams of the hosted905-team export bind24 players at phase4, retain six metadata-only entries, expose standard/custom fields and overrides to an independent live scorebug consumer, and finish naturally4–3 with identical frozen context in reconciled independent deliveries. Reopening the persisted real-game database retains context/ACKs and delivers to a third consumer. The broker reads companions; the DLL does not parse or render them. No new DLL or public Windows package.

Current web0.3.0.dev2/source58c adds four starting rosters to account creation and existing empty workspaces. Base/default and blank have105 teams; expanded/default and blank have905. Blank retains sensible defaults.29 coordinator cases,25 local and25 production HTTP cases,46 account regressions and28 frontend cases pass; all four exports match verified template bytes. Live picker. This supersedes the current-version identity below; account milestone56 evidence is retained.

October18,2026 UTC. https://openhoops.io/rostereditor now supports public email accounts and private shared workspaces. Anyone can verify their email, create a workspace, import a supported PC roster and invite their team. No setup key or local installation is required. The homepage remains reserved; historical Windows downloads and the game/API are unchanged.

Earlier account milestone56 source and evidence

Web 0.3.0.dev1, source56d, archive SHA256 a3e9bbf5595731623848e335139f51e026ecbe190a6332104f6353f11c9ad164, Worker 9861efef-0ee1-452f-a01d-c40828f1dad0. Deployment uses exact accepted55t writer payload cf05198c008c55a7ea7eee3a89787382139a4ffc536e99ac1d003cd3f1c75d4d. Writer identity verifies18 unchanged Python/runtime-builder inputs against186-test55t. No writer/native rebuild or game campaign was necessary. Combined acceptance, functional browser checks and preservation record final scope and cleanup. Source56e is documentation-only relative to deployed56d, with111 unchanged inputs and four Markdown changes; Dell comparison. Earlier55 accepted authoring/905-team tests retain their scope; the 55 checkpoint and acceptance remain capture-time evidence.

Current evidence Scope
46 local account cases Actual Dell Worker/SQLite/R2/Python; synthetic local-only mailbox
46 production account cases Actual Cloudflare sending, controlled inbox receipt, cookies/CSRF, memberships, WebSockets, account recovery, full backup/resumable restore, corruption refusal and own-change attribution
40 production legacy cases Existing capability links, merge/conflict/receipts, CSV/ZIP, comments/history/undo and real Python writer
41 local legacy cases Same legacy coordinator paths plus history beyond100 revisions;56d changes only restore completion recognition relative to56c
12 injected failures Real production project class, real local SQLite/Python, simulated R2 faults: row/part/completion/final-commit retry and reconstruction; not provider chaos testing
28 frontend cases Actual frontend modules in simulated DOM/IndexedDB; scoped functional behavior, not rendering certification
16 route/access cases Exact live JS/CSS, live version, original empty user workspace, legacy redirects/API, private refusal, homepage
Build Generated actual-binding types, syntax/staging and production dry-run on Dell
Email setup User-approved OAuth, dedicated sender DNS, real controlled delivery; no personal inbox or routing/apex MX change

Accounts and day-to-day workflow

Email sign-in sends an eight-digit single-use code, valid10minutes with five guesses. The dedicated sender is signin@accounts.openhoops.io. Profiles are created after verification; no password is stored. HttpOnly/Secure/SameSite cookies hold sessions while the server stores hashes. Same-origin/CSRF checks protect cookie writes. An optional one-time downloadable offline recovery key handles lost inbox access; using it rotates the key and revokes older sessions. Display names are user chosen; email control is verified, not legal identity. Signout can target this device or all sessions.

My workspaces follows the account across devices. Create, search, sort, rename, folders, favorites, owned/shared/archive filters and archive/reopen are self-service. Creation reservations are idempotent and expose incomplete setup for retry. Archive preserves data/history/members and blocks roster edits until reopened. Named invitations support owner/editor/viewer, seven-day expiry, acceptance/decline/cancel, pre-signup inbox delivery and role/removal management. Project membership remains authoritative. Role changes and signout close old collaboration access. The last owner cannot be removed.

Existing private owner/edit/view links work without accounts. Explicit Save to My workspaces adopts an owner link as named ownership; saved editor/viewer links retain revocation dependency. Local browser shortcuts remain separate from the cloud library. The original user owner workspace is still empty and has not been adopted into a QA account. There is no public workspace listing or anonymous upload.

Roster authoring and live collaboration

All39 named native tables and91 optional college fields remain in the same grid with typed/raw enum/RGB edits, column presets, filters/sort, rectangular paste, all/filtered/selected global changes, native/metadata CSV, custom fields, roster/season declarations, team/row cloning/import/reference tools, health/comparison/conference reports and bounded TURK. Unsupported native transforms/game-mode formats are refused. Names, high school/previous college, D1/D2/D3/NAIA and rankings are optional metadata; no redshirt fields.

Cell saves check original values and row epochs; unrelated cells can merge while same-cell conflicts refuse atomically. Bulk/structural operations require exact revisions. Immutable command receipts make retries safe. IndexedDB journals submitted commands before send; cell drafts survive reload. Failed storage blocks transmission and conflicts remain reviewable. This does not guarantee recovery of every unsent modal or offline editing. Clearing site data removes local drafts/capability shortcuts, while the cloud library remains account data.

Named edits record server-verified account ownership separately from client IDs; another member cannot impersonate an author by copying a client ID. History's mine permits own-change undo from another device, including recovered workspaces. Anonymous history retains client-scoped ownership. Inverses preserve unrelated teammate edits and refuse changed same-cell values. Sequential browser Undo/Redo, paged history/change details, original/historical downloads and live comments retain previous behavior. ROS/EXTRAS CSV fingerprints refuse stale metadata sheets; text IDs preserve leading zeros.

Complete workspace backup and recovery

Full backup downloads .ohworkspace.gz, containing original/current files, all saved revisions/patches, receipts, comments, members, invitations and hashed link permissions. It excludes plaintext link secrets and global account sessions/recovery keys. The separate ordinary ZIP still transfers one ROS/companion version for the game. Both remain available.

The backup captures frozen SQL rows and immutable R2 references while editing continues. Streaming records use object checksums and a final hash chain. Restore creates a separate empty workspace; partial uploads never publish a roster head. Bounded, resumable, idempotent batches survive interruptions, R2 completion response loss and SQL failure. A lost final response/reload recognizes an already-completed restore. The source remains unchanged. Default is a private copy retaining access records without activation; saved memberships/link hashes are reactivated only by explicit checkbox. The copy has a new ID/URL, so old share URLs still open the original. Hashes cannot recreate missing link secrets. Recovery owner access remains present.

This delivers complete workspace recovery, not a service-wide administrator/account database restore or automated retention policy. Incomplete staging data remains durable; no automatic pruning is enabled. Operations and contract document finite account/request/object limits and private handling.

Runtime and explicit boundaries

Production remains Cloudflare Worker/assets, per-project SQLite Durable Objects, private R2 and the unchanged isolated Python managed container. New per-email Account and per-IP Limiter objects add identity/library state; no global auth coordinator or Dell production dependency. The existing custom1CPU/3072MiB/2000MB processor sleeps after five minutes idle. Prior55 latency samples are historical measurements, not an SLA. Email sender onboarding changed only the dedicated accounts subdomain. Actual sign-in/invitation emails were received by controlled Mail.tm QA inboxes; Mail.tm is not a product dependency. Email quota fields were null, not evidence of an unlimited/free allowance. No billing plan changed.

Native Paseo verifies real live UI flows; screenshot capture still returns screenshot_no_frame and strict CSP blocks tool string evaluation. No alternative browser or weakened CSP is used. Cloudflare injects its analytics beacon into HTML, so route identity asserts exact JS/CSS plus HTML controls rather than a byte-identical rewritten HTML body. Pixel/physical cross-browser certification, maximum opaque-payload memory and service-wide disaster recovery/retention remain unverified.

Full RED MC semantic/file-format/game-effect parity is not established by the39-table inventory. Career/IFF, unsafe transforms, real supplied community-roster/custom-art acceptance, native/API consumption of optional companions and native90+ conference standings/schedules/playoffs remain outside delivered scope. Presentation remains deferred. All builds/tests used Dell isolated stages; Mac editing/storage/SSH/existing login/native browser only. No game/API/native/public ZIP/MVP/shared desktop input, agents or recurring automation was part of this milestone.

Subsequent browser capture57 follow-up

Native Paseo full-page capture now produces clean actual screenshots at bounded viewport sizes: dashboard1100×1200 and original empty owner workspace1100×800. Diagnosis records ordinary viewport failure even after unlock, oversized full-page strip repetition, and the verified workaround. No restart/update/Paseo installation or configuration change, alternative browser, weakened CSP, application deployment or Dell runtime was required. Original owner access/r0 and viewport preferences are restored; diagnostic tabs are closed. This supersedes the absolute screenshot-unavailable limitation for these captured surfaces. It does not certify all editor/account dialogs, every viewport or physical cross-browser behavior. Historical56 source/evidence remains unchanged.