<feed xmlns='http://www.w3.org/2005/Atom'>
<title>living-village.git/src/LivingVillage.Desktop/WorldBootstrap.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-29T00:09:12+00:00</updated>
<entry>
<title>p66: 每日任务目标具体化 TargetNpc/TargetTile 定点</title>
<updated>2026-09-29T00:09:12+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-29T00:09:12+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=247d0bc083dffc648f043176eabf9bd4036f19e7'/>
<id>urn:sha1:247d0bc083dffc648f043176eabf9bd4036f19e7</id>
<content type='text'>
- Kernel Occupation：TaskTargets + targetNpcOf/targetTileOf + dailyTaskOfWith/
  refreshTodayWith/refreshStateWith（splitmix 同源定点，候选排序消除顺序依赖，禁随机）
- 仅既有 satisfiesCompletion 会读目标的模板定点：帮工→TargetNpc、翻土→TargetTile；
  其余 8 模板目标保持 None（不改完成语义）
- Desktop WorldBootstrap：reachableTargets（世界 NPC + 样板菜地瓦片）+
  occupationStateForWorld/refreshOccupationTodayWorld；Game 开局/跨日/证据路径切换
- 历史入口 dailyTaskOf/refreshState/occupationStateFor 保留为空候选通配包装（逐字节不变）
- 红先 P66TaskTargetTests（8 例）：同 seed 幂等、跨 seed 落在可达集合、候选顺序无关、
  历史通配回归、帮工/翻土定点门控完成、跨日重定点、v3 round-trip + v2 基线
- scripts/p66-target-report.fsx + docs/evidence/p66-analysis.txt（PASS）
- Desktop 328/328，Kernel 119/119；digest 953775FA…7F6C ×3 PASS；Sim.fs 未动
</content>
</entry>
<entry>
<title>p55: 当日任务经济闭环——设计口径物品报酬入账(夜捕鱼×2/送粮食物×1, 其余不发) + 连续完成天数(streak 跨日保留/漏完成清零) + v3 streak 尾段与 save(None) 兼容 + LV_P55_SHOT 证据</title>
<updated>2026-09-28T16:24:08+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-28T16:24:08+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=a59a4bbe1ab45adb29d1367995230d3f09847d9b'/>
<id>urn:sha1:a59a4bbe1ab45adb29d1367995230d3f09847d9b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>p51: 职业系统实现首切片——开局钱/体力/背包侧车 + 当日任务/跨日刷新 + StartNewGameWith 读回(design §2.4-1)</title>
<updated>2026-09-28T14:38:52+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-28T14:38:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=aa3baa953ea5c4f99f5f23cb3eef9400338b61ec'/>
<id>urn:sha1:aa3baa953ea5c4f99f5f23cb3eef9400338b61ec</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(mapgen): 生成器序列化 + 世界站位接入（P20 第三步 A）</title>
<updated>2026-09-21T18:57:12+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T18:57:12+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=d06656aa968ccb2769ba7c90c97f57f2818bb828'/>
<id>urn:sha1:d06656aa968ccb2769ba7c90c97f57f2818bb828</id>
<content type='text'>
- MapGen.serialize：生成结果的确定性序列化（尺寸/seed/瓦片/Rivers/Bridges/
  Paths/Buildings），同 seed 逐字节一致，供回归与跨机核对。
- WorldBootstrap.initialWorldWithPlacement：显式站位建世界；旧 64x48 路径
  （initialWorld/initialWorldWithOccupation）字节口径不变。
- WorldBootstrap.initialWorldInMap：用生成器核心可达区做站位，30 spawn 全落
  可达核心；新增 serialization/placement 两条测试。
- fsproj：MapGen 先于 WorldBootstrap 编译。
- Desktop 119-&gt;121，Kernel 90 不变。
</content>
</entry>
<entry>
<title>feat(desktop): P15 开局职业选择页——新档四选一+暂不选择，接入 v3 存档与当日任务</title>
<updated>2026-09-21T14:57:50+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T14:57:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=60bbc83d9a1d047933e4128e7b48e1c61c925a14'/>
<id>urn:sha1:60bbc83d9a1d047933e4128e7b48e1c61c925a14</id>
<content type='text'>
- MenuState：新增 OccupationSelect 页与 StartNewGameWith 命令；occupationOptions=农夫/渔夫/货郎/书生/暂不选择，
  默认高亮「暂不选择」= 不写职业的旧行为；四选一确认后发 StartNewGameWith，ESC 返回主菜单（既有 MainMenu
  行为与测试不变）。
- WorldBootstrap.occupationStateFor/refreshOccupationToday：按 seed+职业种子生成/跨日刷新当日 Offered 任务。
- Game：主菜单「开始新游戏」→ 职业选择页；选定后 initialWorldWithOccupation 注入 Money/Energy 与 Today，
  m5View.Task 随之写入 v3 存档；游玩中按日刷新；autoplay/flow 默认走「暂不选择」保持旧演示行为；DrawMenu 渲染职业页。
- 测试 Desktop 93（新增 6）：职业页选项顺序/默认 None/标签、确认命令与返回、bootstrap 四职业 Money/Energy+当日池内
  Offered 任务、四职业 v3 round-trip（职业+任务逐字段）、T 面板显示所选职业的模板名与「待接受」、跨日刷新保持同日。
</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(desktop): 增加可选昼光自动演示启动</title>
<updated>2026-09-21T00:37:29+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T00:37:29+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=c932969539b00a42937f0aa5ed1e10b4e94932a3'/>
<id>urn:sha1:c932969539b00a42937f0aa5ed1e10b4e94932a3</id>
<content type='text'>
[变更性质]
- 本提交新增可选的 Desktop 启动行为，不改变默认启动行为。

[新增功能]
- 设置 LV_AUTOPLAY_DAYLIGHT=1 时，初始世界和 StartNewGame 从黎明 tick 开始。
- 未设置该变量时继续从 tick 0 的夜晚状态开始。

[实现方案]
- 在 WorldBootstrap 中集中计算昼光起始 tick 和同步时间。
- 在 Game 中复用同一世界工厂，并增加黎明与默认状态回归测试。

[影响范围]
- 仅影响 Desktop 运行时代码和测试；Kernel 保持不变。
- 环境变量为显式 opt-in，不影响现有自动演示和普通启动路径。
</content>
</entry>
<entry>
<title>feat(desktop): 固化样例世界与昼光呈现</title>
<updated>2026-09-21T00:16:10+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T00:16:10+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=f64045ca6245ed853f4d8ac1bcce6f4fe13068ce'/>
<id>urn:sha1:f64045ca6245ed853f4d8ac1bcce6f4fe13068ce</id>
<content type='text'>
[变更性质]
- this commit adds a deterministic desktop bootstrap for the playable sample world.

[新增功能]
- this commit places the avatar away from the home doorway and separates villagers from scene footprints.
- this commit provides a warm high-contrast daylight tint and exits autoplay after SampleComplete.

[实现方案]
- this commit isolates desktop spawn policy in WorldBootstrap and routes game startup and sample tests through it.
- this commit adds regression coverage for spawn positions, spacing, determinism, and daylight tint.

[影响范围]
- this commit affects the Desktop application and Desktop tests only.
- this commit preserves Kernel behavior and does not include unrelated worktree changes.
</content>
</entry>
</feed>
