<feed xmlns='http://www.w3.org/2005/Atom'>
<title>living-village.git/src/LivingVillage.Headless/Program.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-28T20:23:26+00:00</updated>
<entry>
<title>p59: Sim 多世界并存后台压测（内存/GC 增长曲线证据单，只读）</title>
<updated>2026-09-28T20:23:26+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-28T20:23:26+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=f681867692f575b078f46afaf07060faed457461'/>
<id>urn:sha1:f681867692f575b078f46afaf07060faed457461</id>
<content type='text'>
目标：量化「多世界并存 × 天数」的内存/GC 增长，收口 P49 范围外项。
口径：新增 Headless `--profile-multiworld &lt;worlds&gt; &lt;days&gt; &lt;npcs&gt; &lt;sampleEveryDays&gt; &lt;seedBase&gt;`，
N 个 Sim 世界同时存活，每轮 Parallel.For 各推进 sampleEveryDays 天并采样一行
（worlds/events/rumors/annals/memory_entries/gc_live_mb/working_set_rss_mb/elapsed_s，
行尾 flush）；未改 Kernel/Sim 任何语义（Sim.initialWorldN / Sim.step 原样调用）。

标定：1 世界 × 2 天探针 = 34.2s（与 overnight-status 的 34.6s 一致），据此定 N=10 × 20 天。
运行：独立 systemd --user transient unit living-village-multiworld.service
（scripts/profile-multiworld.sh，StandardOutput=append: + exec 2&gt;&amp;1，state.json 记
pid/unit/log/commit/参数/起止/exit）。主运行 wall=1024.4s（17.1min &lt; 40min），exit=0。

结论（artifacts/perf-multiworld/20260928T195839Z/README.md）：
- 随世界数近似线性，未超线性：N=1 vs N=10（同日 D=20）annals/memory_entries 恰 10×、
  rumors 9.67×、gc_live 8.81×（每世界 1.23MB，共享运行时开销摊薄）。
- RSS 有界无泄漏：N=10 39→峰值123(day8)→稳定104~112MB；每 2 天一轮墙钟恒 101~105s。
  原因是历史集合有界（rumorRetentionDays=3 / rumorCapacity=16384 / maxAnnalEntries=128 /
  Mind.Memory 上限），约 day4 后进入稳态。
- 两轮世界0 digest 一致（2364CB74…）→ 并存+并行不改变单世界语义。
- 数字未越界 → 明确「不修」；只读本 slice 不修 Kernel/Sim。

回归：Desktop 304/304 + Kernel 119/119；--performance-baseline ×3 digest
953775FAEB2F… 不变，performance_determinism=PASS。未 push。
</content>
</entry>
<entry>
<title>m3r: 缩尺批验收口（50×15 流式 + systemd --user 单元 + 独立验收脚本）</title>
<updated>2026-09-28T19:45:58+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-28T19:45:58+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=2c559a79a5977c19876cee58d336b7983f67fa4c'/>
<id>urn:sha1:2c559a79a5977c19876cee58d336b7983f67fa4c</id>
<content type='text'>
缩尺口径：M3 phase2 50×100 实测 11.4h 仅完成 6/50（见
artifacts/m3-acceptance/final-candidate-20260921T095500Z/logs/*.diagnosis.txt），
改为 50 世界 × 15 模拟日、逐世界流式打印并 flush。标定据 docs/overnight-status.md
（Hermes 单 worker 亲测）：1×2=34.6s、1×5=87.7s、1×10=173.6s，外推 15 天 ≈260s。
注意：派单所引用 artifacts/m3-independent/20260921T105500Z 全盘查找不存在，
故改用上述仓内标定，未编造任何数据。

内容：
- Headless 边缘：runSimulation 拆出 runSimulationCore 增加逐模拟日回调；
  evalWorld 传入回调；runBatch 每 (days/5) 天打印 `[world k] progress day=d/D elapsed=..s`
  并 flush，长世界不再零进度（BatchOutput.progressLine 纯函数 + 单测）。
- 新增 deploy/living-village-m3r.service 模板：wrapper 作 MasterProcess、
  StandardOutput/StandardError=append: acceptance.log、Restart=no；
  systemd-analyze --user verify 通过。本机 ~/.config/systemd/user 属外部目录受限，
  实跑以等价属性的 systemd-run --user 瞬态单元 living-village-m3r.service 承载。
- scripts/m3r-master.sh：写 state.json（pid/unit/log/commit/workers/worlds/days/
  起止/exit），exec 2&gt;&amp;1 运行 batch 并回传真实退出码。
- scripts/verify-m3r.py：独立可复跑，校验 state 字段、50 条 world 行（索引/seed/
  ok 与 check_a/b/c 自洽）、summary passed+failed=50 与极值一致、抽查 3 行、
  [done] 50 条、progress 行、M3_ACCEPTANCE=PASS 且 ratio_min&gt;2.0。

本次实跑（commit 895d792）：12 worker，wall=4316.0s，50/50 OK，
ratio_min=3.346 ratio_max=12.321 gini∈[0.412,0.548]，relconn=30/18，
check_a/b/c 全 PASS，M3_ACCEPTANCE=PASS，exit=0；独立脚本复跑 M3R_VERIFY=PASS。
证据：artifacts/m3r-acceptance/acceptance.log + 20260928T183215Z/state.json。

回归：Desktop 303/303 + Kernel 119/119；--performance-baseline ×3
digest=953775FAEB2F… 不变，performance_determinism=PASS。
未改 Kernel/Sim；未 push。
</content>
</entry>
<entry>
<title>p49: 长局内存 profile 利基 --profile-long-run(逐日采样 RSS + Events/Rumors/Annals/Memory 条目数与估算字节)</title>
<updated>2026-09-28T13:54:17+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-28T13:54:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=1f75c8ad138f252c20244e9b690e3cc0ef32bcde'/>
<id>urn:sha1:1f75c8ad138f252c20244e9b690e3cc0ef32bcde</id>
<content type='text'>
</content>
</entry>
<entry>
<title>perf(kernel): P27 第一步 — Rumor 长跑基准与修复前量化</title>
<updated>2026-09-22T02:36:39+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-22T02:36:39+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=164f4749460a304c1aaad4900ef3facc29859eb0'/>
<id>urn:sha1:164f4749460a304c1aaad4900ef3facc29859eb0</id>
<content type='text'>
新增 Kernel 层 Rumor 长跑基准（RumorBench.fs + headless --rumor-bench
[days npcs chats_per_day]），把「聊天→生成/追溯谣言」路径从 Sim.step 的 NPC
快照分配解耦，隔离测量谣言工作集随世界年龄的分配/耗时；同 Config 的
retained_id_checksum 证明确定性。

复核 M3-1 前提：World.Rumors 已被 M6a（d94ec2d/cc850bf）按 3 天保留窗口收敛，
单日成本平稳（1/5/10 天 ≈18.7/18.1/19.8s、≈19GB/天），超线性项消失。
剩余 Rumor 成本 = 每次聊天的两条 O(N) 扫描 latestRumorFor/rumorIsDuplicate，
且 [&lt;Struct&gt;] NpcId/RumorId 用 = 比较会逐条装箱（Sim.chat 单独测得 N=16000
时 393,736 B/次、随 N 线性）。

修复前基准（30 NPC，--rumor-bench D 30 2000）：
 3d  chat_calls=6000   retained=6000  alloc=930,716,456   ms=1626.7
 30d chat_calls=60000  retained=8000  alloc=13,419,045,864 ms=12182.5
 60d chat_calls=120000 retained=8000  alloc=27,297,668,608 ms=23769.7
（60d 工作集稳定 8000，不随年龄增长。）

docs/维护说明.md 新增 P27 小节记录上述现状与量级。不改任何模拟语义。
</content>
</entry>
<entry>
<title>feat(headless): 逐世界流式输出 + --cost-probe 成本阶梯</title>
<updated>2026-09-21T14:08:53+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-21T14:08:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=0ae0173c6b25e54c9a4b97b0cc231356466cd7f8'/>
<id>urn:sha1:0ae0173c6b25e54c9a4b97b0cc231356466cd7f8</id>
<content type='text'>
- runBatch 改为每个世界一完成立即打印 world= 行（行尾追加 elapsed_s）与
  [done k/N] elapsed=…s 进度行并 flush，长批次不再整轮零进度
- batch_summary 旧字段原样保留，追加 workers 与 wall_s 总墙钟
- 新增 BatchOutput 纯格式化与 runStreaming 并行驱动
- 新增只读 --cost-probe [D1,D2,...]：按天阶梯真实测量 ticks/s、墙钟、分配与 GC
- 判据语义 check a/b/c 未改
</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>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(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>
<entry>
<title>infra: P0 监督加固 — m3_supervise.py flock防重入/原子状态/冻结Release全依赖+sha256清单/真实child退出码(sh -c exitfile)/PID+starttime身份/收紧PASS判据(批次参数+world行数全OK+batch_summary+verdict token+清单hash+commit绑定)/失败停机并写diagnosis报告, selftest 33项合成断言; completion_notify.py 新completion-notice.md hash仅打印一次缺失静默, selftest 7项; Headless --batch 世界级并行(LV_BATCH_WORKERS 默认modest 4, 逐世界确定性, 输出按序, world行与串行逐字节一致); .gitignore 补冻结/锁/通知状态文件</title>
<updated>2026-09-19T11:20:07+00:00</updated>
<author>
<name>Somhairle H. Marisol</name>
<email>muqiu-han@outlook.com</email>
</author>
<published>2026-09-19T11:20:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.somhairle.bid/living-village.git/commit/?id=ef1f6b3d27e292a6b5e005411844eb8e14cbe4b2'/>
<id>urn:sha1:ef1f6b3d27e292a6b5e005411844eb8e14cbe4b2</id>
<content type='text'>
</content>
</entry>
</feed>
