@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 +29 -0
- package/README.md +1 -0
- package/dist/src/crafting/index.js +1 -1
- package/dist/src/crafting/manufacturing.js +7 -3
- package/dist/src/crafting/recipes.js +1 -1
- package/dist/src/dialogue.d.ts +2 -1
- package/docs/integration-primer.md +20 -0
- package/docs/project-overview.md +24 -35
- package/package.json +2 -1
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, //
|
|
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 %
|
|
126
|
+
requiredSkill: skillTypes[i % skillTypes.length],
|
|
123
127
|
timeFraction: Math.round(SCALE.Q / stepCount),
|
|
124
|
-
toolRequirements: i === 0 ? [
|
|
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
|
-
//
|
|
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,
|
package/dist/src/dialogue.d.ts
CHANGED
|
@@ -49,7 +49,8 @@ export type DialogueOutcome = {
|
|
|
49
49
|
/**
|
|
50
50
|
* Context for a dialogue resolution.
|
|
51
51
|
*
|
|
52
|
-
* `sharedFaction` —
|
|
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
|
package/docs/project-overview.md
CHANGED
|
@@ -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-
|
|
1165
|
-
|
|
1166
|
-
|
|
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
|
|
2149
|
+
### Companion ecosystem infrastructure — all complete
|
|
2148
2150
|
|
|
2149
|
-
|
|
2151
|
+
ROADMAP items CE-1 through CE-4 are complete:
|
|
2150
2152
|
|
|
2151
|
-
**CE-1 —
|
|
2152
|
-
|
|
2153
|
-
|
|
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
|
|
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
|
-
##
|
|
2201
|
+
## Platform Hardening — all complete
|
|
2212
2202
|
|
|
2213
|
-
|
|
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 |
|
|
2219
|
-
| PH-2 | Versioning policy unification — one unambiguous adopter contract |
|
|
2220
|
-
| PH-3 | Minimal host integration contract document |
|
|
2221
|
-
| PH-4 | Save / replay / bridge contract tests — golden compatibility fixtures |
|
|
2222
|
-
| PH-5 | Bridge as first-class supported surface — `docs/bridge-contract.md` |
|
|
2223
|
-
| PH-6 | Entity / WorldState core vs. extensions split — JSDoc annotations |
|
|
2224
|
-
| PH-7 | Benchmark operational guide — tick-rate and entity-cap recommendations |
|
|
2225
|
-
| PH-8 | Emergent validation as flagship trust artifact — versioned, CI-enforced |
|
|
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.
|
|
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",
|