ADR 0008: Draft-on-publish versioning for the DSL¶
- Status:
Accepted
Context¶
Editing a custom strategy that is live in production must not silently change running behavior. Overwriting the stored definition would do exactly that.
Decision¶
StrategyDefinitionService
(app/services/strategy_definition_service.py) never overwrites a published
strategy. Create yields version=1 / DRAFT; editing a draft mutates it
in place; editing a published row forks ``version+1`` as a new draft,
leaving the published copy untouched. Publishing transitions the draft to
PUBLISHED and archives the prior published sibling, so (realmId, name)
has at most one live row (enforced by a unique constraint on
(realmId, name, version)). Only PUBLISHED definitions execute in
production; rollback restores a prior version.
Consequences¶
Production keeps running the published version until an explicit publish; experimentation is free.
Full, deterministic version history; rollback cascades the
strategyIdchange to every game and task that pointed at the archived version.Cost: more rows, and editors must understand draft vs. published.
See also¶
Strategies - “The custom-strategy lifecycle” and versioning guarantees.