<feed xmlns='http://www.w3.org/2005/Atom'>
<title>living-village.git/src/LivingVillage.Kernel.Tests/M6aTests.fs, branch main</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>http://git.somhairle.bid/living-village.git/atom?h=main</id>
<link rel='self' href='http://git.somhairle.bid/living-village.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/'/>
<updated>2026-09-21T20:37:51+00:00</updated>
<entry>
<title>test(kernel): 512x384 参数化边界存档 round-trip 与 NPC 边界回归（P23）</title>
<updated>2026-09-21T20:37:51+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T20:37:51+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=8654557d9ba1c98208b67f5909f7dd7917e10d50'/>
<id>urn:sha1:8654557d9ba1c98208b67f5909f7dd7917e10d50</id>
<content type='text'>
- Sim.configureBounds 512 384 下 v2 存档 round-trip 且同 world 两次保存逐字节一致，
  读回再保存仍与原文一致；v1 的 64x48 兼容由既有用例覆盖。
- DriverHarness 长跑 20000 tick 断言 avatar 与全部 NPC 有限且留在 [0,max] 内。
- Kernel 测试 90 -&gt; 92。
</content>
</entry>
<entry>
<title>feat(mapgen): 参数化确定性生成器与视口裁剪（P20 第一步）</title>
<updated>2026-09-21T18:28:31+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T18:28:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=ef78374c316587fb585b72e6d427cd6e61203655'/>
<id>urn:sha1:ef78374c316587fb585b72e6d427cd6e61203655</id>
<content type='text'>
- 新增纯函数 MapGen：尺寸参数化（默认 64x48，可 256x192），splitmix64
  随机游走河道 + 2-3 octave value noise + 泊松式布点；核心区整平后以 BFS
  校验 5x6=30 个 spawn 全部可达，不可达确定性修整并复验。
- visibleTileRange/visibleTileCount 纯函数，drawWorld 改为调用之（行为不变）；
  drawMapFitted/drawMapViewport 仅证据用。
- 存档沿用 v2/v3 边界字段，补参数化边界 round-trip 测试，未改 Sim 语义。
- 回归：Desktop 109-&gt;115、Kernel 89-&gt;90；final_digest 与基线一致。
</content>
</entry>
<entry>
<title>test(kernel): 用 List.item 替换弃用的 List.nth，全解决方案 Release 构建归零告警</title>
<updated>2026-09-21T13:56:24+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T13:56:24+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=7bbac51832ca36ce100e5c3f373419efc90858e4'/>
<id>urn:sha1:7bbac51832ca36ce100e5c3f373419efc90858e4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(occupation): 职业系统第一片 — Kernel 结构 / bootstrap 注入 / 存档 v3</title>
<updated>2026-09-21T09:18:11+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T09:18:11+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=cf214889490a62ba4fe84fb0055bc2133776e8a2'/>
<id>urn:sha1:cf214889490a62ba4fe84fb0055bc2133776e8a2</id>
<content type='text'>
Occupation.fs（Kind/Profile/State + 农夫/渔夫/货郎/书生 中文名常量，按设计 §1 表给初始 Money/Energy/Inventory）；ItemKind 扩出 Fish/Spice/Scroll（basePrice 分支补齐，Food 10.0f 数值路径不变 → 无职业 digest 不动）；WorldBootstrap.initialWorldWithOccupation 默认 None = 旧行为（Money/Energy 覆盖，库存字段先留数据侧、物理挂接留交易单——取舍见 design §2-C 反对加字段）；WorldSave: v3 头仅在有职业时写入（保存 saveToFileWith / loadFromFileWith，v1/v2/v3 无职业类型默认，token 顺序 version|w|h|kind|task|story|…），默认路径 save 输出逐字节等同现行 v2；P10 测试 5 例（§1 表值、v3 round-trip、v1/v2 不吞档、双 seed 逐字节、中文名）；Kernel.Tests 引用 Desktop 以驱动 WorldBootstrap（取舍：不做测试专用 shim）。TaskToken/StoryStage 为 v3 占位（任务系统后续单实现）。
</content>
</entry>
<entry>
<title>feat(kernel): 地图边界参数化与存档 v2</title>
<updated>2026-09-21T06:55:37+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T06:55:37+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=ab19df0ebad8da972cd30f89f7cfd8ef38b8c0ae'/>
<id>urn:sha1:ab19df0ebad8da972cd30f89f7cfd8ef38b8c0ae</id>
<content type='text'>
Sim 地图边界由常量 52 改为可配置（configureBounds，默认 64x48 = 与全部基线一致）；Sim.step 裁剪、initialWorld 中心出生时点按当前边界读取；WorldSave 升级 V2 头携带 width/height 两字段，V1 旧存档照常读入并自动回退到 64x48；回归：512x384 边界裁剪/初界转正/双份存档往返/案例 v1 档兼容读。修复前一段中报错已修正的测试代码（Ensure saved-file timeouts）。
</content>
</entry>
<entry>
<title>feat(m6a): add file save acceptance smoke</title>
<updated>2026-09-20T12:58:23+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-20T12:58:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=5cb4970e2410a43e528b4b3e44dda15fac0a219a'/>
<id>urn:sha1:5cb4970e2410a43e528b4b3e44dda15fac0a219a</id>
<content type='text'>
[Change Nature]
This commit adds the bounded M6a file-save acceptance path.

[New Capability]
- Add file-level round-trip and deterministic continuation coverage.
- Add Headless --m6a-smoke with digest checks and explicit PASS/FAIL output.

[Implementation]
- Reject non-finite numeric values and negative inventory quantities.
- Exercise dialogue, chat/rumor, trade, events, annals, time, and RNG state.

[Impact]
- Affects Kernel save parsing, Kernel tests, and Headless smoke tooling.
- Preserves the existing save format and M5 smoke behavior.
</content>
</entry>
<entry>
<title>feat(m6a): add save speed and day-night controls</title>
<updated>2026-09-20T07:14:23+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-20T07:14:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=9724663602b4b1eb755bf334c475dc2c80e4b386'/>
<id>urn:sha1:9724663602b4b1eb755bf334c475dc2c80e4b386</id>
<content type='text'>
</content>
</entry>
</feed>
