ttrpg-engine-dnd 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +69 -0
- package/CONTRIBUTING.md +98 -0
- package/DEVELOPMENT.md +70 -0
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/VERSIONING.md +151 -0
- package/dist/content/index.d.ts +3 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/pack.d.ts +1657 -0
- package/dist/content/pack.d.ts.map +1 -0
- package/dist/content/packs/starter.d.ts +4 -0
- package/dist/content/packs/starter.d.ts.map +1 -0
- package/dist/content/validate.d.ts +8 -0
- package/dist/content/validate.d.ts.map +1 -0
- package/dist/derive/ability-check.d.ts +26 -0
- package/dist/derive/ability-check.d.ts.map +1 -0
- package/dist/derive/ability.d.ts +9 -0
- package/dist/derive/ability.d.ts.map +1 -0
- package/dist/derive/ac.d.ts +19 -0
- package/dist/derive/ac.d.ts.map +1 -0
- package/dist/derive/action-economy.d.ts +17 -0
- package/dist/derive/action-economy.d.ts.map +1 -0
- package/dist/derive/attack.d.ts +20 -0
- package/dist/derive/attack.d.ts.map +1 -0
- package/dist/derive/character-view.d.ts +29 -0
- package/dist/derive/character-view.d.ts.map +1 -0
- package/dist/derive/damage-mitigation.d.ts +18 -0
- package/dist/derive/damage-mitigation.d.ts.map +1 -0
- package/dist/derive/effect-stack.d.ts +15 -0
- package/dist/derive/effect-stack.d.ts.map +1 -0
- package/dist/derive/encumbrance.d.ts +17 -0
- package/dist/derive/encumbrance.d.ts.map +1 -0
- package/dist/derive/index.d.ts +12 -0
- package/dist/derive/index.d.ts.map +1 -0
- package/dist/derive/save.d.ts +23 -0
- package/dist/derive/save.d.ts.map +1 -0
- package/dist/derive/spell-dc.d.ts +21 -0
- package/dist/derive/spell-dc.d.ts.map +1 -0
- package/dist/derive/spell-slots.d.ts +21 -0
- package/dist/derive/spell-slots.d.ts.map +1 -0
- package/dist/derive/terrain.d.ts +10 -0
- package/dist/derive/terrain.d.ts.map +1 -0
- package/dist/effects/builder.d.ts +66 -0
- package/dist/effects/builder.d.ts.map +1 -0
- package/dist/effects/formula.d.ts +12 -0
- package/dist/effects/formula.d.ts.map +1 -0
- package/dist/effects/index.d.ts +4 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/predicate.d.ts +12 -0
- package/dist/effects/predicate.d.ts.map +1 -0
- package/dist/engine/apply.d.ts +5 -0
- package/dist/engine/apply.d.ts.map +1 -0
- package/dist/engine/commit.d.ts +12 -0
- package/dist/engine/commit.d.ts.map +1 -0
- package/dist/engine/conveniences.d.ts +7124 -0
- package/dist/engine/conveniences.d.ts.map +1 -0
- package/dist/engine/ids-utils.d.ts +2 -0
- package/dist/engine/ids-utils.d.ts.map +1 -0
- package/dist/engine/index.d.ts +107 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/plan/action-surge.d.ts +10 -0
- package/dist/engine/plan/action-surge.d.ts.map +1 -0
- package/dist/engine/plan/attack.d.ts +30 -0
- package/dist/engine/plan/attack.d.ts.map +1 -0
- package/dist/engine/plan/cast-spell.d.ts +18 -0
- package/dist/engine/plan/cast-spell.d.ts.map +1 -0
- package/dist/engine/plan/checks.d.ts +26 -0
- package/dist/engine/plan/checks.d.ts.map +1 -0
- package/dist/engine/plan/concentration.d.ts +12 -0
- package/dist/engine/plan/concentration.d.ts.map +1 -0
- package/dist/engine/plan/contested.d.ts +28 -0
- package/dist/engine/plan/contested.d.ts.map +1 -0
- package/dist/engine/plan/encounter.d.ts +47 -0
- package/dist/engine/plan/encounter.d.ts.map +1 -0
- package/dist/engine/plan/falling.d.ts +11 -0
- package/dist/engine/plan/falling.d.ts.map +1 -0
- package/dist/engine/plan/index.d.ts +20 -0
- package/dist/engine/plan/index.d.ts.map +1 -0
- package/dist/engine/plan/level-up.d.ts +22 -0
- package/dist/engine/plan/level-up.d.ts.map +1 -0
- package/dist/engine/plan/movement.d.ts +25 -0
- package/dist/engine/plan/movement.d.ts.map +1 -0
- package/dist/engine/plan/multiattack.d.ts +12 -0
- package/dist/engine/plan/multiattack.d.ts.map +1 -0
- package/dist/engine/plan/npc.d.ts +21 -0
- package/dist/engine/plan/npc.d.ts.map +1 -0
- package/dist/engine/plan/offhand-attack.d.ts +13 -0
- package/dist/engine/plan/offhand-attack.d.ts.map +1 -0
- package/dist/engine/plan/opportunity-attack.d.ts +14 -0
- package/dist/engine/plan/opportunity-attack.d.ts.map +1 -0
- package/dist/engine/plan/reactive-spells.d.ts +34 -0
- package/dist/engine/plan/reactive-spells.d.ts.map +1 -0
- package/dist/engine/plan/rest.d.ts +16 -0
- package/dist/engine/plan/rest.d.ts.map +1 -0
- package/dist/engine/plan/travel.d.ts +21 -0
- package/dist/engine/plan/travel.d.ts.map +1 -0
- package/dist/engine/plan/weapon-mastery.d.ts +15 -0
- package/dist/engine/plan/weapon-mastery.d.ts.map +1 -0
- package/dist/engine/reducers/action-economy.d.ts +12 -0
- package/dist/engine/reducers/action-economy.d.ts.map +1 -0
- package/dist/engine/reducers/attack.d.ts +6 -0
- package/dist/engine/reducers/attack.d.ts.map +1 -0
- package/dist/engine/reducers/bastion.d.ts +10 -0
- package/dist/engine/reducers/bastion.d.ts.map +1 -0
- package/dist/engine/reducers/charges.d.ts +7 -0
- package/dist/engine/reducers/charges.d.ts.map +1 -0
- package/dist/engine/reducers/checks.d.ts +6 -0
- package/dist/engine/reducers/checks.d.ts.map +1 -0
- package/dist/engine/reducers/combat.d.ts +12 -0
- package/dist/engine/reducers/combat.d.ts.map +1 -0
- package/dist/engine/reducers/concentration.d.ts +6 -0
- package/dist/engine/reducers/concentration.d.ts.map +1 -0
- package/dist/engine/reducers/downtime.d.ts +5 -0
- package/dist/engine/reducers/downtime.d.ts.map +1 -0
- package/dist/engine/reducers/encounter.d.ts +11 -0
- package/dist/engine/reducers/encounter.d.ts.map +1 -0
- package/dist/engine/reducers/inventory.d.ts +9 -0
- package/dist/engine/reducers/inventory.d.ts.map +1 -0
- package/dist/engine/reducers/level-up.d.ts +7 -0
- package/dist/engine/reducers/level-up.d.ts.map +1 -0
- package/dist/engine/reducers/locations.d.ts +8 -0
- package/dist/engine/reducers/locations.d.ts.map +1 -0
- package/dist/engine/reducers/mounts-vehicles.d.ts +11 -0
- package/dist/engine/reducers/mounts-vehicles.d.ts.map +1 -0
- package/dist/engine/reducers/movement.d.ts +7 -0
- package/dist/engine/reducers/movement.d.ts.map +1 -0
- package/dist/engine/reducers/npc.d.ts +7 -0
- package/dist/engine/reducers/npc.d.ts.map +1 -0
- package/dist/engine/reducers/party.d.ts +10 -0
- package/dist/engine/reducers/party.d.ts.map +1 -0
- package/dist/engine/reducers/progression.d.ts +5 -0
- package/dist/engine/reducers/progression.d.ts.map +1 -0
- package/dist/engine/reducers/quests.d.ts +14 -0
- package/dist/engine/reducers/quests.d.ts.map +1 -0
- package/dist/engine/reducers/reactive-spells.d.ts +7 -0
- package/dist/engine/reducers/reactive-spells.d.ts.map +1 -0
- package/dist/engine/reducers/resources.d.ts +7 -0
- package/dist/engine/reducers/resources.d.ts.map +1 -0
- package/dist/engine/reducers/rest.d.ts +8 -0
- package/dist/engine/reducers/rest.d.ts.map +1 -0
- package/dist/engine/reducers/resurrection.d.ts +5 -0
- package/dist/engine/reducers/resurrection.d.ts.map +1 -0
- package/dist/engine/reducers/session.d.ts +8 -0
- package/dist/engine/reducers/session.d.ts.map +1 -0
- package/dist/engine/reducers/settings.d.ts +5 -0
- package/dist/engine/reducers/settings.d.ts.map +1 -0
- package/dist/engine/reducers/spellcasting.d.ts +7 -0
- package/dist/engine/reducers/spellcasting.d.ts.map +1 -0
- package/dist/engine/reducers/transformations.d.ts +8 -0
- package/dist/engine/reducers/transformations.d.ts.map +1 -0
- package/dist/engine/reducers/travel.d.ts +7 -0
- package/dist/engine/reducers/travel.d.ts.map +1 -0
- package/dist/engine/reducers/triggers.d.ts +9 -0
- package/dist/engine/reducers/triggers.d.ts.map +1 -0
- package/dist/engine/reducers/weapon-mastery.d.ts +5 -0
- package/dist/engine/reducers/weapon-mastery.d.ts.map +1 -0
- package/dist/engine/replay.d.ts +4 -0
- package/dist/engine/replay.d.ts.map +1 -0
- package/dist/engine/triggers/dispatch.d.ts +13 -0
- package/dist/engine/triggers/dispatch.d.ts.map +1 -0
- package/dist/engine/undo-redo.d.ts +4 -0
- package/dist/engine/undo-redo.d.ts.map +1 -0
- package/dist/handlers/context.d.ts +7 -0
- package/dist/handlers/context.d.ts.map +1 -0
- package/dist/handlers/index.d.ts +12 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/ids.d.ts +64 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/internal/clock.d.ts +2 -0
- package/dist/internal/clock.d.ts.map +1 -0
- package/dist/internal/constants.d.ts +6 -0
- package/dist/internal/constants.d.ts.map +1 -0
- package/dist/internal/immer.d.ts +4 -0
- package/dist/internal/immer.d.ts.map +1 -0
- package/dist/internal/invariants.d.ts +5 -0
- package/dist/internal/invariants.d.ts.map +1 -0
- package/dist/migrations/index.d.ts +5 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/rng/default.d.ts +6 -0
- package/dist/rng/default.d.ts.map +1 -0
- package/dist/rng/dice.d.ts +20 -0
- package/dist/rng/dice.d.ts.map +1 -0
- package/dist/rng/index.d.ts +10 -0
- package/dist/rng/index.d.ts.map +1 -0
- package/dist/rng/seeded.d.ts +9 -0
- package/dist/rng/seeded.d.ts.map +1 -0
- package/dist/rng/throw.d.ts +9 -0
- package/dist/rng/throw.d.ts.map +1 -0
- package/dist/schemas/content/background.d.ts +46 -0
- package/dist/schemas/content/background.d.ts.map +1 -0
- package/dist/schemas/content/class.d.ts +264 -0
- package/dist/schemas/content/class.d.ts.map +1 -0
- package/dist/schemas/content/condition.d.ts +90 -0
- package/dist/schemas/content/condition.d.ts.map +1 -0
- package/dist/schemas/content/feat.d.ts +25 -0
- package/dist/schemas/content/feat.d.ts.map +1 -0
- package/dist/schemas/content/index.d.ts +9 -0
- package/dist/schemas/content/index.d.ts.map +1 -0
- package/dist/schemas/content/item.d.ts +602 -0
- package/dist/schemas/content/item.d.ts.map +1 -0
- package/dist/schemas/content/monster.d.ts +203 -0
- package/dist/schemas/content/monster.d.ts.map +1 -0
- package/dist/schemas/content/species.d.ts +63 -0
- package/dist/schemas/content/species.d.ts.map +1 -0
- package/dist/schemas/content/spell.d.ts +253 -0
- package/dist/schemas/content/spell.d.ts.map +1 -0
- package/dist/schemas/effects.d.ts +175 -0
- package/dist/schemas/effects.d.ts.map +1 -0
- package/dist/schemas/events/action-economy.d.ts +38 -0
- package/dist/schemas/events/action-economy.d.ts.map +1 -0
- package/dist/schemas/events/attack.d.ts +139 -0
- package/dist/schemas/events/attack.d.ts.map +1 -0
- package/dist/schemas/events/bastion.d.ts +227 -0
- package/dist/schemas/events/bastion.d.ts.map +1 -0
- package/dist/schemas/events/charges.d.ts +110 -0
- package/dist/schemas/events/charges.d.ts.map +1 -0
- package/dist/schemas/events/checks.d.ts +103 -0
- package/dist/schemas/events/checks.d.ts.map +1 -0
- package/dist/schemas/events/combat.d.ts +308 -0
- package/dist/schemas/events/combat.d.ts.map +1 -0
- package/dist/schemas/events/concentration.d.ts +99 -0
- package/dist/schemas/events/concentration.d.ts.map +1 -0
- package/dist/schemas/events/downtime.d.ts +53 -0
- package/dist/schemas/events/downtime.d.ts.map +1 -0
- package/dist/schemas/events/encounter.d.ts +260 -0
- package/dist/schemas/events/encounter.d.ts.map +1 -0
- package/dist/schemas/events/envelope.d.ts +22 -0
- package/dist/schemas/events/envelope.d.ts.map +1 -0
- package/dist/schemas/events/index.d.ts +4594 -0
- package/dist/schemas/events/index.d.ts.map +1 -0
- package/dist/schemas/events/inventory.d.ts +253 -0
- package/dist/schemas/events/inventory.d.ts.map +1 -0
- package/dist/schemas/events/level-up.d.ts +141 -0
- package/dist/schemas/events/level-up.d.ts.map +1 -0
- package/dist/schemas/events/locations.d.ts +183 -0
- package/dist/schemas/events/locations.d.ts.map +1 -0
- package/dist/schemas/events/mounts-vehicles.d.ts +233 -0
- package/dist/schemas/events/mounts-vehicles.d.ts.map +1 -0
- package/dist/schemas/events/movement.d.ts +131 -0
- package/dist/schemas/events/movement.d.ts.map +1 -0
- package/dist/schemas/events/npc.d.ts +113 -0
- package/dist/schemas/events/npc.d.ts.map +1 -0
- package/dist/schemas/events/party.d.ts +260 -0
- package/dist/schemas/events/party.d.ts.map +1 -0
- package/dist/schemas/events/progression.d.ts +698 -0
- package/dist/schemas/events/progression.d.ts.map +1 -0
- package/dist/schemas/events/quests.d.ts +426 -0
- package/dist/schemas/events/quests.d.ts.map +1 -0
- package/dist/schemas/events/reactive-spells.d.ts +98 -0
- package/dist/schemas/events/reactive-spells.d.ts.map +1 -0
- package/dist/schemas/events/resources.d.ts +107 -0
- package/dist/schemas/events/resources.d.ts.map +1 -0
- package/dist/schemas/events/rest.d.ts +104 -0
- package/dist/schemas/events/rest.d.ts.map +1 -0
- package/dist/schemas/events/resurrection.d.ts +44 -0
- package/dist/schemas/events/resurrection.d.ts.map +1 -0
- package/dist/schemas/events/session.d.ts +144 -0
- package/dist/schemas/events/session.d.ts.map +1 -0
- package/dist/schemas/events/settings.d.ts +47 -0
- package/dist/schemas/events/settings.d.ts.map +1 -0
- package/dist/schemas/events/spellcasting.d.ts +103 -0
- package/dist/schemas/events/spellcasting.d.ts.map +1 -0
- package/dist/schemas/events/transformations.d.ts +279 -0
- package/dist/schemas/events/transformations.d.ts.map +1 -0
- package/dist/schemas/events/travel.d.ts +143 -0
- package/dist/schemas/events/travel.d.ts.map +1 -0
- package/dist/schemas/events/triggers.d.ts +60 -0
- package/dist/schemas/events/triggers.d.ts.map +1 -0
- package/dist/schemas/events/weapon-mastery.d.ts +38 -0
- package/dist/schemas/events/weapon-mastery.d.ts.map +1 -0
- package/dist/schemas/formula.d.ts +103 -0
- package/dist/schemas/formula.d.ts.map +1 -0
- package/dist/schemas/index.d.ts +8 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/predicate.d.ts +72 -0
- package/dist/schemas/predicate.d.ts.map +1 -0
- package/dist/schemas/primitives.d.ts +156 -0
- package/dist/schemas/primitives.d.ts.map +1 -0
- package/dist/schemas/runtime/bastion.d.ts +130 -0
- package/dist/schemas/runtime/bastion.d.ts.map +1 -0
- package/dist/schemas/runtime/campaign.d.ts +2122 -0
- package/dist/schemas/runtime/campaign.d.ts.map +1 -0
- package/dist/schemas/runtime/character.d.ts +580 -0
- package/dist/schemas/runtime/character.d.ts.map +1 -0
- package/dist/schemas/runtime/currency.d.ts +9 -0
- package/dist/schemas/runtime/currency.d.ts.map +1 -0
- package/dist/schemas/runtime/downtime.d.ts +31 -0
- package/dist/schemas/runtime/downtime.d.ts.map +1 -0
- package/dist/schemas/runtime/effect-instance.d.ts +65 -0
- package/dist/schemas/runtime/effect-instance.d.ts.map +1 -0
- package/dist/schemas/runtime/encounter.d.ts +264 -0
- package/dist/schemas/runtime/encounter.d.ts.map +1 -0
- package/dist/schemas/runtime/in-game-time.d.ts +18 -0
- package/dist/schemas/runtime/in-game-time.d.ts.map +1 -0
- package/dist/schemas/runtime/index.d.ts +15 -0
- package/dist/schemas/runtime/index.d.ts.map +1 -0
- package/dist/schemas/runtime/item-instance.d.ts +66 -0
- package/dist/schemas/runtime/item-instance.d.ts.map +1 -0
- package/dist/schemas/runtime/location.d.ts +111 -0
- package/dist/schemas/runtime/location.d.ts.map +1 -0
- package/dist/schemas/runtime/party.d.ts +52 -0
- package/dist/schemas/runtime/party.d.ts.map +1 -0
- package/dist/schemas/runtime/pending-choice.d.ts +77 -0
- package/dist/schemas/runtime/pending-choice.d.ts.map +1 -0
- package/dist/schemas/runtime/quest.d.ts +207 -0
- package/dist/schemas/runtime/quest.d.ts.map +1 -0
- package/dist/schemas/runtime/session.d.ts +102 -0
- package/dist/schemas/runtime/session.d.ts.map +1 -0
- package/dist/schemas/runtime/settings.d.ts +26 -0
- package/dist/schemas/runtime/settings.d.ts.map +1 -0
- package/dist/schemas/runtime/travel.d.ts +34 -0
- package/dist/schemas/runtime/travel.d.ts.map +1 -0
- package/dist/schemas/runtime/vehicle.d.ts +49 -0
- package/dist/schemas/runtime/vehicle.d.ts.map +1 -0
- package/dist/ttrpg-engine-dnd.cjs +6 -0
- package/dist/ttrpg-engine-dnd.cjs.map +1 -0
- package/dist/ttrpg-engine-dnd.js +10464 -0
- package/dist/ttrpg-engine-dnd.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/docs/api-overview.md +111 -0
- package/docs/concepts.md +154 -0
- package/docs/getting-started.md +142 -0
- package/docs/recipes.md +302 -0
- package/package.json +83 -0
package/VERSIONING.md
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Versioning
|
|
2
|
+
|
|
3
|
+
This package follows [Semantic Versioning](https://semver.org/), with project-specific rules for what each kind of bump means while still pre-1.0. The goal is that an adopter reading a release tag can predict whether upgrading is safe without reading the diff.
|
|
4
|
+
|
|
5
|
+
## Two version numbers
|
|
6
|
+
|
|
7
|
+
The package carries two independent versions:
|
|
8
|
+
|
|
9
|
+
- **Package version** in [package.json](package.json). Follows semver per the rules below. Bumps when behavior, API surface, or content changes in a way users should know about.
|
|
10
|
+
- **`SCHEMA_VERSION`** in [src/version.ts](src/version.ts). A monotonic integer that bumps only when the persisted shape of `Event` or `CampaignState` changes in a way that breaks loading old saves. Each `SCHEMA_VERSION` bump ships with a migration in [src/migrations/](src/migrations/).
|
|
11
|
+
|
|
12
|
+
Schema migrations are decoupled from the package version: a new feature may not bump SCHEMA_VERSION (if it doesn't change persisted shape), and a SCHEMA_VERSION bump may not require a package bump if the migration is transparent.
|
|
13
|
+
|
|
14
|
+
## What each pre-release tag means
|
|
15
|
+
|
|
16
|
+
- **`0.x.y-alpha.N`**: feature-complete per the roadmap, all CI gates green, no external consumers have validated the API in production-ish use yet. APIs may change without a major bump. **Adopt only if you're willing to follow API changes during the alpha cycle.**
|
|
17
|
+
- **`0.x.y-beta.N`**: at least one external consumer has shipped against this API and reported it stable. APIs are unlikely to break but might. **Reasonable for non-critical production use, with a willingness to upgrade through one beta cycle.**
|
|
18
|
+
- **`0.x.y-rc.N`**: no API changes expected; bug-fix tickets only. **Adopt if you want the first stable release. Migration from rc to 1.0.0 is a no-op.**
|
|
19
|
+
|
|
20
|
+
`pre-alpha` is no longer used; the project is past that stage.
|
|
21
|
+
|
|
22
|
+
## Bump triggers
|
|
23
|
+
|
|
24
|
+
Within a pre-release line (e.g., `0.1.0-alpha.0` -> `0.1.0-alpha.1`):
|
|
25
|
+
|
|
26
|
+
- **Patch within pre-release** (`alpha.0` -> `alpha.1`): bug fixes, doc updates, performance improvements, internal refactors, test additions, new content in the starter pack. No public API changes.
|
|
27
|
+
|
|
28
|
+
Across pre-release stages (e.g., `0.1.0-alpha.N` -> `0.1.0-beta.0`):
|
|
29
|
+
|
|
30
|
+
- **Promotion**: see [Promotion criteria](#promotion-criteria). The version number under the tag stays the same; only the tag advances.
|
|
31
|
+
|
|
32
|
+
Across versions:
|
|
33
|
+
|
|
34
|
+
- **Minor pre-1.0** (`0.1.0` -> `0.2.0`): new features, new public exports, **breaking changes** to the public API (this is the pre-1.0 escape hatch). May reset the pre-release tag (e.g., `0.1.0-beta.3` -> `0.2.0-alpha.0` if the new features need their own validation cycle).
|
|
35
|
+
- **Major** (`0.x.y` -> `1.0.0`): first stable release. Promise: no breaking API changes within the `1.x` line without a major bump.
|
|
36
|
+
- **Major post-1.0** (`1.x.y` -> `2.0.0`): breaking change considered unavoidable. Minimum: a deprecation period of one beta cycle in `1.x`, and a migration script in `src/migrations/` if persistence is affected.
|
|
37
|
+
|
|
38
|
+
Once stable (`1.0.0+`), standard semver applies:
|
|
39
|
+
|
|
40
|
+
- **Patch** (`1.0.0` -> `1.0.1`): bug fixes only. No new exports, no behavior changes documented users could depend on.
|
|
41
|
+
- **Minor** (`1.0.0` -> `1.1.0`): new features, new exports. Backward-compatible.
|
|
42
|
+
- **Major** (`1.0.0` -> `2.0.0`): breaking changes.
|
|
43
|
+
|
|
44
|
+
## Promotion criteria
|
|
45
|
+
|
|
46
|
+
These are the gates that move the project from one pre-release tag to the next.
|
|
47
|
+
|
|
48
|
+
### Alpha -> Beta
|
|
49
|
+
|
|
50
|
+
All of:
|
|
51
|
+
|
|
52
|
+
1. At least one external consumer has shipped a real app against the package (a private project counts; a published artifact is stronger).
|
|
53
|
+
2. The public API has not changed in the last 2 weeks of alpha (no breaking changes, only patch and content bumps).
|
|
54
|
+
3. No open bug reports against architectural invariants (event-sourcing, plan/commit, RNG capture, replay equivalence).
|
|
55
|
+
4. CHANGELOG entry attributes the consumer or describes the validation.
|
|
56
|
+
|
|
57
|
+
The version number under the tag stays the same. Only the tag advances (`0.1.0-alpha.N` -> `0.1.0-beta.0`).
|
|
58
|
+
|
|
59
|
+
### Beta -> Release candidate
|
|
60
|
+
|
|
61
|
+
All of:
|
|
62
|
+
|
|
63
|
+
1. 4 weeks of beta with no API-breaking changes.
|
|
64
|
+
2. At least 3 external consumers reporting stable integration (or 1 production consumer at small scale).
|
|
65
|
+
3. The CHANGELOG is up to date and reads as release notes.
|
|
66
|
+
|
|
67
|
+
`0.1.0-beta.N` -> `0.1.0-rc.0`.
|
|
68
|
+
|
|
69
|
+
### Release candidate -> 1.0.0
|
|
70
|
+
|
|
71
|
+
All of:
|
|
72
|
+
|
|
73
|
+
1. 2 weeks of rc with no API changes (patches okay).
|
|
74
|
+
2. No open critical bugs.
|
|
75
|
+
3. Documentation reviewed end to end.
|
|
76
|
+
|
|
77
|
+
`0.1.0-rc.N` -> `1.0.0`.
|
|
78
|
+
|
|
79
|
+
This is a roadmap, not a promise. Promotion is gated on **external-consumer validation**, not on the calendar. If nobody tries the alpha, beta doesn't happen until somebody does.
|
|
80
|
+
|
|
81
|
+
## What counts as a breaking change
|
|
82
|
+
|
|
83
|
+
**Breaking** (requires pre-1.0 minor bump or post-1.0 major bump):
|
|
84
|
+
|
|
85
|
+
- Removing or renaming a public export from [src/index.ts](src/index.ts).
|
|
86
|
+
- Changing a function signature in a way that breaks existing callers (new required argument, narrower parameter type, removed return field, etc.).
|
|
87
|
+
- Changing a Zod schema in a way that makes previously-valid input invalid (adding a required field, narrowing an enum, tightening a regex).
|
|
88
|
+
- Changing the shape of a returned object that documented users depend on.
|
|
89
|
+
- Changing event reducer behavior in a way that makes existing event logs replay to different states.
|
|
90
|
+
- Changing the meaning of a `SCHEMA_VERSION` without a migration.
|
|
91
|
+
|
|
92
|
+
**Not breaking** (patch bump only):
|
|
93
|
+
|
|
94
|
+
- Adding a new optional field to a schema (Zod treats missing fields as undefined).
|
|
95
|
+
- Adding a new public export.
|
|
96
|
+
- Adding a new event type (existing logs continue to work, because the old reducer never encounters the new type).
|
|
97
|
+
- Adding a new planner.
|
|
98
|
+
- Performance improvements that don't change observable behavior.
|
|
99
|
+
- Bug fixes, unless they change documented behavior; if so, breaking.
|
|
100
|
+
- Adding content to the starter pack.
|
|
101
|
+
|
|
102
|
+
## CHANGELOG discipline
|
|
103
|
+
|
|
104
|
+
Every release bumps [CHANGELOG.md](CHANGELOG.md). Unreleased changes accumulate under an `## Unreleased` header until the bump. Each release entry includes:
|
|
105
|
+
|
|
106
|
+
- Version + ISO date.
|
|
107
|
+
- Changes grouped by category: **Added**, **Changed**, **Deprecated**, **Removed**, **Fixed**, **Security**. Categories with no entries are omitted.
|
|
108
|
+
- Any schema migration is called out under **Changed** with the prior and new `SCHEMA_VERSION` numbers and a link to the migration file.
|
|
109
|
+
- Promotion entries (alpha -> beta, beta -> rc, rc -> 1.0.0) include attribution for the external-consumer validation that gated the promotion.
|
|
110
|
+
|
|
111
|
+
## Schema versioning specifics
|
|
112
|
+
|
|
113
|
+
When you ship a change that breaks the on-disk shape of `Event` or `CampaignState`:
|
|
114
|
+
|
|
115
|
+
1. Bump `SCHEMA_VERSION` in [src/version.ts](src/version.ts).
|
|
116
|
+
2. Add a migration function in [src/migrations/](src/migrations/) that transforms a state at the prior version to the new one.
|
|
117
|
+
3. Register the migration so `migrate(json)` walks the chain.
|
|
118
|
+
4. Add a test that verifies the migration round-trips correctly against a representative state.
|
|
119
|
+
5. CHANGELOG entry under **Changed** with the old and new `SCHEMA_VERSION` and the migration file path.
|
|
120
|
+
|
|
121
|
+
Schema migrations are automatic on load: `loadCampaign(json)` walks `SCHEMA_VERSION` forward before replay. Consumers don't write migration code unless they fork the engine and add their own persisted shapes.
|
|
122
|
+
|
|
123
|
+
## Current roadmap
|
|
124
|
+
|
|
125
|
+
Concrete next bumps:
|
|
126
|
+
|
|
127
|
+
| Version | When | What |
|
|
128
|
+
|---|---|---|
|
|
129
|
+
| **0.1.0-alpha.0** | 2026-05-12 (current) | First publishable alpha. Phases A through E complete. |
|
|
130
|
+
| **0.1.0-alpha.1+** | as needed | Bug fixes, doc improvements, starter-pack content additions while gathering early feedback. Nothing API-breaking. |
|
|
131
|
+
| **0.2.0-alpha.0** | only if needed | Breaking API change discovered during validation, OR substantial new features that warrant their own alpha cycle (e.g., a full Phase E content fill-out across all subclasses). Pre-1.0 escape hatch. |
|
|
132
|
+
| **0.1.0-beta.0** | when an external consumer ships | First validated alpha promotes to beta. See [Promotion criteria](#promotion-criteria). |
|
|
133
|
+
| **0.1.0-rc.0** | 4 weeks of stable beta | API frozen, bug-fix tickets only. |
|
|
134
|
+
| **1.0.0** | 2 weeks of stable rc | First stable release. API stability promised within the 1.x line. |
|
|
135
|
+
| **1.x.y** | ongoing | Bug fixes (patch), new features (minor) within the 1.x compatibility line. |
|
|
136
|
+
| **2.0.0** | only if unavoidable | Major breaking change with deprecation period and migration. |
|
|
137
|
+
|
|
138
|
+
This is not a calendar commitment. The gate is external-consumer validation; the dates are estimates.
|
|
139
|
+
|
|
140
|
+
## Notes for adopters
|
|
141
|
+
|
|
142
|
+
- **If you're starting today**: pin to a specific version (e.g., `0.1.0-alpha.0`), not a tag range. The pre-1.0 alpha contract permits breaking changes in subsequent minor bumps.
|
|
143
|
+
- **When upgrading**: read the CHANGELOG between your version and the target. Every breaking change is documented.
|
|
144
|
+
- **If a SCHEMA_VERSION bump appears**: your old saves will migrate transparently on load via `loadCampaign(json)`. No action needed.
|
|
145
|
+
- **If you find a breaking change that isn't documented**: that's a bug; please open an issue.
|
|
146
|
+
|
|
147
|
+
## Notes for maintainers
|
|
148
|
+
|
|
149
|
+
- Don't bump the version on every PR. The version is a user-facing signal, not a build counter.
|
|
150
|
+
- When in doubt about whether a change is breaking, treat it as breaking. The cost of an over-cautious minor bump is small; the cost of a silently-breaking patch bump is consumer trust.
|
|
151
|
+
- The `prepublishOnly` script runs the full CI gate. A failed gate blocks publish.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,uBAAuB,EACvB,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC"}
|