From be0f86cac389921d0474bdd360ecf9ef37c0e3f3 Mon Sep 17 00:00:00 2001 From: Oliver-Marcus Eder Date: Thu, 27 Aug 2026 23:56:34 +0200 Subject: [PATCH] docs: finish sport-scoping framing in the spec doc; fix lost review edits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two review fixes from RFC 0003 were lost when the merge squashed a pre-push branch state (commit 13fa6ea never reached origin). Re-applies them plus the remaining basketball-only framing the .adoc still carried: - H1 title + intro + motivation: 'basketball drill diagrams' -> 'team-sport coaching diagrams' (invasion sports, basketball first) — matching the README, schema description, and the == Sport section. - Action-type reference table now lists the reserved types (tackle/clear/ faceoff/check) and notes the valid subset depends on sport. - soccer fixture: player no longer passes to themselves (adds offense_8 as the teammate target; nr 1-9 is the current per-team cap). Changelog v1.0.0 historical entries left as-is (they describe that release). Co-Authored-By: Claude Opus 4.8 --- docs/specification-v1.adoc | 8 ++++---- examples/sport-soccer.ocf.json | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/specification-v1.adoc b/docs/specification-v1.adoc index bb61b8a..9b2ff27 100644 --- a/docs/specification-v1.adoc +++ b/docs/specification-v1.adoc @@ -1,4 +1,4 @@ -= Open Coaching Format — Open Standard for Basketball Drill Diagrams += Open Coaching Format — Open Standard for Team-Sport Coaching Diagrams :version: 1.2.0 :doctype: book :toc: left @@ -22,7 +22,7 @@ [abstract] == Abstract -*{ocf} v{version}* is an open, ruleset-aware JSON schema for representing basketball drill diagrams and multi-step animations. +*{ocf} v{version}* is an open, ruleset-aware JSON schema for representing team-sport coaching diagrams and multi-step animations — targeting invasion team sports, with basketball fully defined first. It defines a court coordinate system based on real-world units (meters or feet), a registry of named court positions per ruleset, a semantic entity model, and a frame-based animation structure. @@ -40,7 +40,7 @@ The format is designed to be: === Motivation -No open standard exists for basketball drill diagrams. +No open standard exists for team-sport coaching diagrams. All major tools (FIBA Europe Coaching App, FastDraw, Sportplan.net) use proprietary formats with image-only export. This prevents programmatic drill creation, LLM-assisted coaching tools, and cross-platform interoperability. @@ -1295,7 +1295,7 @@ Coordinate <|-- RelativeCoordinate | `area.form` | `rectangle`, `ellipse`, `triangle` | `color_role` | `offense`, `defense`, `black`, `grey`, `yellow`, `green`, `red`, `blue`, `white` | `unit` | `m`, `ft` -| Action `type` | move, cut, screen, defend, dribble, pass, shoot, rebound, pickup +| Action `type` | move, cut, screen, defend, dribble, pass, shoot, rebound, pickup, tackle, clear, faceoff, check (valid subset depends on `sport` — see the Sport section) | Cut `variant` | backdoor, give_and_go, flash, v_cut, l_cut, curl, flare, fade, basket | Screen `variant` | ball_screen, back_screen, down_screen, flare_screen, cross_screen, pin_down | Defend `variant` | on_ball, deny, help, hedge, switch, box_out diff --git a/examples/sport-soccer.ocf.json b/examples/sport-soccer.ocf.json index afeb122..14a72d8 100644 --- a/examples/sport-soccer.ocf.json +++ b/examples/sport-soccer.ocf.json @@ -5,12 +5,13 @@ "court": { "ruleset": "custom", "type": "full_court", "custom_dimensions": { "unit": "m", "length": 105, "width": 68, "basket_from_baseline": 0, "three_point_distance": 0, "paint_width": 40.3, "paint_depth": 16.5, "free_throw_distance": 11 } }, "entities": [ { "type": "offense", "nr": 9, "x": 0.0, "y": 30.0 }, + { "type": "offense", "nr": 8, "x": 12.0, "y": 28.0 }, { "type": "defense", "nr": 4, "x": 0.0, "y": 40.0 } ], "balls": [ { "id": "ball_1", "carried_by": "offense_9" } ], "frames": [ - { "id": "f1", "label": "Tackle", "description": "defender challenges", - "actions": [ { "player": "defense_4", "type": "tackle" }, { "player": "offense_9", "type": "pass", "to_player": "offense_9" } ], - "end_state": { "offense_9": { "x": 0.0, "y": 30.0 }, "defense_4": { "x": 0.0, "y": 38.0 } } } + { "id": "f1", "label": "Tackle", "description": "defender challenges the ball carrier, who releases a pass", + "actions": [ { "player": "defense_4", "type": "tackle" }, { "player": "offense_9", "type": "pass", "to_player": "offense_8" } ], + "end_state": { "offense_9": { "x": 0.0, "y": 30.0 }, "offense_8": { "x": 12.0, "y": 28.0 }, "defense_4": { "x": 0.0, "y": 38.0 } } } ] }