@its-not-rocket-science/ananke 0.1.48 → 0.1.50

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 CHANGED
@@ -6,6 +6,35 @@ Versioning follows [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ---
8
8
 
9
+ ## [0.1.50] — 2026-03-28
10
+
11
+ ### Docs
12
+
13
+ - **PA-1 — Documentation Reconciliation & Architecture Map (complete):**
14
+ - `docs/project-overview.md`: Updated stale "next priority" reference plugin note to reflect Godot and Unity bridge plugins are complete; updated CE-1–CE-4 companion infrastructure from "planned" to "all complete"; updated PH-1–PH-8 platform hardening table from "Planned" to "Complete".
15
+ - `docs/module-index.md` (new): Machine-checkable table of all 41 package subpath exports, with stability tier (Tier 1 Stable / Tier 2 Experimental / Tier 3 Campaign-scale), key exports, use-case notes, and doc links. Includes use-case entry-point guide at the top.
16
+ - `tools/generate-module-index.ts` (new): Script that reads `package.json` exports and renders `docs/module-index.md`. Added `generate-module-index` npm script.
17
+ - `docs/integration-primer.md`: Added "Choose Your Entry Point" section before Architecture Overview, with use-case decision tree and module tier table linking to `docs/module-index.md`.
18
+ - `README.md`: Added `docs/module-index.md` row to Further Reading table.
19
+ - Build: clean. Tests: 5,261 passing. Coverage: statements 97.1 %, branches 87.83 %, functions 95.65 %, lines 97.1 %.
20
+
21
+ ---
22
+
23
+ ## [0.1.49] — 2026-03-28
24
+
25
+ ### Fixed
26
+
27
+ - **Crafting subsystem — remaining TODO/placeholder items resolved:**
28
+ - `src/crafting/manufacturing.ts` — `createAssemblySteps`: now derives skill types and tool categories from the recipe's actual `skillRequirements` and `toolRequirements` instead of hardcoded `"forge"`/alternating BK–LM defaults.
29
+ - Removed misleading "placeholder" and outdated "Phase 24 placeholder" comments from `recipes.ts`, `crafting/index.ts`, and `dialogue.ts`; documentation now accurately reflects current behaviour.
30
+
31
+ ### Docs
32
+
33
+ - **ROADMAP — Platformization & Adoption Roadmap (2026–2027):** Added a new top-level section following external review batch 4, which concluded that the simulation kernel is feature-complete and the next phase should focus on adoption, composability, and contract stability rather than new subsystems. Ten new roadmap items added (PA-1 through PA-10): documentation reconciliation & architecture map, modular package architecture (`@ananke/core`, `@ananke/combat`, etc.), stable schema/save/wire contract, scenario & content pack system, campaign ↔ tactical terrain bridge, unified atmosphere model, advanced non-visual sensory systems, host integration SDKs (Unity / Godot / Unreal / Web), simulation cookbook, and deterministic networking kit.
34
+ - Build: clean. Tests: 5,261 passing. Coverage: statements 97.1 %, branches 87.83 %, functions 95.65 %, lines 97.1 %.
35
+
36
+ ---
37
+
9
38
  ## [0.1.48] — 2026-03-28
10
39
 
11
40
  ### Fixed
package/README.md CHANGED
@@ -411,6 +411,7 @@ Ananke's outputs are validated against historical and experimental sources:
411
411
 
412
412
  | Document | What's in it |
413
413
  |---|---|
414
+ | [`docs/module-index.md`](docs/module-index.md) | All 41 entry points — stability tier, use case, key exports, doc links |
414
415
  | [`docs/host-contract.md`](docs/host-contract.md) | Stable integration surface — everything needed to embed Ananke without reading `src/` |
415
416
  | [`docs/integration-primer.md`](docs/integration-primer.md) | Data-flow diagrams, type glossary, gotchas |
416
417
  | [`docs/bridge-contract.md`](docs/bridge-contract.md) | 3D renderer bridge protocol (AnimationHints, GrapplePoseConstraint) |
@@ -199,7 +199,7 @@ export function integrateCraftingIntoInventory(inventory, result, instanceId) {
199
199
  instanceId,
200
200
  templateId: result.outputItemId,
201
201
  quantity: result.outputQuantity,
202
- durability_Q: result.quality_Q, // Use quality as durability placeholder
202
+ durability_Q: result.quality_Q, // New items start with durability matching their crafting quality
203
203
  modifications: [],
204
204
  containerPath: [],
205
205
  };
@@ -112,16 +112,20 @@ function updateQualityRange(currentRange) {
112
112
  * Create assembly steps for a complex recipe.
113
113
  */
114
114
  export function createAssemblySteps(recipe) {
115
- // Placeholder: generate steps based on recipe complexity
116
115
  const steps = [];
117
116
  const stepCount = Math.max(1, Math.round(recipe.complexity_Q / q(0.30)));
117
+ // Derive skills and tools from recipe requirements
118
+ const skillTypes = recipe.skillRequirements.length > 0
119
+ ? recipe.skillRequirements.map(sr => sr.skillType)
120
+ : ["bodilyKinesthetic", "logicalMathematical"];
121
+ const toolCategories = recipe.toolRequirements.map(tr => tr.toolCategory);
118
122
  for (let i = 0; i < stepCount; i++) {
119
123
  steps.push({
120
124
  stepId: `step_${i}`,
121
125
  description: `Step ${i + 1}`,
122
- requiredSkill: i % 2 === 0 ? "bodilyKinesthetic" : "logicalMathematical",
126
+ requiredSkill: skillTypes[i % skillTypes.length],
123
127
  timeFraction: Math.round(SCALE.Q / stepCount),
124
- toolRequirements: i === 0 ? ["forge"] : [],
128
+ toolRequirements: i === 0 && toolCategories.length > 0 ? [toolCategories[0]] : [],
125
129
  });
126
130
  }
127
131
  return steps;
@@ -196,7 +196,7 @@ export function resolveRecipe(recipe, entity, inventory, availableToolQualities,
196
196
  const timeTaken_s = Math.round(time_s * q(0.50) / (skillBonus > 0 ? skillBonus : q(0.50)));
197
197
  // Determine descriptor
198
198
  const descriptor = qualityToDescriptor(quality_Q);
199
- // Consume ingredients (placeholder)
199
+ // Build consumed ingredients list (actual inventory mutation is handled by the caller)
200
200
  const consumedIngredients = recipe.ingredients.map(ing => ({
201
201
  itemId: ing.itemId,
202
202
  quantity: ing.quantity,
@@ -49,7 +49,8 @@ export type DialogueOutcome = {
49
49
  /**
50
50
  * Context for a dialogue resolution.
51
51
  *
52
- * `sharedFaction` — Phase 24 placeholder; set to true when entities share a faction.
52
+ * `sharedFaction` — when true, applies a `PERSUADE_FACTION_BONUS` to persuasion rolls;
53
+ * set by the host when entities belong to the same faction.
53
54
  * `priorFailedAttempts` — cumulative failed persuasion attempts by this initiator against
54
55
  * this target; each one imposes a PERSUADE_FAILURE_PENALTY.
55
56
  */
@@ -20,6 +20,26 @@ The spike consisted of three concrete experiments:
20
20
 
21
21
  Each experiment is documented below, followed by a glossary of critical types and a list of integration gotchas.
22
22
 
23
+ ## Choose your entry point
24
+
25
+ Use the table below to find the right subpath export for your use case.
26
+ The full module index with all 41 exports is in [`docs/module-index.md`](module-index.md).
27
+
28
+ | I want to… | Start with | Then add |
29
+ |---|---|---|
30
+ | **Simulate a duel or battle** | `"@its-not-rocket-science/ananke"` (main) | `"…/combat"` for grapple, ranged, formation |
31
+ | **Run a campaign / world simulation** | `"…"` + `"…/polity"` | `"…/campaign"` + whichever campaign extensions you need |
32
+ | **Design a species or xenobiology** | `"…"` + `"…/species"` + `"…/anatomy"` | `"…/character"` for aging, sleep, disease |
33
+ | **Drive a 3D renderer** | `"…"` (bridge exports are in main bundle) | See [`docs/bridge-contract.md`](bridge-contract.md) |
34
+ | **Build a multiplayer host** | `"…"` (deterministic by design) | See [`docs/host-contract.md`](host-contract.md) for lockstep pattern |
35
+ | **Add narrative / storytelling** | `"…/narrative"` + `"…/narrative-prose"` | `"…/renown"` for legend-building |
36
+ | **Craft / economic simulation** | `"…/crafting"` + `"…/catalog"` | `"…/social"` for trade and faction effects |
37
+ | **Grand strategy / 4X** | `"…/polity"` + `"…/campaign"` | Any combination of the 26 campaign extension modules |
38
+
39
+ **Stability:** `"."` and `"./polity"` are **Tier 1 (Stable)** — no breaking changes without a major version bump.
40
+ All other subpaths are **Tier 2 (Experimental)** — changelog documents any breaking changes.
41
+ See [`STABLE_API.md`](../STABLE_API.md) for the full tier table.
42
+
23
43
  ---
24
44
 
25
45
  ## 1. Architecture Overview
@@ -1161,9 +1161,11 @@ Map each `segmentId` to a skeleton bone and drive blend-shape or constraint weig
1161
1161
  **Integration note:** These functions provide data snapshots only. Mapping Ananke's abstract
1162
1162
  segment IDs to a specific engine's skeleton, handling tick-rate mismatch (20 Hz → 60+ Hz), and
1163
1163
  wiring animation hints into a state machine are the host's responsibility. See
1164
- `docs/bridge-api.md` for the full API reference and `docs/ecosystem.md` for Unity/Godot adapter
1165
- sketches. A minimal runnable reference plugin (ROADMAP item 6) is the next priority for
1166
- lowering this integration barrier.
1164
+ [`docs/bridge-contract.md`](bridge-contract.md) for the field-by-field contract and
1165
+ [`docs/integration-primer.md`](integration-primer.md) for worked integration code. The
1166
+ [`ananke-godot-reference`](https://github.com/its-not-rocket-science/ananke-godot-reference)
1167
+ and [`ananke-unity-reference`](https://github.com/its-not-rocket-science/ananke-unity-reference)
1168
+ companion repos provide complete runnable reference plugins for Godot 4 and Unity 6.
1167
1169
 
1168
1170
  ---
1169
1171
 
@@ -2144,25 +2146,14 @@ suggested first milestone.
2144
2146
  | `ananke-historical-battles` | Historical battle validation suite comparing outcomes against primary sources |
2145
2147
  | `ananke-archive` | Searchable public database of simulation runs, parameter spaces, and raw trace data |
2146
2148
 
2147
- ### Companion ecosystem infrastructure (ROADMAP CE-1 to CE-4)
2149
+ ### Companion ecosystem infrastructure all complete
2148
2150
 
2149
- The following Ananke-side changes are the highest-leverage items for enabling companion projects:
2151
+ ROADMAP items CE-1 through CE-4 are complete:
2150
2152
 
2151
- **CE-1 — npm publish + subpath exports map.** Remove `"private": true` from `package.json`,
2152
- add a `"exports"` map so consumers can import `ananke/units`, `ananke/sim/kernel`, etc.
2153
- without bundling the whole library. See ROADMAP for proposed exports JSON.
2154
-
2155
- **CE-2 — `createWorld()` convenience factory.** A single call that builds a `World` with
2156
- sensible defaults (5 humans, no terrain, tactical tuning). Eliminates 20 lines of setup
2157
- boilerplate for companion projects that need a quick simulation harness.
2158
-
2159
- **CE-3 — JSON scenario schema + `loadScenario()`.** Lets companion projects (especially
2160
- `ananke-historical-battles` and `ananke-fantasy-species`) ship scenario definitions as JSON
2161
- files rather than TypeScript, reducing the barrier to non-developer contribution.
2162
-
2163
- **CE-4 — `src/index.ts` stable-API barrel.** A single import surface (`import { ... } from "ananke"`)
2164
- covering everything in `STABLE_API.md`. Companion projects should depend on this barrel, not
2165
- on internal module paths that may change.
2153
+ - **CE-1**Package published as `@its-not-rocket-science/ananke` with 41 named subpath exports.
2154
+ - **CE-2** `createWorld()` convenience factory ships in `src/sim/world.ts`.
2155
+ - **CE-3** JSON scenario schema and `loadScenario()` in `src/sim/world.ts`.
2156
+ - **CE-4** — `src/index.ts` stable-API barrel covers everything in `STABLE_API.md`.
2166
2157
 
2167
2158
  ---
2168
2159
 
@@ -2203,25 +2194,23 @@ Agincourt, Roman testudo vs. Gaul charge, small-unit skirmish attrition, epidemi
2203
2194
  each run across 100 seeds. The distribution of outcomes is compared against historical
2204
2195
  casualty data. Run with `npm run run:emergent-validation`.
2205
2196
 
2206
- Results from both suites are committed to `docs/` and linked from releases. See ROADMAP
2207
- item PH-8 for the plan to make these first-class trust artifacts.
2197
+ Results from both suites are committed to `docs/` and linked from releases. See [`docs/emergent-validation-report.md`](emergent-validation-report.md) for the committed result summaries.
2208
2198
 
2209
2199
  ---
2210
2200
 
2211
- ## Next stepsPlatform Hardening
2201
+ ## Platform Hardeningall complete
2212
2202
 
2213
- The simulation is architecturally complete. The highest-leverage remaining work is making
2214
- the existing depth trustworthy and legible to adopters:
2203
+ ROADMAP items PH-1 through PH-8 are complete as of 2026-03-19:
2215
2204
 
2216
2205
  | Item | What | Status |
2217
2206
  |------|------|--------|
2218
- | PH-1 | API tiering — Stable / Advanced / Internal tiers in exports and docs | Planned |
2219
- | PH-2 | Versioning policy unification — one unambiguous adopter contract | Planned |
2220
- | PH-3 | Minimal host integration contract document | Planned |
2221
- | PH-4 | Save / replay / bridge contract tests — golden compatibility fixtures | Planned |
2222
- | PH-5 | Bridge as first-class supported surface — `docs/bridge-contract.md` | Planned |
2223
- | PH-6 | Entity / WorldState core vs. extensions split — JSDoc annotations | Planned |
2224
- | PH-7 | Benchmark operational guide — tick-rate and entity-cap recommendations | Planned |
2225
- | PH-8 | Emergent validation as flagship trust artifact — versioned, CI-enforced | Planned |
2226
-
2227
- See ROADMAP `## Platform Hardening` for full scope of each item.
2207
+ | PH-1 | API tiering — Stable / Advanced / Internal tiers in exports and docs | **Complete** |
2208
+ | PH-2 | Versioning policy unification — one unambiguous adopter contract | **Complete** |
2209
+ | PH-3 | Minimal host integration contract document | **Complete** |
2210
+ | PH-4 | Save / replay / bridge contract tests — golden compatibility fixtures | **Complete** |
2211
+ | PH-5 | Bridge as first-class supported surface — `docs/bridge-contract.md` | **Complete** |
2212
+ | PH-6 | Entity / WorldState core vs. extensions split — JSDoc annotations | **Complete** |
2213
+ | PH-7 | Benchmark operational guide — tick-rate and entity-cap recommendations | **Complete** |
2214
+ | PH-8 | Emergent validation as flagship trust artifact — versioned, CI-enforced | **Complete** |
2215
+
2216
+ See `ROADMAP.md` `## Platform Hardening` for the full scope of each item.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@its-not-rocket-science/ananke",
3
- "version": "0.1.48",
3
+ "version": "0.1.50",
4
4
  "type": "module",
5
5
  "description": "Deterministic lockstep-friendly SI-units RPG/physics core (fixed-point TS)",
6
6
  "license": "MIT",
@@ -226,6 +226,7 @@
226
226
  "example:combat": "node dist/examples/quickstart-combat.js",
227
227
  "example:campaign": "node dist/examples/quickstart-campaign.js",
228
228
  "example:species": "node dist/examples/quickstart-species.js",
229
+ "generate-module-index": "node dist/tools/generate-module-index.js",
229
230
  "generate-fixtures": "node dist/tools/generate-fixtures.js",
230
231
  "generate-zoo": "node dist/tools/generate-zoo.js",
231
232
  "generate-playground": "node dist/tools/generate-playground.js",