chore: snapshot pre-v0.2.0 WIP (pathfinder/reflex/metrics/skills improvements)

Baseline for the v0.2.0 self-learning iteration. All 205 tests pass on this
state. Subsequent commits in this branch layer the knowledge base,
post-mortem coach, and persona narration on top.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 13:05:12 +03:00
co-authored by Claude Opus 4.7
parent 3ee2ab886e
commit 86e5294bb8
30 changed files with 1023 additions and 130 deletions
+17
View File
@@ -154,6 +154,7 @@ test("all done → null", () => {
nextMilestone(snap(inv, {
food: 20,
locations: {
chest: { x: 1, y: 64, z: 0 },
base: { x: 0, y: 64, z: 0 },
shelter: { x: 0, y: 64, z: 0 },
},
@@ -189,3 +190,19 @@ test("listMilestones exposes ordered ids for diary/TUI", () => {
assert.equal(typeof m.title, "string");
}
});
test("food.basic with no carried food suggests acquire-food", () => {
const got = nextMilestone(snapAfter("stone.tools", {}, { food: 8 }));
assert.equal(got.milestone.id, "food.basic");
assert.equal(got.plan.skillId, "survive.acquire-food");
});
test("storage.chest crafts first, then places carried chest", () => {
const needCraft = nextMilestone(snapAfter("food.basic", { chest: 0 }));
assert.equal(needCraft.milestone.id, "storage.chest");
assert.equal(needCraft.plan.skillId, "craft.chest");
const needPlace = nextMilestone(snapAfter("food.basic", { chest: 1 }));
assert.equal(needPlace.milestone.id, "storage.chest");
assert.equal(needPlace.plan.skillId, "village.place-chest");
});