<feed xmlns='http://www.w3.org/2005/Atom'>
<title>living-village.git/src/LivingVillage.Kernel.Tests/LivingVillage.Kernel.Tests.fsproj, 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-29T01:42:17+00:00</updated>
<entry>
<title>p70: 启动帧率与渲染基准（真实可复跑数据）</title>
<updated>2026-09-29T01:42:17+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-29T01:42:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=f01aa1a9a8d19db5ab908ddbb30b0467be8aa092'/>
<id>urn:sha1:f01aa1a9a8d19db5ab908ddbb30b0467be8aa092</id>
<content type='text'>
- scripts/bench-p70.sh：两档基准——Kernel --performance-baseline（6000 tick ×3）
  + Desktop xvfb 60s 真实帧循环；scripts/analyze-p70.py 汇总裁决
- Game.fs：LV_FRAME_LOG=1 逐帧日志（墙钟帧间隔 + GC 线程分配增量 + tick/panel），
  仅新增日志，不改渲染/更新逻辑
- P70PerformanceBaselineTests：Pin --performance-baseline final_digest=953775FA…（防漂移）
- 实测：Kernel tps mean=466679 alloc=3032184 gen0/1/2=0/0/0 determinism=PASS；
  Desktop 60s frames=8788 fps=139.3 mean=7.179ms max=33.919ms 掉帧&gt;33.3ms=2
  每帧分配 mean=231KB p95=297KB；dotnet-counters 缺席已如实标注
- Desktop 338/338、Kernel 120/120；Kernel/Sim/渲染口径/字形表未动
</content>
</entry>
<entry>
<title>feat(kernel): P31 step2 story stage state machine</title>
<updated>2026-09-22T08:24:19+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-22T08:24:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=0539bba17c260f6a4b51d3cefddac0ff448c19bc'/>
<id>urn:sha1:0539bba17c260f6a4b51d3cefddac0ff448c19bc</id>
<content type='text'>
- Occupation.Story: three-segment arc per occupation (accept task -&gt; visit
  households -&gt; conclude), driven one stage per player dialogue with day
  gates derived from the same splitmix pattern as the daily task pool
  (start day = hash(seed ^ storySeed, day 0) mod 3 + 2, range [2,4]).
- relationMeanToPlayer: decayed valence mean over acquainted NPCs only
  (same decay formula as Sim.relationMatrix); no acquaintances = 0.
- Three endings (warm/plain/distant) chosen by deterministic thresholds
  (&gt;=0.3 / &gt;=0.0 / &lt;0); ending text is fixed at the concluding dialogue.
- onDialogue returns (state, summary text option) for the caller to write
  into the yearbook; StoryStage itself is unchanged (0..3) and already
  roundtrips through the existing v3 occupation segment.
- 14 new kernel tests (101 -&gt; 115); performance digest unchanged.
</content>
</entry>
<entry>
<title>feat(kernel): P31 step1 occupation dialogue response bias</title>
<updated>2026-09-22T08:16:40+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-22T08:16:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=6c2f180cc7c8315e32d88cbe5d44928d495fe473'/>
<id>urn:sha1:6c2f180cc7c8315e32d88cbe5d44928d495fe473</id>
<content type='text'>
- Occupation.biasResponse: deterministic pure remap over Sim.responseFor;
  no occupation = byte-identical pass-through (all intents x personalities).
  farmer AskHelp Refused-&gt;Helpful; fisher SmallTalk Reserved-&gt;Friendly;
  peddler SmallTalk Reserved-&gt;Bargaining; scholar Joke fully overridden to
  Reserved (documented total-override semantics, opposite of personality).
- Sim.responseFor made public (same pure function, reused as the base path).
- Sim.chooseDialogueWith: extracted body of chooseDialogue with an injectable
  respond function; chooseDialogue keeps identity semantics unchanged.
- Sim.appendAnnal made public for the upcoming story annal writes.
- 9 new kernel tests (92 -&gt; 101); performance digest unchanged.
</content>
</entry>
<entry>
<title>feat(occupation): P12 报价偏置纯函数——货郎买卖±3.00%/书生解读±1.00%，4位定点基点，默认无职业=旧行为（TDD 6例）</title>
<updated>2026-09-21T11:30:33+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T11:30:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=c348da258f072bc88ea422cbc534c0831817b3c8'/>
<id>urn:sha1:c348da258f072bc88ea422cbc534c0831817b3c8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(occupation): P11 每日任务生成纯函数 + TaskState 状态机（Kernel 侧）</title>
<updated>2026-09-21T10:40:17+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T10:40:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=f8830705272cfa2c877cd0b984f61d1fa7a77ec2'/>
<id>urn:sha1:f8830705272cfa2c877cd0b984f61d1fa7a77ec2</id>
<content type='text'>
Occupation.fs 增补：TaskState(Offered|Active|Done|Failed)、TaskTemplateId 首期池=农夫3(送粮/帮工/翻土)+渔夫3(夜捕/卖渔/询价)、DailyTask 记录（设计 §2/§3）。生成 = taskHash(seed ^ occupationSeed, dayIndex) mod |pool|，与 Rng.fs splitmix 同源（禁 System.Random），输出只依赖三元组；taskHash 以 5 个 splitmix 已知向量钉死。完成判定 = satisfiesCompletion 纯谓词，信号 TaskSignal(Dialogued/Traded/ArrivedAt/NightAtWater) 全部来自既有事件通道（DialogueEvent/TradeEvent/到达瓦片/夜+水边），TargetNpc/TargetTile None=通配；acceptTask/applySignal/expireAt 状态机纯函数，Sim.step 数值路径零改动。货郎/书生空池 → dailyTaskOf = None。13 例测试：splitmix 向量、池约束、逐日确定性、窗口=整日、中文名、状态机转移、六模板正负完成信号、终态不可复活、逾期判负。
</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>perf: add simulation baseline probe</title>
<updated>2026-09-20T11:32:52+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-20T11:32:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=6f904d6f8528bd13941894af3db16d0bc3b0aeb3'/>
<id>urn:sha1:6f904d6f8528bd13941894af3db16d0bc3b0aeb3</id>
<content type='text'>
</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(m5): 增加可交互对话、需求观察与编年史</title>
<updated>2026-09-20T06:20:54+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-20T06:20:54+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=7e197babfbb68d7f7d1866d6a0ca47cf17d3af23'/>
<id>urn:sha1:7e197babfbb68d7f7d1866d6a0ca47cf17d3af23</id>
<content type='text'>
[变更性质]
- 本提交新增 M5 用户能力，不是缺陷修复。

[新增功能]
- 增加玩家六意图对话、需求面板、可见 NPC 观察、编年史与因果谣言冒烟验收。

[实现方案]
- 在 Kernel 中扩展 Avatar Mind、对话结果、观察数据、Annals 和确定性谣言链。
- 在 Desktop 中加入键盘交互、像素文本面板和运行时状态展示，并补充 Headless 与测试覆盖。

[影响范围]
- 覆盖 Kernel、Headless、Desktop 及测试工程；保留既有 M3/M4 确定性与交易、关系、谣言行为。
</content>
</entry>
<entry>
<title>feat(m4b): 增加可追踪谣言传播与回放</title>
<updated>2026-09-20T04:18:38+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-20T04:18:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=4f8aca922e6cf47dce95aab79541065d487d5272'/>
<id>urn:sha1:4f8aca922e6cf47dce95aab79541065d487d5272</id>
<content type='text'>
[变更性质]
- 本提交新增 M4b 谣言传播与确定性验收能力，不是单纯缺陷修复。

[新增功能]
- 支持带来源、父节点、深度、强度和路径的谣言传播、去重、衰减与过期处理。
- Headless 支持稳定谣言 dump、replay，以及与 batch 模式的互斥校验。

[实现方案]
- 通过不可变 World 更新和失败原子返回保持模拟确定性。
- 新增多跳传播、重复转述、过期父节点、非法参与者和稳定 trace 测试。

[影响范围]
- 影响 Kernel、Headless 和 Kernel 测试；不包含 M5/M6 或无关配置与文档改动。
</content>
</entry>
</feed>
