@its-not-rocket-science/ananke 0.1.69 → 0.5.1
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 +254 -0
- package/README.md +150 -432
- package/STABLE_API.md +113 -490
- package/conformance/README.md +46 -44
- package/conformance/lockstep-sequence.json +395 -395
- package/conformance/phase-order.json +21 -0
- package/conformance/replay-parity.json +65 -65
- package/conformance/state-hash-regression.json +39 -0
- package/conformance/state-hash.json +23 -22
- package/dist/src/conformance.d.ts +8 -2
- package/dist/src/content/index.d.ts +3 -0
- package/dist/src/content/index.js +2 -0
- package/dist/src/content/injector.d.ts +19 -0
- package/dist/src/content/injector.js +61 -0
- package/dist/src/content/loader.d.ts +3 -0
- package/dist/src/content/loader.js +170 -0
- package/dist/src/content/types.d.ts +56 -0
- package/dist/src/content/types.js +1 -0
- package/dist/src/content/validator.d.ts +6 -0
- package/dist/src/content/validator.js +14 -0
- package/dist/src/content-pack.d.ts +3 -2
- package/dist/src/content-pack.js +205 -10
- package/dist/src/data-governance.d.ts +73 -0
- package/dist/src/data-governance.js +188 -0
- package/dist/src/debug.d.ts +6 -0
- package/dist/src/debug.js +9 -0
- package/dist/src/determinism.d.ts +12 -0
- package/dist/src/determinism.js +93 -0
- package/dist/src/dialogue.d.ts +41 -0
- package/dist/src/dialogue.js +113 -2
- package/dist/src/economy.d.ts +97 -3
- package/dist/src/economy.js +191 -37
- package/dist/src/history/autosave.d.ts +19 -0
- package/dist/src/history/autosave.js +98 -0
- package/dist/src/history/timetravel.d.ts +28 -0
- package/dist/src/history/timetravel.js +61 -0
- package/dist/src/index.d.ts +19 -31
- package/dist/src/index.js +20 -38
- package/dist/src/model3d.js +63 -2
- package/dist/src/narrative/combat-logger.d.ts +25 -0
- package/dist/src/narrative/combat-logger.js +97 -0
- package/dist/src/narrative/plausibility.d.ts +30 -0
- package/dist/src/narrative/plausibility.js +70 -0
- package/dist/src/narrative-layer.d.ts +2 -0
- package/dist/src/narrative-layer.js +2 -0
- package/dist/src/navigation/causal-chain.d.ts +26 -0
- package/dist/src/navigation/causal-chain.js +74 -0
- package/dist/src/netcode.d.ts +1 -1
- package/dist/src/netcode.js +1 -1
- package/dist/src/performance/adaptive-tick.d.ts +23 -0
- package/dist/src/performance/adaptive-tick.js +50 -0
- package/dist/src/plugins/loader.d.ts +23 -0
- package/dist/src/plugins/loader.js +86 -0
- package/dist/src/plugins/registry.d.ts +11 -0
- package/dist/src/plugins/registry.js +28 -0
- package/dist/src/plugins/types.d.ts +31 -0
- package/dist/src/plugins/types.js +7 -0
- package/dist/src/replay.js +5 -2
- package/dist/src/scenario.js +2 -1
- package/dist/src/serialization/binary.d.ts +5 -0
- package/dist/src/serialization/binary.js +193 -0
- package/dist/src/session.d.ts +115 -0
- package/dist/src/session.js +228 -0
- package/dist/src/sim/ai/decide.js +1 -1
- package/dist/src/sim/ai/personality.js +2 -2
- package/dist/src/sim/bodyplan.d.ts +30 -0
- package/dist/src/sim/context.d.ts +2 -0
- package/dist/src/sim/kernel.js +80 -1294
- package/dist/src/sim/normalization.d.ts +12 -0
- package/dist/src/sim/normalization.js +92 -0
- package/dist/src/sim/resolvers/attack-resolver.d.ts +30 -0
- package/dist/src/sim/resolvers/attack-resolver.js +310 -0
- package/dist/src/sim/resolvers/capability-resolver.d.ts +15 -0
- package/dist/src/sim/resolvers/capability-resolver.js +270 -0
- package/dist/src/sim/resolvers/grapple-resolver.d.ts +28 -0
- package/dist/src/sim/resolvers/grapple-resolver.js +70 -0
- package/dist/src/sim/resolvers/shoot-resolver.d.ts +27 -0
- package/dist/src/sim/resolvers/shoot-resolver.js +212 -0
- package/dist/src/sim/resolvers/treat-resolver.d.ts +16 -0
- package/dist/src/sim/resolvers/treat-resolver.js +77 -0
- package/dist/src/sim/step/apply/intents.d.ts +6 -0
- package/dist/src/sim/step/apply/intents.js +83 -0
- package/dist/src/sim/step/kernel-pipeline.d.ts +9 -0
- package/dist/src/sim/step/kernel-pipeline.js +15 -0
- package/dist/src/sim/step/phases/capability-phase.d.ts +8 -0
- package/dist/src/sim/step/phases/capability-phase.js +65 -0
- package/dist/src/sim/step/phases/cooldowns-phase.d.ts +3 -0
- package/dist/src/sim/step/phases/cooldowns-phase.js +37 -0
- package/dist/src/sim/step/phases/prepare-phase.d.ts +10 -0
- package/dist/src/sim/step/phases/prepare-phase.js +33 -0
- package/dist/src/sim/step/pipeline.d.ts +2 -0
- package/dist/src/sim/step/pipeline.js +15 -0
- package/dist/src/sim/step/resolvers/impact-resolver.d.ts +9 -0
- package/dist/src/sim/step/resolvers/impact-resolver.js +55 -0
- package/dist/src/sim/step/world-phases.d.ts +7 -0
- package/dist/src/sim/step/world-phases.js +15 -0
- package/dist/src/sim/step/world-step-context.d.ts +23 -0
- package/dist/src/sim/step/world-step-context.js +1 -0
- package/dist/src/sim/systemic-toxicology.js +1 -1
- package/dist/src/sim/team.js +2 -2
- package/dist/src/sim/testing.js +4 -3
- package/dist/src/sim/toxicology.d.ts +1 -1
- package/dist/src/sim/toxicology.js +1 -1
- package/dist/src/sim/world.d.ts +17 -24
- package/dist/src/snapshot.js +3 -6
- package/dist/src/tier2.d.ts +19 -0
- package/dist/src/tier2.js +21 -0
- package/dist/src/tier3.d.ts +10 -0
- package/dist/src/tier3.js +12 -0
- package/dist/src/version.d.ts +6 -0
- package/dist/src/version.js +8 -0
- package/dist/src/wasm/bridge.d.ts +14 -0
- package/dist/src/wasm/bridge.js +84 -0
- package/dist/src/wasm-kernel.d.ts +2 -0
- package/dist/src/wasm-kernel.js +1 -0
- package/dist/src/world-evolution-backend/engine.d.ts +4 -0
- package/dist/src/world-evolution-backend/engine.js +347 -0
- package/dist/src/world-evolution-backend/host-schema.d.ts +145 -0
- package/dist/src/world-evolution-backend/host-schema.js +375 -0
- package/dist/src/world-evolution-backend/index.d.ts +1 -0
- package/dist/src/world-evolution-backend/index.js +1 -0
- package/dist/src/world-evolution-backend/open-world-host-adapter.d.ts +96 -0
- package/dist/src/world-evolution-backend/open-world-host-adapter.js +208 -0
- package/dist/src/world-evolution-backend/profiles.d.ts +4 -0
- package/dist/src/world-evolution-backend/profiles.js +136 -0
- package/dist/src/world-evolution-backend/public.d.ts +11 -0
- package/dist/src/world-evolution-backend/public.js +7 -0
- package/dist/src/world-evolution-backend/reproducibility.d.ts +8 -0
- package/dist/src/world-evolution-backend/reproducibility.js +35 -0
- package/dist/src/world-evolution-backend/timeline.d.ts +6 -0
- package/dist/src/world-evolution-backend/timeline.js +337 -0
- package/dist/src/world-evolution-backend/types.d.ts +138 -0
- package/dist/src/world-evolution-backend/types.js +1 -0
- package/dist/src/world-evolution-host-backend.d.ts +51 -0
- package/dist/src/world-evolution-host-backend.js +97 -0
- package/dist/src/world-evolution.d.ts +201 -0
- package/dist/src/world-evolution.js +543 -0
- package/dist/src/world-factory.js +2 -1
- package/dist/tools/pack-cli.js +55 -2
- package/docs/bridge-contract.md +140 -332
- package/docs/completion-evidence-dashboard.md +63 -0
- package/docs/host-contract.md +86 -310
- package/docs/host-world-evolution-schema.md +155 -0
- package/docs/integration-primer.md +29 -22
- package/docs/migration-monolith-to-modular.md +102 -120
- package/docs/package-architecture.md +116 -323
- package/docs/plugins/README.md +42 -0
- package/docs/plugins/hooks.md +22 -0
- package/docs/plugins/publishing.md +29 -0
- package/docs/plugins/security-model.md +273 -0
- package/docs/project-overview.md +30 -30
- package/docs/release-dashboard.md +47 -0
- package/docs/session-api.md +127 -0
- package/docs/stable-api-manifest.json +52 -0
- package/docs/trust-dashboard.md +37 -0
- package/docs/versioning.md +256 -245
- package/docs/wire-protocol.md +140 -209
- package/docs/world-evolution-backend.md +200 -0
- package/docs/world-evolution-engine.md +150 -0
- package/docs/world-evolution-host-backend.md +70 -0
- package/docs/world-evolution-orchestration.md +248 -0
- package/package.json +125 -6
- package/schema/content-pack.schema.json +85 -0
- package/schema/plugin.schema.json +57 -0
- package/schema/world-evolution-input.schema.json +196 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# World Evolution Engine Integrator Guide
|
|
2
|
+
|
|
3
|
+
## Intended audience
|
|
4
|
+
|
|
5
|
+
This guide is for **host-platform integrators** (game backend engineers, simulation platform engineers, and tooling teams) who need deterministic, long-horizon world progression with explicit adapter boundaries.
|
|
6
|
+
|
|
7
|
+
If you are building direct game logic on top of the root Tier-1 API, this is likely not your first stop.
|
|
8
|
+
|
|
9
|
+
## Import path and stability tier
|
|
10
|
+
|
|
11
|
+
Preferred additive subpath:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import {
|
|
15
|
+
runWorldEvolution,
|
|
16
|
+
toWorldEvolutionRunRequest,
|
|
17
|
+
buildEvolutionTimeline,
|
|
18
|
+
} from "@its-not-rocket-science/ananke/world-evolution-engine";
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Stability status:
|
|
22
|
+
|
|
23
|
+
- Root (`@its-not-rocket-science/ananke`) remains the only **Tier-1 stable** contract.
|
|
24
|
+
- `@its-not-rocket-science/ananke/world-evolution-engine` is a **shipped, non-Tier-1 additive subpath**.
|
|
25
|
+
- `@its-not-rocket-science/ananke/world-evolution-backend` remains supported as a compatibility alias.
|
|
26
|
+
|
|
27
|
+
## Minimal integration path
|
|
28
|
+
|
|
29
|
+
1. Construct host data using `WorldEvolutionInput`.
|
|
30
|
+
2. Convert to a deterministic run request via `toWorldEvolutionRunRequest(...)`.
|
|
31
|
+
3. Execute `runWorldEvolution(...)`.
|
|
32
|
+
4. Optionally project run output into host UI timelines with `buildEvolutionTimeline(...)`.
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
import {
|
|
36
|
+
toWorldEvolutionRunRequest,
|
|
37
|
+
runWorldEvolution,
|
|
38
|
+
buildEvolutionTimeline,
|
|
39
|
+
type WorldEvolutionInput,
|
|
40
|
+
} from "@its-not-rocket-science/ananke/world-evolution-engine";
|
|
41
|
+
|
|
42
|
+
const hostInput: WorldEvolutionInput = {
|
|
43
|
+
worldSeed: 1337,
|
|
44
|
+
entities: [
|
|
45
|
+
{ kind: "polity", id: "p.alpha", name: "Alpha", population: 120_000, treasury_cu: 40_000 },
|
|
46
|
+
{ kind: "polity", id: "p.beta", name: "Beta", population: 80_000, treasury_cu: 35_000 },
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const runRequest = toWorldEvolutionRunRequest(hostInput, 30, {
|
|
51
|
+
includeDeltas: true,
|
|
52
|
+
checkpointInterval: 10,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const result = runWorldEvolution(runRequest);
|
|
56
|
+
const timeline = buildEvolutionTimeline(result, { includeSummaryText: true });
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Schema expectations
|
|
60
|
+
|
|
61
|
+
- Host ingress contract: `WorldEvolutionInput`.
|
|
62
|
+
- Adapter normalization/validation:
|
|
63
|
+
- `validateWorldEvolutionInput(...)` for deterministic, path-addressed errors.
|
|
64
|
+
- `normalizeHostWorldInput(...)` for canonical sorting.
|
|
65
|
+
- Canonical schema versions:
|
|
66
|
+
- host input schema: `ananke.host-world-evolution-input.v1`
|
|
67
|
+
- backend snapshot schema: `ananke.world-evolution-backend.v1`
|
|
68
|
+
- JSON Schema for host validation: `schema/world-evolution-input.schema.json`.
|
|
69
|
+
|
|
70
|
+
## Determinism guarantees
|
|
71
|
+
|
|
72
|
+
For identical:
|
|
73
|
+
|
|
74
|
+
- normalized input payload,
|
|
75
|
+
- seed,
|
|
76
|
+
- profile + overrides,
|
|
77
|
+
- step count,
|
|
78
|
+
- and engine version,
|
|
79
|
+
|
|
80
|
+
the engine produces deterministic outputs (snapshot/timeline/metrics/deltas/checkpoints).
|
|
81
|
+
|
|
82
|
+
Determinism is supported by:
|
|
83
|
+
|
|
84
|
+
- explicit fixed subsystem order,
|
|
85
|
+
- sorted iteration over IDs,
|
|
86
|
+
- fixed-point simulation primitives,
|
|
87
|
+
- no `Math.random` in the world-evolution step pipeline.
|
|
88
|
+
|
|
89
|
+
## Checkpointing and branching model
|
|
90
|
+
|
|
91
|
+
- `runWorldEvolution(...)` supports periodic checkpoints via `checkpointInterval`.
|
|
92
|
+
- Session/branch orchestration remains in `@its-not-rocket-science/ananke/world-evolution`.
|
|
93
|
+
- Typical flow:
|
|
94
|
+
- evolve with checkpoints,
|
|
95
|
+
- persist checkpoint payloads,
|
|
96
|
+
- resume/fork using orchestration APIs,
|
|
97
|
+
- diff branch output against base for host dashboards.
|
|
98
|
+
|
|
99
|
+
This separation keeps the engine focused on deterministic stepping while orchestration handles lifecycle concerns.
|
|
100
|
+
|
|
101
|
+
## First-hour integrator example
|
|
102
|
+
|
|
103
|
+
See:
|
|
104
|
+
|
|
105
|
+
- `examples/world-evolution-engine-first-hour.ts`
|
|
106
|
+
|
|
107
|
+
It shows:
|
|
108
|
+
|
|
109
|
+
- host-input normalization + validation,
|
|
110
|
+
- deterministic run configuration,
|
|
111
|
+
- timeline projection,
|
|
112
|
+
- checkpoint emission,
|
|
113
|
+
- and a lightweight deterministic re-run sanity check.
|
|
114
|
+
|
|
115
|
+
## Optional host-backend facade
|
|
116
|
+
|
|
117
|
+
For hosts that want a single higher-level wrapper combining adapter + deterministic run + orchestration helpers, use:
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
import { runHostDeterministicEvolution } from "@its-not-rocket-science/ananke/world-evolution-host-backend";
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
See `docs/world-evolution-host-backend.md` for lifecycle wrappers (session/checkpoint resume/branch what-if).
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
## Reproducibility fingerprints (additive)
|
|
127
|
+
|
|
128
|
+
Use deterministic fingerprints to verify replay identity across hosts, caches, and audit logs.
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
import {
|
|
132
|
+
buildEvolutionRunReproducibilityRecord,
|
|
133
|
+
runWorldEvolution,
|
|
134
|
+
toWorldEvolutionRunRequest,
|
|
135
|
+
} from "@its-not-rocket-science/ananke/world-evolution-engine";
|
|
136
|
+
|
|
137
|
+
const hostInput = {
|
|
138
|
+
worldSeed: 1337,
|
|
139
|
+
entities: [],
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const request = toWorldEvolutionRunRequest(hostInput, 30, {
|
|
143
|
+
includeDeltas: true,
|
|
144
|
+
checkpointInterval: 10,
|
|
145
|
+
});
|
|
146
|
+
const result = runWorldEvolution(request);
|
|
147
|
+
const proof = buildEvolutionRunReproducibilityRecord(request, result);
|
|
148
|
+
|
|
149
|
+
// proof.requestFingerprint and proof.outputDigest are stable 8-hex hashes
|
|
150
|
+
```
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# World Evolution Host Backend (Additive Facade)
|
|
2
|
+
|
|
3
|
+
## Why this exists
|
|
4
|
+
|
|
5
|
+
`@its-not-rocket-science/ananke/world-evolution-host-backend` is an additive integration facade for external host platforms (e.g. OpenWorldBuilder-style generators) that want a single deterministic call path without bypassing existing authoritative subsystems.
|
|
6
|
+
|
|
7
|
+
It **does not replace** core modules. It composes:
|
|
8
|
+
|
|
9
|
+
- host schema adapter + validator (`world-evolution-backend`)
|
|
10
|
+
- deterministic step engine (`world-evolution-backend`)
|
|
11
|
+
- session/checkpoint/branch orchestration (`world-evolution`)
|
|
12
|
+
|
|
13
|
+
## Stability boundary
|
|
14
|
+
|
|
15
|
+
- Root Tier-1 API (`@its-not-rocket-science/ananke`) remains unchanged.
|
|
16
|
+
- This facade is a dedicated additive subpath for host integrations.
|
|
17
|
+
- Existing backend/orchestration APIs remain authoritative and fully usable directly.
|
|
18
|
+
|
|
19
|
+
## Architecture (composition points)
|
|
20
|
+
|
|
21
|
+
1. Host input enters as `WorldEvolutionInput`.
|
|
22
|
+
2. `normalizeHostWorldInput` / `toAnankeEvolutionState` canonicalize and validate deterministically.
|
|
23
|
+
3. `toWorldEvolutionRunRequest` maps host input into canonical evolution snapshots.
|
|
24
|
+
4. `runWorldEvolution` executes deterministic N-step simulation.
|
|
25
|
+
5. `buildEvolutionTimeline` projects host-friendly timeline/history events.
|
|
26
|
+
6. Optional orchestration wrappers expose:
|
|
27
|
+
- sessions
|
|
28
|
+
- checkpoints/resume
|
|
29
|
+
- branch sandbox runs
|
|
30
|
+
|
|
31
|
+
This keeps deterministic simulation logic in existing subsystem modules while providing a smaller host-facing operational surface.
|
|
32
|
+
|
|
33
|
+
## Example import
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import {
|
|
37
|
+
runHostDeterministicEvolution,
|
|
38
|
+
createHostEvolutionSession,
|
|
39
|
+
runHostEvolutionSession,
|
|
40
|
+
resumeHostEvolutionSessionFromCheckpoint,
|
|
41
|
+
createHostEvolutionBranch,
|
|
42
|
+
runHostEvolutionBranch,
|
|
43
|
+
} from "@its-not-rocket-science/ananke/world-evolution-host-backend";
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Reproducibility contract
|
|
47
|
+
|
|
48
|
+
For identical normalized host input + ruleset/profile + seed + steps + engine version, outputs are deterministic:
|
|
49
|
+
|
|
50
|
+
- final snapshot
|
|
51
|
+
- timeline/history projection
|
|
52
|
+
- metrics
|
|
53
|
+
- deltas/checkpoints (when enabled)
|
|
54
|
+
|
|
55
|
+
Resume and branch flows preserve deterministic behavior because they route through existing checkpoint and branch orchestration primitives.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
### Replay proof helper
|
|
59
|
+
|
|
60
|
+
If hosts need a single call that includes deterministic replay proof metadata, use:
|
|
61
|
+
|
|
62
|
+
- `runHostDeterministicEvolutionWithReplayProof(...)`
|
|
63
|
+
|
|
64
|
+
It returns the same data as `runHostDeterministicEvolution(...)` plus:
|
|
65
|
+
|
|
66
|
+
- `reproducibility.requestFingerprint`
|
|
67
|
+
- `reproducibility.outputDigest`
|
|
68
|
+
|
|
69
|
+
Both values are deterministic for the same normalized run request/output and are intended for traceability/caching checks.
|
|
70
|
+
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# World Evolution Orchestration API (Host-facing)
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
The orchestration API adds a session-oriented host surface on top of existing deterministic world subsystems. It is designed for external tools (for example OpenWorldBuilder) that need both:
|
|
6
|
+
|
|
7
|
+
- one-shot evolution runs
|
|
8
|
+
- stepwise evolution loops with checkpoints/timelines
|
|
9
|
+
|
|
10
|
+
It is additive and uses the existing world-evolution backend as the deterministic subsystem pipeline.
|
|
11
|
+
|
|
12
|
+
## Import path
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
import {
|
|
16
|
+
createEvolutionSession,
|
|
17
|
+
createEvolutionBranch,
|
|
18
|
+
forkEvolutionBranch,
|
|
19
|
+
runEvolutionOnBranch,
|
|
20
|
+
diffBranchAgainstBase,
|
|
21
|
+
runEvolution,
|
|
22
|
+
stepEvolution,
|
|
23
|
+
getEvolutionSummary,
|
|
24
|
+
resumeEvolutionSessionFromCheckpoint,
|
|
25
|
+
serializeEvolutionCheckpoint,
|
|
26
|
+
deserializeEvolutionCheckpoint,
|
|
27
|
+
serializeEvolutionIntermediateState,
|
|
28
|
+
serializeEvolutionFinalState,
|
|
29
|
+
buildEvolutionCheckpointDiffs,
|
|
30
|
+
serializeEvolutionResult,
|
|
31
|
+
deserializeEvolutionResult,
|
|
32
|
+
} from "@its-not-rocket-science/ananke/world-evolution";
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Determinism contract
|
|
36
|
+
|
|
37
|
+
For a fixed:
|
|
38
|
+
|
|
39
|
+
- canonical input snapshot
|
|
40
|
+
- ruleset
|
|
41
|
+
- seed
|
|
42
|
+
- step count
|
|
43
|
+
- engine version (`ananke.world-evolution-backend.v1`)
|
|
44
|
+
|
|
45
|
+
the API returns deterministic outputs.
|
|
46
|
+
|
|
47
|
+
## Canonical vs derived state
|
|
48
|
+
|
|
49
|
+
- `canonicalSnapshot` passed to `createEvolutionSession` is preserved as canonical input.
|
|
50
|
+
- mutable simulation progression happens on an internal clone.
|
|
51
|
+
- all returned snapshots/results are cloned host-safe copies.
|
|
52
|
+
- `createEvolutionBranch(...)` keeps a `baseSnapshotRef` immutable and writes all branch progression to `derivedState`.
|
|
53
|
+
|
|
54
|
+
## Canonical-vs-sandbox timelines for external platforms
|
|
55
|
+
|
|
56
|
+
The branching surface is built for host platforms (worldbuilding tools, procedural generators, editor sandboxes) that need “what-if” simulation while preserving canonical truth.
|
|
57
|
+
|
|
58
|
+
- Canonical world data stays untouched as the source of truth.
|
|
59
|
+
- Each sandbox branch stores:
|
|
60
|
+
- `baseSnapshotRef` (immutable branch base checkpoint/snapshot/hash)
|
|
61
|
+
- `derivedState` (mutable branch-local simulation state)
|
|
62
|
+
- `branchMetadata`:
|
|
63
|
+
- `name`
|
|
64
|
+
- `description`
|
|
65
|
+
- `seed`
|
|
66
|
+
- `rulesetProfile`
|
|
67
|
+
- `createdAtStep`
|
|
68
|
+
- optional `parentBranchId`
|
|
69
|
+
- Multiple timelines can be created from the same canonical snapshot, each with independent seed/ruleset/step progression.
|
|
70
|
+
|
|
71
|
+
### Branch lifecycle
|
|
72
|
+
|
|
73
|
+
1. Start from canonical snapshot:
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import { createEvolutionBranch } from "@its-not-rocket-science/ananke/world-evolution";
|
|
77
|
+
import type { WorldEvolutionSnapshot } from "@its-not-rocket-science/ananke/world-evolution-backend";
|
|
78
|
+
|
|
79
|
+
declare const canonicalSnapshot: WorldEvolutionSnapshot;
|
|
80
|
+
|
|
81
|
+
const branch = createEvolutionBranch({
|
|
82
|
+
baseSnapshot: canonicalSnapshot,
|
|
83
|
+
metadata: {
|
|
84
|
+
name: "alt-history: no treaty",
|
|
85
|
+
description: "stress-test a no-alliance variant",
|
|
86
|
+
seed: 1337,
|
|
87
|
+
rulesetId: "full_world_evolution",
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
2. Run deterministic branch evolution:
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
import { createEvolutionBranch, runEvolutionOnBranch } from "@its-not-rocket-science/ananke/world-evolution";
|
|
96
|
+
import type { WorldEvolutionSnapshot } from "@its-not-rocket-science/ananke/world-evolution-backend";
|
|
97
|
+
|
|
98
|
+
declare const canonicalSnapshot: WorldEvolutionSnapshot;
|
|
99
|
+
|
|
100
|
+
const branch = createEvolutionBranch({
|
|
101
|
+
baseSnapshot: canonicalSnapshot,
|
|
102
|
+
metadata: { name: "alt-history: no treaty", seed: 1337, rulesetId: "full_world_evolution" },
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
runEvolutionOnBranch(branch, { steps: 120, includeDeltas: true });
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
3. Fork additional sandboxes from any branch point:
|
|
109
|
+
|
|
110
|
+
```ts
|
|
111
|
+
import { createEvolutionBranch, forkEvolutionBranch } from "@its-not-rocket-science/ananke/world-evolution";
|
|
112
|
+
import type { WorldEvolutionSnapshot } from "@its-not-rocket-science/ananke/world-evolution-backend";
|
|
113
|
+
|
|
114
|
+
declare const canonicalSnapshot: WorldEvolutionSnapshot;
|
|
115
|
+
|
|
116
|
+
const branch = createEvolutionBranch({
|
|
117
|
+
baseSnapshot: canonicalSnapshot,
|
|
118
|
+
metadata: { name: "alt-history: no treaty", seed: 1337, rulesetId: "full_world_evolution" },
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
const fork = forkEvolutionBranch(branch, {
|
|
122
|
+
metadata: { name: "alt-history: hard winter", seed: 7331 },
|
|
123
|
+
});
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
4. Compute host-friendly canonical-vs-sandbox diffs:
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
import { createEvolutionBranch, diffBranchAgainstBase } from "@its-not-rocket-science/ananke/world-evolution";
|
|
130
|
+
import type { WorldEvolutionSnapshot } from "@its-not-rocket-science/ananke/world-evolution-backend";
|
|
131
|
+
|
|
132
|
+
declare const canonicalSnapshot: WorldEvolutionSnapshot;
|
|
133
|
+
|
|
134
|
+
const branch = createEvolutionBranch({
|
|
135
|
+
baseSnapshot: canonicalSnapshot,
|
|
136
|
+
metadata: { name: "alt-history: no treaty", seed: 1337, rulesetId: "full_world_evolution" },
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
const diff = diffBranchAgainstBase(branch);
|
|
140
|
+
// worldChanges + polityDeltas for dashboards/tools/review UIs
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Determinism and isolation guarantees
|
|
144
|
+
|
|
145
|
+
- Same base snapshot + same seed + same ruleset + same step inputs => same branch result.
|
|
146
|
+
- Branch state cannot mutate its `baseSnapshotRef`.
|
|
147
|
+
- Branch execution does not mutate canonical host state.
|
|
148
|
+
- Sibling branches remain isolated from each other.
|
|
149
|
+
|
|
150
|
+
## Explicit pipeline ordering
|
|
151
|
+
|
|
152
|
+
Each step uses the deterministic backend pipeline in this order:
|
|
153
|
+
|
|
154
|
+
1. polity day (trade/war baseline)
|
|
155
|
+
2. governance progression and tax effects
|
|
156
|
+
3. diplomacy treaty updates
|
|
157
|
+
4. trade route efficiency + trade application
|
|
158
|
+
5. migration resolution + flow application
|
|
159
|
+
6. climate event generation/aggregation/lifecycle
|
|
160
|
+
7. epidemic progression and death pressure
|
|
161
|
+
|
|
162
|
+
The ordering is fixed, iteration is sorted where needed, and no random host clock/source is used.
|
|
163
|
+
|
|
164
|
+
## Host integration flow
|
|
165
|
+
|
|
166
|
+
1. `createEvolutionSession(config)`
|
|
167
|
+
2. evolve either with:
|
|
168
|
+
- `runEvolution(session, { steps })`, or
|
|
169
|
+
- repeated `stepEvolution(session)`
|
|
170
|
+
3. call `getEvolutionSummary(session)` at any point
|
|
171
|
+
4. archive run artifacts via `serializeEvolutionResult(result)` / `deserializeEvolutionResult(json)`
|
|
172
|
+
|
|
173
|
+
## Checkpointing and resume for long-running jobs
|
|
174
|
+
|
|
175
|
+
- Set `checkpointInterval` in `createEvolutionSession` and/or `runEvolution`.
|
|
176
|
+
- Each checkpoint now includes deterministic metadata:
|
|
177
|
+
- `engineVersion`
|
|
178
|
+
- `seed`
|
|
179
|
+
- `rulesetProfile`
|
|
180
|
+
- `step`
|
|
181
|
+
- backend `schemaVersion`
|
|
182
|
+
- Resume from a checkpoint with `resumeEvolutionSessionFromCheckpoint(checkpoint)`.
|
|
183
|
+
- Compatibility validation is enforced on deserialize/resume:
|
|
184
|
+
- engine mismatch -> reject
|
|
185
|
+
- backend schema mismatch -> reject
|
|
186
|
+
- seed mismatch between metadata and snapshot -> reject
|
|
187
|
+
|
|
188
|
+
### 1000-step host pattern (background worker)
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
import { runEvolution, serializeEvolutionCheckpoint } from "@its-not-rocket-science/ananke/world-evolution";
|
|
192
|
+
import type { EvolutionSession } from "@its-not-rocket-science/ananke/world-evolution";
|
|
193
|
+
|
|
194
|
+
declare const session: EvolutionSession;
|
|
195
|
+
declare const hostStorage: { put(path: string, content: string): Promise<void> };
|
|
196
|
+
declare const jobId: string;
|
|
197
|
+
|
|
198
|
+
const result = runEvolution(session, {
|
|
199
|
+
steps: 1000,
|
|
200
|
+
checkpointInterval: 100,
|
|
201
|
+
includeCheckpointDiffs: true, // optional
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
const cp = result.checkpoints?.at(-1);
|
|
205
|
+
if (cp) {
|
|
206
|
+
await hostStorage.put(`jobs/${jobId}/checkpoint.json`, serializeEvolutionCheckpoint(cp));
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
On restart:
|
|
211
|
+
|
|
212
|
+
```ts
|
|
213
|
+
import {
|
|
214
|
+
deserializeEvolutionCheckpoint,
|
|
215
|
+
resumeEvolutionSessionFromCheckpoint,
|
|
216
|
+
runEvolution,
|
|
217
|
+
} from "@its-not-rocket-science/ananke/world-evolution";
|
|
218
|
+
|
|
219
|
+
declare const hostStorage: { get(path: string): Promise<string> };
|
|
220
|
+
declare const jobId: string;
|
|
221
|
+
declare const remainingSteps: number;
|
|
222
|
+
|
|
223
|
+
const raw = await hostStorage.get(`jobs/${jobId}/checkpoint.json`);
|
|
224
|
+
const checkpoint = deserializeEvolutionCheckpoint(raw);
|
|
225
|
+
const resumed = resumeEvolutionSessionFromCheckpoint(checkpoint);
|
|
226
|
+
runEvolution(resumed, { steps: remainingSteps, checkpointInterval: 100 });
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### User-saveable sandbox branches
|
|
230
|
+
|
|
231
|
+
For “save branch” UX in a sandbox/editor host:
|
|
232
|
+
|
|
233
|
+
1. Persist `serializeEvolutionIntermediateState(session)` as the branch point.
|
|
234
|
+
2. Resume branch sessions with `resumeEvolutionSessionFromCheckpoint(...)`.
|
|
235
|
+
3. Optionally compare branch progression via `buildEvolutionCheckpointDiffs(...)`.
|
|
236
|
+
4. Persist final branch states with `serializeEvolutionFinalState(...)`.
|
|
237
|
+
|
|
238
|
+
## Types
|
|
239
|
+
|
|
240
|
+
- `EvolutionSessionConfig`
|
|
241
|
+
- `EvolutionRequest`
|
|
242
|
+
- `EvolutionRuleset`
|
|
243
|
+
- `EvolutionRunResult`
|
|
244
|
+
- `EvolutionCheckpoint`
|
|
245
|
+
- `EvolutionCheckpointMetadata`
|
|
246
|
+
- `EvolutionCheckpointDiff`
|
|
247
|
+
- `EvolutionTimelineEvent`
|
|
248
|
+
- `EvolutionMetrics` (re-export of world metrics)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@its-not-rocket-science/ananke",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Deterministic lockstep-friendly SI-units RPG/physics core (fixed-point TS)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,6 +38,10 @@
|
|
|
38
38
|
"import": "./dist/src/campaign-layer.js",
|
|
39
39
|
"types": "./dist/src/campaign-layer.d.ts"
|
|
40
40
|
},
|
|
41
|
+
"./campaign-layer": {
|
|
42
|
+
"import": "./dist/src/campaign-layer.js",
|
|
43
|
+
"types": "./dist/src/campaign-layer.d.ts"
|
|
44
|
+
},
|
|
41
45
|
"./social": {
|
|
42
46
|
"import": "./dist/src/social.js",
|
|
43
47
|
"types": "./dist/src/social.d.ts"
|
|
@@ -46,6 +50,10 @@
|
|
|
46
50
|
"import": "./dist/src/narrative-layer.js",
|
|
47
51
|
"types": "./dist/src/narrative-layer.d.ts"
|
|
48
52
|
},
|
|
53
|
+
"./narrative-layer": {
|
|
54
|
+
"import": "./dist/src/narrative-layer.js",
|
|
55
|
+
"types": "./dist/src/narrative-layer.d.ts"
|
|
56
|
+
},
|
|
49
57
|
"./anatomy": {
|
|
50
58
|
"import": "./dist/src/anatomy/index.js",
|
|
51
59
|
"types": "./dist/src/anatomy/index.d.ts"
|
|
@@ -178,10 +186,18 @@
|
|
|
178
186
|
"import": "./dist/src/schema-migration.js",
|
|
179
187
|
"types": "./dist/src/schema-migration.d.ts"
|
|
180
188
|
},
|
|
189
|
+
"./schema-migration": {
|
|
190
|
+
"import": "./dist/src/schema-migration.js",
|
|
191
|
+
"types": "./dist/src/schema-migration.d.ts"
|
|
192
|
+
},
|
|
181
193
|
"./content-pack": {
|
|
182
194
|
"import": "./dist/src/content-pack.js",
|
|
183
195
|
"types": "./dist/src/content-pack.d.ts"
|
|
184
196
|
},
|
|
197
|
+
"./content": {
|
|
198
|
+
"import": "./dist/src/content/index.js",
|
|
199
|
+
"types": "./dist/src/content/index.d.ts"
|
|
200
|
+
},
|
|
185
201
|
"./terrain-bridge": {
|
|
186
202
|
"import": "./dist/src/terrain-bridge.js",
|
|
187
203
|
"types": "./dist/src/terrain-bridge.d.ts"
|
|
@@ -205,6 +221,38 @@
|
|
|
205
221
|
"./conformance": {
|
|
206
222
|
"import": "./dist/src/conformance.js",
|
|
207
223
|
"types": "./dist/src/conformance.d.ts"
|
|
224
|
+
},
|
|
225
|
+
"./tier2": {
|
|
226
|
+
"import": "./dist/src/tier2.js",
|
|
227
|
+
"types": "./dist/src/tier2.d.ts"
|
|
228
|
+
},
|
|
229
|
+
"./tier3": {
|
|
230
|
+
"import": "./dist/src/tier3.js",
|
|
231
|
+
"types": "./dist/src/tier3.d.ts"
|
|
232
|
+
},
|
|
233
|
+
"./data-governance": {
|
|
234
|
+
"import": "./dist/src/data-governance.js",
|
|
235
|
+
"types": "./dist/src/data-governance.d.ts"
|
|
236
|
+
},
|
|
237
|
+
"./world-evolution-backend": {
|
|
238
|
+
"import": "./dist/src/world-evolution-backend/index.js",
|
|
239
|
+
"types": "./dist/src/world-evolution-backend/index.d.ts"
|
|
240
|
+
},
|
|
241
|
+
"./world-evolution": {
|
|
242
|
+
"import": "./dist/src/world-evolution.js",
|
|
243
|
+
"types": "./dist/src/world-evolution.d.ts"
|
|
244
|
+
},
|
|
245
|
+
"./world-evolution-engine": {
|
|
246
|
+
"import": "./dist/src/world-evolution-backend/public.js",
|
|
247
|
+
"types": "./dist/src/world-evolution-backend/public.d.ts"
|
|
248
|
+
},
|
|
249
|
+
"./world-evolution-host-backend": {
|
|
250
|
+
"import": "./dist/src/world-evolution-host-backend.js",
|
|
251
|
+
"types": "./dist/src/world-evolution-host-backend.d.ts"
|
|
252
|
+
},
|
|
253
|
+
"./session": {
|
|
254
|
+
"import": "./dist/src/session.js",
|
|
255
|
+
"types": "./dist/src/session.d.ts"
|
|
208
256
|
}
|
|
209
257
|
},
|
|
210
258
|
"workspaces": [
|
|
@@ -219,21 +267,41 @@
|
|
|
219
267
|
"docs/host-contract.md",
|
|
220
268
|
"docs/integration-primer.md",
|
|
221
269
|
"docs/bridge-contract.md",
|
|
270
|
+
"docs/plugins/README.md",
|
|
271
|
+
"docs/plugins/hooks.md",
|
|
272
|
+
"docs/plugins/publishing.md",
|
|
273
|
+
"docs/plugins/security-model.md",
|
|
222
274
|
"docs/performance.md",
|
|
275
|
+
"docs/release-dashboard.md",
|
|
223
276
|
"docs/versioning.md",
|
|
277
|
+
"docs/world-evolution-backend.md",
|
|
278
|
+
"docs/world-evolution-orchestration.md",
|
|
279
|
+
"docs/session-api.md",
|
|
224
280
|
"docs/emergent-validation-report.md",
|
|
281
|
+
"docs/completion-evidence-dashboard.md",
|
|
282
|
+
"docs/trust-dashboard.md",
|
|
225
283
|
"docs/package-architecture.md",
|
|
226
284
|
"docs/migration-monolith-to-modular.md",
|
|
227
285
|
"docs/wire-protocol.md",
|
|
228
286
|
"schema/world.schema.json",
|
|
229
287
|
"schema/replay.schema.json",
|
|
230
288
|
"schema/pack.schema.json",
|
|
289
|
+
"schema/content-pack.schema.json",
|
|
290
|
+
"schema/plugin.schema.json",
|
|
231
291
|
"CHANGELOG.md",
|
|
232
|
-
"STABLE_API.md"
|
|
292
|
+
"STABLE_API.md",
|
|
293
|
+
"docs/stable-api-manifest.json",
|
|
294
|
+
"docs/host-world-evolution-schema.md",
|
|
295
|
+
"schema/world-evolution-input.schema.json",
|
|
296
|
+
"docs/world-evolution-engine.md",
|
|
297
|
+
"docs/world-evolution-host-backend.md"
|
|
233
298
|
],
|
|
234
299
|
"engines": {
|
|
235
300
|
"node": ">=18"
|
|
236
301
|
},
|
|
302
|
+
"publishConfig": {
|
|
303
|
+
"access": "public"
|
|
304
|
+
},
|
|
237
305
|
"repository": {
|
|
238
306
|
"type": "git",
|
|
239
307
|
"url": "git+https://github.com/its-not-rocket-science/ananke.git"
|
|
@@ -248,12 +316,13 @@
|
|
|
248
316
|
"game-engine"
|
|
249
317
|
],
|
|
250
318
|
"scripts": {
|
|
319
|
+
"release": "bash scripts/tag-release.sh",
|
|
251
320
|
"prepublishOnly": "npm run build && npm run test:coverage && npm run audit-deprecations -- --check",
|
|
252
|
-
"build": "tsc -p tsconfig.build.json",
|
|
321
|
+
"build": "npm run sync-version && tsc -p tsconfig.build.json",
|
|
253
322
|
"test": "vitest run",
|
|
254
323
|
"test:watch": "vitest",
|
|
255
324
|
"test:coverage": "vitest run --coverage",
|
|
256
|
-
"ci": "npm run build && npm run test:coverage && npm run check-boundaries",
|
|
325
|
+
"ci": "npm run check-version-sync && npm run build && npm run test:coverage && npm run check-boundaries && npm run check-stable-api && npm run check-maturity-evidence && npm run check-trust-dashboard-artifacts && npm run check-public-contract && npm run check-export-status-matrix && npm run check:docs",
|
|
257
326
|
"release-check": "node dist/tools/release-check.js",
|
|
258
327
|
"release-check:quick": "node dist/tools/release-check.js --quick",
|
|
259
328
|
"check-boundaries": "node dist/tools/check-package-boundaries.js",
|
|
@@ -285,6 +354,8 @@
|
|
|
285
354
|
"ref:species-lab:quick": "node dist/examples/reference/species-lab/index.js --quick",
|
|
286
355
|
"generate-module-index": "node dist/tools/generate-module-index.js",
|
|
287
356
|
"generate-recipes-matrix": "node dist/tools/generate-recipes-matrix.js",
|
|
357
|
+
"generate-release-dashboard": "node tools/generate-release-dashboard.mjs --write",
|
|
358
|
+
"check-release-dashboard": "node tools/generate-release-dashboard.mjs --check",
|
|
288
359
|
"generate-conformance-fixtures": "node dist/tools/generate-conformance-fixtures.js",
|
|
289
360
|
"conformance-runner": "node dist/tools/conformance-runner.js",
|
|
290
361
|
"generate-corpus": "node dist/tools/generate-corpus.js",
|
|
@@ -308,8 +379,56 @@
|
|
|
308
379
|
"build:wasm": "asc as/units.ts --outFile dist/as/units.wasm --textFile dist/as/units.wat --runtime stub --optimize",
|
|
309
380
|
"build:wasm:push": "asc as/push.ts --outFile dist/as/push.wasm --textFile dist/as/push.wat --runtime stub --optimize --initialMemory 1",
|
|
310
381
|
"build:wasm:injury": "asc as/injury.ts --outFile dist/as/injury.wasm --textFile dist/as/injury.wat --runtime stub --optimize --initialMemory 1",
|
|
311
|
-
"build:wasm:all": "npm run build:wasm && npm run build:wasm:push && npm run build:wasm:injury",
|
|
312
|
-
"test:wasm": "npm run build:wasm:all && vitest run test/as/"
|
|
382
|
+
"build:wasm:all": "npm run build:wasm && npm run build:wasm:push && npm run build:wasm:injury && npm run build:wasm:core",
|
|
383
|
+
"test:wasm": "npm run build:wasm:all && vitest run test/as/",
|
|
384
|
+
"check-stable-api": "node dist/tools/check-stable-api.js",
|
|
385
|
+
"check-boundaries:report": "node dist/tools/check-package-boundaries.js --report-md=docs/package-boundary-report.md",
|
|
386
|
+
"example:first-hour": "node dist/examples/guided-first-hour.js",
|
|
387
|
+
"check-maturity-evidence": "node tools/check-maturity-evidence.mjs",
|
|
388
|
+
"test:determinism": "npm run build:wasm:all && node tools/run-determinism-tests.mjs test/determinism/fuzz-against-wasm.spec.ts test/determinism/regression.spec.ts",
|
|
389
|
+
"test:determinism:nightly": "ANANKE_STRICT_DETERMINISM=1 DETERMINISM_WORLD_STATES=10000 DETERMINISM_COMMANDS_PER_STATE=1000 npm run test:determinism -- --seed=1337",
|
|
390
|
+
"test:determinism:ci": "ANANKE_STRICT_DETERMINISM=1 DETERMINISM_WORLD_STATES=2000 DETERMINISM_COMMANDS_PER_STATE=500 npm run test:determinism -- --seed=1337",
|
|
391
|
+
"benchmark:run": "node dist/tools/benchmark-dashboard/run.js",
|
|
392
|
+
"benchmark:history": "node dist/tools/benchmark-dashboard/publish-history.js",
|
|
393
|
+
"benchmark:dashboard": "node dist/tools/benchmark-dashboard/generate-dashboard.js",
|
|
394
|
+
"benchmark:budget": "node dist/tools/benchmark-dashboard/check-budget.js",
|
|
395
|
+
"extract-api-surface": "node dist/tools/api-surface.js --out=api/api-surface-v1.0.0.json",
|
|
396
|
+
"check-api-diff": "node dist/tools/api-diff-check.js --base=api-surface-main.json --head=api-surface-pr.json",
|
|
397
|
+
"check-semver": "node dist/tools/semver-check.js --baseSurface=api-surface-main.json --headSurface=api-surface-pr.json --basePackage=package-main.json --headPackage=package.json",
|
|
398
|
+
"build:wasm:core": "asc as/ananke-core.ts --outFile wasm/ananke-core.wasm --runtime stub --optimize --noAssert",
|
|
399
|
+
"benchmark": "node dist/tools/wasm-benchmark.js",
|
|
400
|
+
"docs:api": "npm run sync-version && node tools/generate-api-docs.mjs",
|
|
401
|
+
"check:beta-readiness": "node tools/check-beta-readiness.mjs --file=.github/beta-launch-readiness.json",
|
|
402
|
+
"run:proof-of-use": "node dist/tools/proof-of-use-stable.js",
|
|
403
|
+
"sync-version": "node tools/sync-version.mjs --write",
|
|
404
|
+
"check-version-sync": "node tools/sync-version.mjs --check",
|
|
405
|
+
"run:proof-of-use:extended": "node dist/tools/proof-of-use-extended.js",
|
|
406
|
+
"check-boundaries:strict-all": "node dist/tools/check-package-boundaries.js --strict-all",
|
|
407
|
+
"check-boundaries:ci": "node dist/tools/check-package-boundaries.js --report-md=docs/package-boundary-report.md --max-hard=84 --max-suspicious=60",
|
|
408
|
+
"ref:host-coherence": "node dist/examples/reference/host-coherence/index.js",
|
|
409
|
+
"ref:host-coherence:web": "node examples/reference/host-coherence/server.mjs",
|
|
410
|
+
"check-docs-tier1-imports": "node tools/check-docs-tier1-imports.mjs",
|
|
411
|
+
"check-doc-version-sync": "node tools/check-doc-version-sync.mjs",
|
|
412
|
+
"check-doc-ts-examples": "npm run check:doc-examples",
|
|
413
|
+
"check-public-contract": "node dist/tools/check-public-contract.js",
|
|
414
|
+
"check:doc-examples": "node dist/tools/check-doc-examples.js",
|
|
415
|
+
"generate-export-status-matrix": "node dist/tools/generate-export-status-matrix.js --write",
|
|
416
|
+
"check-export-status-matrix": "node dist/tools/generate-export-status-matrix.js --check",
|
|
417
|
+
"test:first-hour-smoke": "npm run build && node tools/first-hour-smoke.mjs",
|
|
418
|
+
"check-trust-dashboard-artifacts": "node dist/tools/generate-trust-dashboard.js --check",
|
|
419
|
+
"check:docs": "node dist/tools/check-doc-links-and-references.js && node dist/tools/check-doc-semantic-consistency.js && node dist/tools/check-doc-language.js",
|
|
420
|
+
"check-doc-semantic-consistency": "node dist/tools/check-doc-semantic-consistency.js",
|
|
421
|
+
"generate-trust-dashboard": "node dist/tools/generate-trust-dashboard.js --write",
|
|
422
|
+
"check-doc-language": "node dist/tools/check-doc-language.js",
|
|
423
|
+
"generate-ci-trust-report": "node tools/generate-ci-trust-report.mjs --output=docs/dashboard/ci-trust-report.json",
|
|
424
|
+
"check-trust-dashboard-main": "node dist/tools/generate-trust-dashboard.js --fail-on-unverified",
|
|
425
|
+
"generate-determinism-release-artifacts": "node tools/generate-determinism-release-artifacts.mjs --input=determinism-report/results.json --summary=docs/dashboard/determinism-release-status.json --matrix=docs/dashboard/determinism-matrix-summary.json --doc=docs/determinism-status.md",
|
|
426
|
+
"check-determinism-release-artifacts": "node tools/check-determinism-release-artifacts.mjs --summary=docs/dashboard/determinism-release-status.json",
|
|
427
|
+
"check-coverage-summary": "node tools/check-coverage-summary.mjs --input=coverage/coverage-summary.json",
|
|
428
|
+
"generate-coverage-status": "node tools/check-coverage-summary.mjs --input=coverage/coverage-summary.json --markdown-out=docs/dashboard/coverage-status.md",
|
|
429
|
+
"audit:repo-discipline": "node tools/audit-repo-discipline.mjs",
|
|
430
|
+
"example:session-embedding-minimal": "node dist/examples/session-embedding-minimal/index.js",
|
|
431
|
+
"generate-stub-pages": "node scripts/template.js"
|
|
313
432
|
},
|
|
314
433
|
"devDependencies": {
|
|
315
434
|
"@eslint/js": "^9.39.3",
|