Darts, end to end
Trace the demanding Darts reference implementation through every public SDK, Station, creator, and release boundary.
Darts Core is the proof that the extension platform can support a rich vertical without privileged Darts behavior in the host. It contains eight modes, three rule families, manual and automatic input, four progression lanes, corrections, overlays, matches, narration, OBS synchronization, and immutable Studio intake.
What the member receives
Adding the official Darts Experience Suite provisions all eight immutable package defaults. There is no rank-threshold form and no required setup step.
| Practice Mode | Primary experience | Important Measurements | Progression |
|---|---|---|---|
| Around the Clock | Clear singles 1–20 | darts used, target accuracy | Singles Accuracy |
| Around the Clock + Bull | Clear 1–20 and bull | darts used, target accuracy | independent history |
| Doubles Around the Clock | Clear every double | darts used, target accuracy | independent history |
| Trebles Around the Clock | Clear every treble | darts used, target accuracy | independent history |
| 100 Darts at 20 | Score 100 darts at 20 | target score, three-dart average, accuracy | Scoring at 20 |
| Doubles Rotation | Practice finishing doubles | darts used, target accuracy | Doubles Finishing |
| 501 | Double-out X01 | three-dart average, darts used, busts | X01 Matchplay |
| 301 | Faster double-out X01 | three-dart average, darts used, busts | independent history |
Each completed Attempt is terminal by itself. A member can practice any mode with no Sprint, or let a compatible Attempt advance an active Sprint.
The artifact graph
@chasingmastery/darts-domain-kit
pure rules · target normalization · board geometry · checkout policy · fixtures
│ bundled with provenance
▼
club.chasingmastery/darts-core@0.4.0
8 engines · player · overlay · progressions · story · matches · narration
▲ exact observation contract
│
club.chasingmastery/autodarts
separately reviewed Station sidecar · source health · visit snapshotsThe Domain Kit is a build-time dependency, not a mutable production service.
The .cmpkg release is self-contained. The AutoDarts connector is separately
installed, reviewed, granted, bound, verified, and revocable.
One source-neutral reducer
The portable dartboard sends darts.throw with canonical segments such as
S20, D16, T19, SB, DB, or MISS. AutoDarts sends an exact cumulative
visit snapshot. The package converts both into the same ordered throw facts
before applying an ordered-target, fixed-count, or X01 rule family.
darts.throw command ───────────┐
├─ canonical throw → rule family → transition
AutoDarts visit observation ───┘That distinction catches subtle failures. A bull hit while aiming at 20 is a valid off-target miss—not an invalid numbered segment. Duplicate cumulative visits, stale source revisions, reconnect replay, and partial visits are deduplicated before they can corrupt the Attempt.
Attempt and correction semantics
Every accepted throw receives a stable package transition key. Ordinary input creates immutable evidence. A later host-authorized replace or remove correction replays the exact pinned package release from that evidence, creates a new Attempt revision, retracts obsolete Story Events, and rebuilds progression and Sprint projections. A terminal Attempt reopens only when the corrected rules require it.
This is intentionally stricter than a pre-terminal UI undo. The package declares correction meaning; the host authorizes and persists the revision.
Player and overlay
The same package-owned player artifact runs in a browser iframe, native WebView, and Workbench. It owns board geometry, target state, visit input, checkout guidance, correction intent, terminal result, keyboard/touch interaction, and responsive presentation.
The read-only overlay consumes bounded Activity Presentation. It explains the current target or score, pace, goal, change, next milestone, connection quality, and terminal outcome without receiving command or correction capability.
Progression and history
The package fixes four progression definitions: Singles Accuracy, Scoring at 20, Doubles Finishing, and X01 Matchplay. The host projects each member's state from comparable Attempts and retains the exact definition/configuration lane. Changing result meaning or evidence policy creates a new revision or lane; presentation improvements can remain comparable.
Coordination
The package contributes match policy for 501, 301, and 100 Darts at 20. The host owns Live Run identity, invitations, participants, readiness, presence, recovery, and routing. Package policy owns scoring, eligible turns, legs, winners, outcomes, rematches, and domain presentation.
shared_sequencedroutes one physical board only to the eligible player.independentlets remote participants use separate authorized inputs.- A match remains coordination around atomic Attempts, never a replacement for ordinary practice history.
Narration and creator evidence
X01 engines emit declared broadcast facts. A package-owned narration director maps them to provider-neutral captions, voice roles, priority, expiry, pacing, and cancellation. The host owns audio provider credentials and playback. Narration failure never blocks a throw.
Committed Story Events travel independently to Station. Station samples the OBS capture clock and creates media anchors; corrections produce retractions. The sealed creator evidence pins package releases, Attempt revisions, Measurements, Story Events, gaps, media digests, and capture timing before Content Studio receives an immutable intake.
Source map: learn from the implementation
packages/darts-core/src/package.tsEight activities, defaults, artifacts, progression, story, overlays, coordination, and narration through definePackage.
packages/darts-core/src/modes.tsExact rule families, Measurements, result contracts, progressions, and forms.
packages/darts-core/src/engine.tsManual commands and visit observations converge before deterministic rules.
packages/darts-core/src/ui.tsRich manual interaction, corrections, accessibility, and host bridge usage.
packages/darts-core/src/overlay.tsMode-aware viewer presentation with no activity authority.
packages/darts-core/src/coordination.tsShared-board and independent-input match semantics.
packages/darts-core/src/narration.tsProvider-neutral X01 cue planning and cancellation.
packages/darts-domain-kit/src/index.tsReusable domain truth bundled at build time.
examples/autodarts-live-sidecarReviewed local source translation with exact grants and health.
scripts/darts-runtime-api-smoke.mjsReal Library, runtime, API, manual/automatic equivalence, progression, and Sprint evidence.
scripts/darts-creator-capture-smoke.mjsStation, OBS, media, corrections, sealed evidence, and Studio intake.
Reproduce this depth in another Pursuit
Do not copy Darts identifiers. Reproduce the pattern:
- Extract pure domain truth and paired manual/automatic fixtures.
- Publish a coherent multi-mode Suite with useful immutable defaults.
- Normalize every input source into the same domain actions.
- Keep result contracts and progression lanes explicit and versioned.
- Build a rich member player and a separate read-only viewer overlay.
- Emit semantic story facts; add coordination and narration only where real.
- Prove the complete journey through public artifacts and retained evidence.