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.

College roster authoring standard — version 1

Private editor source 0.1.0.dev8 adds the College Fields form and bulk metadata CSV. The hosted dev7 download is unchanged. The machine-readable contract is college-fields-v1.json; the companion container remains extension format 1. These versions are independent of API/native ABI versions.

The current browser editor exposes these same fields directly in the grid, column presets and bulk tools. Its mixed CSV starts ID,ROS_SHA256,EXTRAS_SHA256,..., protecting both native and metadata revisions; reexport after teammate changes. This web contract supplements the preserved desktop instructions below. The91-field vocabulary and extension format remain unchanged.

All 91 fields are optional. Start with the Recommended view; use All fields or a group when needed. Unknown information should stay Not set or Unknown, rather than being filled with invented values. No new field changes native gameplay, selects a rules profile, loads artwork or renders presentation. The hook/API do not consume this vocabulary yet.

Start here

  1. Open the roster and select a team or player record.
  2. Open Tools → College fields, or the College fields toolbar button. The form offers field descriptions, examples, enum dropdowns, true/false choices and a color picker. Filtering never discards hidden edits.
  3. Not set removes a field. Unknown stores an explicit JSON null. Value stores the value you enter. Opening the form creates no defaults or guessed information.
  4. Apply the changes. They share the editor's Undo/Redo and change review.
  5. Use Save a copy and keep the .ROS and .ROS.openhoops.json pair together. Do not rename or attach an unmatched companion to another roster. Native game saving can invalidate the pair; no automatic reconciliation is claimed.

Tools → Roster / season fields edits dataset title/version/credits, season context and the default ID namespace. Existing native names, ratings, positions, jersey numbers, team assignments and colors remain in their existing tables. Optional display fields describe future consumer overrides; leave them unset when native values suffice.

Entity Useful starting fields Optional additions
Roster Dataset title/version, season start year, ID namespace Credits, data date, season label, overall competition context
Teams Stable ID; NCAA/NAIA association and NCAA division; school name; conference ID/name/abbreviation Preferred national ranking, separate AP/coaches/NET values, entering-game records, tournament seed/region, display branding
Players Stable ID, basketball class, high school, previous college, hometown Earlier colleges, recruiting source/stars/rank, academic context, declared availability, portrait key
Staff Stable ID and native name/team assignment Display name, descriptive role, alma mater, first year, provided career totals
Arenas Native arena selection and name Venue location/capacity/timezone and display name/logo key
Uniforms Native graphics/texture association Friendly name, home/away/alternate role, season label, maker, display colors
Schools table Existing alma-mater institution record Institution identity, display names/location/branding. This table is not repurposed as conferences.

Player class, availability, seasons played/remaining and transfer background are creator declarations. The editor does not calculate eligibility, enforce participation, set injuries or rewrite lineups from these values. High school and previous college are separate fields. There are no redshirt fields in this vocabulary.

NCAA D1 / D2 / D3 and NAIA

Set these team fields for each school in a mixed roster:

School level org.openhoops.competition.association org.openhoops.competition.division
NCAA D1 ncaa d1
NCAA D2 ncaa d2
NCAA D3 ncaa d3
NAIA naia not_applicable

These values have no relationship to the native NBA Division column. A roster-level competition value describes dataset context; it does not silently assign all teams in a mixed dataset. Individual team values are explicit. Leave unknown information unset/null; do not identify NAIA as an NCAA division.

Stable identities and 90+ conferences

Use string IDs, for example team north-university and conference northern-conference, in a creator-owned ID namespace such as com.example.college. IDs are case-sensitive, preserve leading zeros and must remain stable when names or physical rows change. An ID namespace is the creator/dataset identity; an entity ID is not an executable address or a physical row number.

org.openhoops.identity.namespace on a record overrides the roster namespace. An absent record namespace inherits the roster value; an explicit null means unknown and suppresses that fallback. The record's identity.id never inherits. A previous-college ID and conference ID use the containing record's effective namespace. This version does not resolve cross-namespace links or infer identity from a name.

On every team in a conference, set the same conference ID, name and abbreviation. Optional conference subdivision is a label such as East/West; it is distinct from competition division. Schools can have different NCAA levels and separate conference identities without changing native packed fields. A conference's identity is the pair (ID namespace, conference ID). Only declared members are listed; empty conferences need a future separate package/app registry.

For an independent, explicitly set org.openhoops.conference.independent=true and leave conference identity fields unset/null. Missing conference information alone means unknown, not independent. A team with independent=false and no ID is still missing conference information.

Tools → Conference declarations groups teams by those IDs and reports conflicting conference labels, duplicate stable entity IDs and missing namespaces. Check roster includes the metadata warnings. No realignment, scheduling, standings or native playoff behavior is inferred or changed. Metadata grouping has no 90-conference cap within the existing companion/record bounds.

The native field is only four bits. Original instruction inspection and bounded execution show regular division IDs 0–2 map to one native conference category, 3–5 to the other, and 6–9 to other. Unused IDs 10–15 exceed the lookup's valid dispatch entries. Expanding native association/standings/scheduling/playoffs therefore needs broader recovery and changes; changing a byte or renaming a conference is insufficient. See conference research.

Rankings and changing season data

org.openhoops.ranking.national_rank is the preferred positive numeric rank for a future consumer. Add national_source (for example ap or coaches) and national_as_of (YYYY-MM-DD). national_status=ranked requires a rank. unranked and unknown require that numeric rank be absent/null. A positive rank by itself supplies a rank; missing status never automatically means unranked. Zero is not a national rank.

AP and coaches polls also have optional separate rank/status/date fields. NET is a separate metric rank. None automatically replace the preferred national value. No polls or proprietary data are downloaded, calculated or supplied. A tournament seed is a separate postseason value.

The catalog marks changing fields with lifecycle=season_or_match: rankings, season records, postseason context, availability, class/season participation and staff career totals. They are authored baselines. A future client/consumer must explicitly advertise support and its match-override behavior before these fields can be promised as live features. This task does not introduce runtime overrides or a scorebug. A future match value must not silently mutate the source roster.

Bulk metadata CSV

Select Teams, Players or another supported table. Tools → Export college CSV exports either Recommended or All standard fields, across the entire selected table. The CSV contains ID, ROS_SHA256, read-only NativeLabel context and fully qualified field keys. It is not limited to the visible editor page or current filter. Imports address existing physical rows and require the same native roster revision hash; they do not match people or teams by names.

  • Blank cell: leave the existing value unchanged.
  • @unset: remove the field.
  • @unknown: explicit unknown/null.
  • Text starting with @: prefix another @, so literal @unknown becomes @@unknown.
  • Boolean: true / false. Integer: whole decimal number. Text enums: use the catalog's exact lowercase values.
  • Do not modify ID or ROS_SHA256 to transplant metadata between unrelated rosters. Export again after native/row edits. NativeLabel is context only and never writes a native name.

Tools → Import college CSV validates the complete file before applying it as one undoable transaction. Wrong-scope columns, duplicate rows/headers, stale roster hashes, invalid dates/types or contradictory rank values refuse the whole import. Custom fields not mentioned in the CSV remain intact. Files are bounded to 16 MiB and export refuses existing destinations. A partial CSV can contain a subset of rows and standard columns, while retaining ID/hash columns.

CLI equivalents, using the same writer:

python run.py college-fields --section 10
python run.py export-college Source.ROS Teams.csv --section 10
python run.py export-college Source.ROS Players.csv --section 3 --profile all
python run.py import-college Source.ROS Teams.csv Edited.ROS --section 10
python run.py export-college Source.ROS Season.csv --profile all
python run.py conferences Edited.ROS

Custom fields remain available through Extra fields using a namespace controlled by the mod/app, such as com.example.scouting.role. They do not require registration here. The org.openhoops namespace is reserved for published OpenHoops contracts. Unknown/future fields are preserved without assigning them invented semantics. Values remain scalar text/numbers/booleans/null; complex dynasty state belongs in an app document.

Complete version-1 field catalog

The following table is generated from the machine-readable catalog. Every row is optional and accepts explicit null. Examples are fictional authoring examples, not current season data. Scopes: roster, team, player (including native player-template tables), staff, arena, uniform, school (native Colleges table).

Field Type Scope Meaning
org.openhoops.identity.id text roster, team, player, staff, arena, uniform, school A creator-owned stable ID, independent of physical ROS row numbers. Use with ID namespace; never reuse it for another entity.
org.openhoops.identity.namespace text roster, team, player, staff, arena, uniform, school Identifies the creator or dataset owning stable IDs. An absent record namespace inherits the roster namespace; explicit null remains unknown. Conference and previous-college IDs use this namespace.
org.openhoops.display.name text roster, team, player, staff, arena, uniform, school Optional full display name for consumers. Leave unset to use the existing native name.
org.openhoops.display.short_name text team, player, school Optional compact name for future graphics; does not change the native name.
org.openhoops.display.abbreviation text team, school Optional compact abbreviation. Use the existing native abbreviation unless a consumer needs another form.
org.openhoops.display.pronunciation text team, player, staff, school Human-readable pronunciation guidance, not synthesized speech or a native audio identifier.
org.openhoops.dataset.title text roster Human-readable title of this authored roster.
org.openhoops.dataset.version text roster Creator-chosen content version; separate from the OpenHoops vocabulary version.
org.openhoops.dataset.author text roster Creator or roster-team attribution.
org.openhoops.dataset.source text roster Human-readable source or credit for the authored data.
org.openhoops.dataset.as_of text / date roster Date of the roster data, in YYYY-MM-DD form.
org.openhoops.season.start_year integer roster Calendar year in which the represented basketball season begins. No eligibility or schedule calculation.
org.openhoops.season.label text roster Optional display label; the start year remains the machine-readable season identity.
org.openhoops.competition.association text: ncaa, naia, njcaa, other roster, team NCAA, NAIA or another association. Team values can describe a mixed-association roster. Metadata only.
org.openhoops.competition.division text: d1, d2, d3, not_applicable, other roster, team NCAA D1/D2/D3 are d1/d2/d3. Use not_applicable for NAIA rather than inventing an NCAA division. This is separate from native NBA Division.
org.openhoops.competition.category text: mens, womens, mixed, other roster, team Optional category for consumers; does not select or enforce a game rule profile.
org.openhoops.school.name text team, school Institution name, separate from the team mascot.
org.openhoops.school.mascot text team, school Human-readable team nickname.
org.openhoops.school.city text team, school City used for institution context.
org.openhoops.school.region text team, school Human-readable state, province or region.
org.openhoops.school.country text team, school Human-readable country name; not a nationality eligibility rule.
org.openhoops.conference.id text team Stable conference ID in the team ID namespace. Use the same ID on every member; never store a native ROS row number here.
org.openhoops.conference.name text team Full name of the basketball conference for this season. Repeat consistently for teams with the same conference ID.
org.openhoops.conference.abbreviation text team Short conference label used by future clients.
org.openhoops.conference.subdivision text team Optional internal grouping such as East or West; independent of NCAA competition division.
org.openhoops.conference.independent boolean team True explicitly declares no basketball conference. Leave conference ID/name/abbreviation unset for an independent.
org.openhoops.conference.logo_key text / asset_key team Opaque future asset-package key. Does not load an image or accept a filesystem path.
org.openhoops.ranking.national_rank integer team Preferred rank for future scorebugs. Positive integers only; null is unknown. Use status=unranked explicitly for an unranked team.
org.openhoops.ranking.national_status text: ranked, unranked, unknown team ranked requires a positive rank; unranked and unknown cannot carry a numeric rank. Missing rank/status never means unranked.
org.openhoops.ranking.national_source text team Poll or ranking source selected by the creator or app, for example ap or coaches. No poll data is supplied by OpenHoops.
org.openhoops.ranking.national_as_of text / date team Date this preferred rank applies, in YYYY-MM-DD form.
org.openhoops.ranking.ap_rank integer team Optional separate poll rank. Does not automatically replace the preferred national rank.
org.openhoops.ranking.ap_status text: ranked, unranked, unknown team Explicit ranked/unranked/unknown status for this poll only.
org.openhoops.ranking.ap_as_of text / date team Date this poll value applies.
org.openhoops.ranking.coaches_rank integer team Optional separate poll rank. Does not automatically replace the preferred national rank.
org.openhoops.ranking.coaches_status text: ranked, unranked, unknown team Explicit ranked/unranked/unknown status for this poll only.
org.openhoops.ranking.coaches_as_of text / date team Date this poll value applies.
org.openhoops.ranking.net_rank integer team Optional creator/app-provided metric rank; separate from a poll or tournament seed. No metric is calculated or fetched.
org.openhoops.ranking.net_as_of text / date team Date the provided metric rank applies.
org.openhoops.record.wins integer team Creator/app-provided season record entering a match; not a replacement for native match statistics.
org.openhoops.record.losses integer team Creator/app-provided season record entering a match; not a replacement for native match statistics.
org.openhoops.record.conference_wins integer team Creator/app-provided season record entering a match; not a replacement for native match statistics.
org.openhoops.record.conference_losses integer team Creator/app-provided season record entering a match; not a replacement for native match statistics.
org.openhoops.record.as_of text / date team Date the provided season record applies.
org.openhoops.postseason.tournament text team Optional tournament context for this team. Does not create or seed a native tournament.
org.openhoops.postseason.seed integer team Positive seed within the named tournament; separate from national rank.
org.openhoops.postseason.region text team Optional tournament region label.
org.openhoops.college.class_year text: freshman, sophomore, junior, senior, graduate, other player Creator-declared basketball class, separate from academic standing. No automatic eligibility calculation.
org.openhoops.college.academic_year text player Optional academic standing when it differs from basketball class.
org.openhoops.college.seasons_played integer player Creator-declared history; no deduction or NCAA/NAIA policy is inferred.
org.openhoops.college.seasons_remaining integer player Optional creator/app-declared remaining participation. No eligibility decision or automatic enforcement.
org.openhoops.college.is_transfer boolean player Creator-declared transfer background for this roster season. Does not enforce transfer or eligibility rules.
org.openhoops.college.previous_college text player Most recent previous college name; not high school and not an NBA draft-history field.
org.openhoops.college.previous_college_id text player Optional stable institution/team ID in this record ID namespace. No automatic native team lookup.
org.openhoops.college.previous_colleges text player Optional human-readable older history, oldest to newest; use semicolons. Not a machine-readable list of identities.
org.openhoops.college.previous_college_season text player Human-readable season context for the most recent previous college.
org.openhoops.bio.high_school text player High school attended, separate from previous college.
org.openhoops.bio.high_school_city text player City of the listed high school.
org.openhoops.bio.high_school_region text player State, province or region of the listed high school.
org.openhoops.bio.hometown_city text player Creator-provided hometown; not necessarily birthplace.
org.openhoops.bio.hometown_region text player State, province or region of the listed hometown.
org.openhoops.bio.hometown_country text player Human-readable hometown country.
org.openhoops.bio.major text player Optional creator-supplied academic major.
org.openhoops.recruiting.stars integer player Creator-supplied scale: 0 explicitly unrated, 1-5 stars; missing/null is unknown. No recruiting data is fetched.
org.openhoops.recruiting.source text player Source of the provided recruiting assessment.
org.openhoops.recruiting.class_year integer player Calendar year of the provided recruiting class. Separate from basketball class.
org.openhoops.recruiting.national_rank integer player Positive recruiting rank from the stated source. Missing/null is unknown.
org.openhoops.availability.status text: available, questionable, doubtful, out, suspended, unavailable, unknown player Creator/app declaration for future consumers. Does not change the native injury state or remove a player from a lineup.
org.openhoops.availability.note text player Optional short display context supplied by the creator/app. No medical or rule decision is inferred.
org.openhoops.availability.as_of text / date player Date the declared availability applies.
org.openhoops.branding.logo_key text / asset_key team, arena, school Opaque future asset-package key. Data only; this does not load or publish artwork.
org.openhoops.branding.wordmark_key text / asset_key team, school Opaque future asset-package key. Data only; this does not load or publish artwork.
org.openhoops.branding.portrait_key text / asset_key player, staff Opaque future asset-package key. Data only; this does not load or publish artwork.
org.openhoops.branding.color_primary text / color team, uniform, school Optional future display color as #RRGGBB. Leave unset to use existing native colors; no native color is changed.
org.openhoops.branding.color_secondary text / color team, uniform, school Optional future display color as #RRGGBB. Leave unset to use existing native colors; no native color is changed.
org.openhoops.branding.color_accent text / color team, uniform, school Optional future display color as #RRGGBB. Leave unset to use existing native colors; no native color is changed.
org.openhoops.staff.role text: head_coach, associate_head_coach, assistant_coach, director, trainer, other staff Optional descriptive role; does not replace the native staff/team assignment.
org.openhoops.staff.alma_mater text staff College attended by the staff member.
org.openhoops.staff.since_year integer staff Calendar year the staff member started at the current institution.
org.openhoops.staff.career_wins integer staff Optional creator/app-maintained career total; no native statistics are replaced.
org.openhoops.staff.career_losses integer staff Optional creator/app-maintained career total; no native statistics are replaced.
org.openhoops.venue.city text arena Location of this venue; not a team conference or campus identity.
org.openhoops.venue.region text arena Location of this venue; not a team conference or campus identity.
org.openhoops.venue.country text arena Location of this venue; not a team conference or campus identity.
org.openhoops.venue.capacity integer arena Optional declared basketball seating capacity. Does not change the native crowd.
org.openhoops.venue.opened_year integer arena Optional calendar opening year.
org.openhoops.venue.timezone text / timezone arena IANA timezone name for future external scheduling; not a Windows zone name or a native clock setting.
org.openhoops.uniform.role text: home, away, alternate, throwback, special, other uniform Descriptive uniform category. Does not enforce home/away colors or change native uniform selection.
org.openhoops.uniform.season_label text uniform Optional season context for this uniform.
org.openhoops.uniform.manufacturer text uniform Optional creator-supplied maker label.
org.openhoops.uniform.notes text uniform Short creator guidance, for example intended special event. Does not create a selection restriction.

Windows verification

Private source53b passes148 Windows writer tests (101 existing writer +15 preparation +32 college), MS .NET compilation with warnings-as-errors,32 college cases against the independently assembled factual-catalog runtime, and16 production-EXE control/edit/save/fresh-open checks. Corrected player/team controls were visually inspected through service-session captures; this is not physical-user desktop certification. The original-instruction conference fixture adds49 bounded cases. No game/API/native DLL build, new dependency, shared desktop input or public package is required. Exact identities and scoped evidence are in the checkpoint.