<feed xmlns='http://www.w3.org/2005/Atom'>
<title>living-village.git/src/LivingVillage.Kernel/LivingVillage.Kernel.fsproj, branch p20-map-gen-foundation</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>http://git.somhairle.bid/living-village.git/atom?h=p20-map-gen-foundation</id>
<link rel='self' href='http://git.somhairle.bid/living-village.git/atom?h=p20-map-gen-foundation'/>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/'/>
<updated>2026-09-21T09:18:11+00:00</updated>
<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(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>
<entry>
<title>feat: M1 模拟器内核 — SplitMix64 RNG + 确定性 step + 对拍测试 + headless 冒烟工具 + Desktop 自动演示</title>
<updated>2026-09-18T16:18:43+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-18T16:18:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=59458d149d7cecf73e708faa6d9e6db2bcd89dfd'/>
<id>urn:sha1:59458d149d7cecf73e708faa6d9e6db2bcd89dfd</id>
<content type='text'>
[变更性质]
本 commit 为功能开发，交付设计文档 §2 模拟器内核（里程碑 M1），非缺陷修复或结构重构。

[新增功能]
- Kernel：Rng.fs 提供 SplitMix64 纯函数 RNG（ofSeed / nextUInt64 / nextFloat32），World 携带种子状态。
- Kernel：Sim.fs 重写为 struct record（Vec2/Avatar/Input/TimeStep/World），step : World → TimeStep → World 纯函数，dt 固定 1/60 由内核常量给定，Time = Tick * dt 不做浮点累加；initialWorld 由无参改为带 seed。
- Tests：MSTest 确定性对拍——同 seed 轨迹逐 tick 相等、异 seed 发散、step 纯度、长跑有限/有界/时间-刻度关系、SplitMix64 已知向量、nextFloat32 值域。
- Headless：--days N --seed S 冒烟工具，每 1000 tick 输出摘要行，统计 NaN/越界计数并决定退出码。
- Desktop：LV_AUTOPLAY=1 环境变量启用正弦驱动自动演示，窗口标题与启动日志标注模式。

[实现方案]
- 全部状态用 [&lt;Struct&gt;] record，模拟路径零堆分配，支撑 51.84 亿刻长跑。
- step 不消费 World 内 RNG，种子经由外部确定性驱动脚本生效（每 900 刻换段，8 方向查表 + 三档幅值，避开三角函数保证跨平台位精确）。
- Headless 内存口径取 GC.GetTotalMemory(true)（全收集后的稳态驻留），避免 GetTotalMemory(false) 随 Gen0 段扩张漂移误报泄漏。

[影响范围]
- Kernel 保持零 MonoGame 引用，模拟与渲染彻底分离；sln 新增 Headless 与 Tests 两个项目。
- Release 构建 0 警告 0 错误，7/7 测试通过；1000 天长跑 5,184,000,000 刻退出码 0，无 NaN 无越界，内存 87,824 → 93,000 字节（1.06x &lt; 2x）。
- 同 seed 两次运行 stdout 字节一致，seed 42/43 轨迹不同。
</content>
</entry>
<entry>
<title>feat: M0 骨架 — F# 解决方案 + MonoGame DesktopGL 游戏循环 + 32x32 瓦片地图 + 化身 WASD + 镜头跟随 + FPS 计数</title>
<updated>2026-09-18T14:48:42+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-18T14:48:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=b237a11908442a227361fae24dbdd0dbb287fac9'/>
<id>urn:sha1:b237a11908442a227361fae24dbdd0dbb287fac9</id>
<content type='text'>
</content>
</entry>
</feed>
