Implemented specs¶
Specs whose feature is built and in use. What each one describes exists today; where the built thing departs from the text, the spec's own Divergences or As built section records it — read that before trusting a cell reference or a line number.
These are the specs to read when you need to understand something that is already running. For what a tool does rather than why it is shaped that way, start at Usage, Features or Technical.
Index and status-change procedure: ../README.md.
| Spec | Feature |
|---|---|
| Site engine | The shared modules at sage-match-control.github.io/lib/v1/ (domain/, data/, views/, apps/, css/), every event template as a shell, Control Center on the same views, and the _tests/ comparison harness. Merged 2026-10-06 |
| Team tournament event-site template | _templates/team-tournament-template/: a Hub and a schedule board as shells on the engine, the scorer and desk pages on team data, the team checks in the dry-run runbook, pair labels per event (display.pairs), and the interim workbook rule until the Team Tournament Master exists |
| Runtime-fetched sync config | SyncConfigStore fetching event-data/config/events.json at runtime |
| Sync script configuration | sheets-sync.gs's SAGE → Set up live sync and Script Properties |
| Immediate sync | sheets-sync.gs's lock-based sync from the edit, SyncService's commit-conflict retry, X-Edit-At / lastEditAt timing, and Control Center's edit→sync figure |
| Match Control console | tools/control-center.html |
| Awards tab | The console's podium tab and PNG export |
| Schedule screen | events/<key>/schedule.html, since backported into both templates |
| Scoresheet event picker | tools/scoresheet-generator.html's snapshot picker |
| Calculator dual-meet fixes | "Pairs per club" and the dual bracket default |
| Bracket Generator keep-apart groups | tools/bracket-generator.html's keep-apart groups: chosen pairs dealt into different brackets, still verifiable from the seed |
| Calculator PWA | tools/sw.js + tournament-calculator.webmanifest |
| Bracket Generator | tools/bracket-generator.html |
| Verifiable draw | Its seed, SHA-256 fingerprint draw, and How it works dialog |
| Bracket draw name import | SAGE → Import bracket draws, the Open Bracket Generator menu route, and a dual meet's Shuffle roster codes |
| Sheet generator (Phase 1) | dual-meet-generator.gs — category tabs, Variables, Title, Reference for Players |
| Schedule generator (Phase 2) | Its SCHEDULE tab |
| Readouts generator (Phase 3) | Its Court Control, Timeline, CSV, STANDINGSCSV |
| Standard Tournament Master | standard-tournament-generator.gs and the SAGE Standard Tournament Master workbook |
| Event site templates | _templates/dual-meet-template/ and _templates/standard-tournament-template/ |
| PNF × BUP dual meet | The first real run of the dual-meet template |
| Facility progress | Live Matches' per-facility progress cards and Mission Control's progress line |
| Event attendance | attendance.gs and events/pickle-for-sight-2026/attendance.html |
| Attendance for every event | sage-tools-api/src/attendance/, Control Center's Attendance tab, _templates/attendance/ and each event's attendance.html |
| CLSO Pickle for Sight | events/pickle-for-sight-2026/, the first real run of the standard template, held 27 September 2026 |
| Team tournament | events/pickledrive-anniversary-2026/ (the hand-built prototype), Control Center's team type and the team rules. Ran 3 October 2026. The template and the workbook generator are separate specs |
| Team workbook recalculation | The PickleDrive workbook's hidden StackCache tab, the five primitive named functions reading it, MatchLookup!K:L, the rewritten matchup family and the 15 unused functions removed. Done by hand in the Sheets UI on 2026-10-05; no repo code |
| Piggleball Chairman's Cup | events/piggleball-2026/, a standard-template event re-skinned from its pubmat, held 3 October 2026 |
sage-tools-api test suite |
sage-tools-api/test/: unit and integration tests for every module and route, the sync pipeline against an in-memory GitHub/Sheets/Worker, an opt-in PDF end-to-end, guard tests and the pre-push hook |
| Live push delivery | sage-tools-api/live-worker/ (the sage-live Worker and its DayChannel Durable Object), LivePublisher and the publish-then-archive flow, and the LIVE CHANNEL block in Control Center, the templates and every current event's pages. In use since 3 October 2026 |
| Live push delivery — explainer | The same, in plain language |
| Score entry and scorer links | sage-tools-api/src/scores/, Match Finder's score dialog and Mission Control's Scorer links in Control Center, and _templates/scorer/scorer.html |
| sage-tools-api architecture hardening | The service's layout (src/clients/, src/registry/, one composition root, ports), one retry loop and the delivery strategies, the dependency-rules guard, and the /v3 API with its conventions guard. Its fresh-master check, production acceptance and Cloud Build filter were not run |
| Usage guide and docs restructure | These docs' Usage tab and Features as a per-tool reference (docs 2.0.0), and the site repo's dry-run checklist template. The newcomer read-through was not done |
| Link attribution | The Issued to and Note of a desk or scorer link (signed into the token as to and note), ATTENDANCE's markedBy column, and the note on both score cells of a saved match. sage-tools-api 3.1.0 |
| Push for attendance | The live Worker's /attendance and /nudge routes on a separate attendance:<event>/<day> object, AttendanceService's data-free nudge after every write that changes an ATTENDANCE tab (LivePublisher.nudge), and lib/v1/data/attendance-signal.js: desk pages and Control Center's Attendance tab re-read on a nudge instead of polling, and say when live updates are off. sage-tools-api 3.4.0, merged 2026-10-13, Worker deployed 2026-10-18. The owner's checks P1–P7 were not run |