Choose the correct artifact
Put each concern in the public component that can own it safely and portably.
| Need | Build | Owns | Never owns |
|---|---|---|---|
| Rules, scoring, state, result | Package activity | deterministic Attempt behavior | identity, persistence, clock, network |
| A board, puzzle, timer, or spatial control | web_ui artifact | presentation and typed intents | canonical mutation, native access |
| Stream presentation | overlay_ui artifact | read-only visuals | OBS control, tokens, history queries |
| Ranks and milestones | progression contribution | metric, aggregation, thresholds | Attempt truth |
| Editing-worthy facts | story contribution | semantic vocabulary | recording or media storage |
| Matches or races | coordination contribution | roster policy, arbitration, outcomes | invites, connections, sequencing |
| Commentary | narration contribution | fact-to-cue policy | provider keys, synthesis, playback |
| Shared vertical rules or UI | Domain Kit | pure build-time code and assets | runtime service or installation |
| Automatic source input | Station connector | discovery, translation, stable event ID, health | rules, member routing, Sprint choice |
| Club setup by an agent | HTTP API or MCP | bounded ordinary member operations | attempts, billing, connector grants |
Common wrong turns
Do not hide native code in a portable package
A sidecar receives a stricter independent review because it may need narrow local authority. Packaging it together does not make that authority safe.
Do not score inside the connector
The connector should report “segment 20, multiplier 3” or another exact observation. The active Practice Mode decides whether that is a hit, miss, checkout, invalid action, or ignored event.
Do not put provider execution in narration policy
A narration contribution proposes bounded provider-neutral cues from committed facts. The host owns voices, credentials, queues, synthesis, playback, caching, and recovery.
Decision test
Ask: would changing this behavior change what the Attempt means? If yes, it probably belongs in immutable package bytes. Ask: does it require trust in an account, clock, device, credential, connection, or durable store? If yes, it belongs in a host service or separately reviewed connector—not the package.