| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
昼夜光照四档)
|
| |
|
|
| |
M6Presentation 新增 periodAtTick/periodLighting 参数表(AmbientTint 乘性色调 + Veil/VeilAlpha 加性覆盖 + LanternGlow),边界与 timePeriodLabel 一致;正午为恒等档不改白平衡。DrawWorldView 并入时段色调与 effectiveLanternGlow(黄昏 0.6 起点亮、夜晚 1.0),覆盖色最后叠加。新增 P73 回归;新增 LV_P73_SHOT 同机位四帧证据 + analyze-p73(verdict=PASS);字形表补 正/午(345)。Desktop 346/346、Kernel 120/120、digest 与 p70 一致。
|
| | |
|
| |
|
|
| |
analyze-p72 改为按帧各取像素相异的独立抽帧;docs/evidence 增 p72-walk-frametwo.png,framesix 换为独立帧。已 add 全部改动,工作树就绪,未 push。
|
| |
|
|
| |
CharacterArt 运行时点阵图集从 4 走 + 2 待机扩为 6 走(新增左右低过渡步 4/5,由 1/2 镜像)+ 2 待机,格数 *8、图集 5120x48;VillageArt 帧循环 %6、characterSourceRectangle *8、characterAtlasWidth 5120。同步 P45/Prototype 帧断言、新增 P72 帧表完整性回归、脚本与素材重新生成、维护说明动画语义。白天正午村庄行走实跑证据落 docs/evidence/p72-*。Desktop 343/343、Kernel 120/120、digest 与 p70 一致。
|
| | |
|
| |
|
|
|
|
|
|
| |
- 新增 docs/api-reference/:README + 6 模块(Sim/地图生成/桌面渲染/交互交易/职业/存读档)
每节含 职责·对外 API 概览·单位与量纲·不变量·失败分支·算法与性能取舍
- 口径以当前源码为准;性能引用实测 p70 基准(不含未测宣称)
- P71ApiDocsTests(3 例,红先→绿):文件齐备/章节齐备/关键接口与单位锚点
- Desktop 341/341、Kernel 120/120;未改生产 .fs/.fsproj、未 push
|
| |
|
|
| |
API/模块说明)
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- 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 掉帧>33.3ms=2
每帧分配 mean=231KB p95=297KB;dotnet-counters 缺席已如实标注
- Desktop 338/338、Kernel 120/120;Kernel/Sim/渲染口径/字形表未动
|
| |
|
|
| |
已派(真实性能基准)
|
| |
|
|
|
|
|
|
|
|
|
| |
文案统一审校(面板措辞/交易缺货口径/页脚留白与 ESC)
- 面板打开语统一:「年鉴已打开」→「年鉴面板已打开」(Interaction + requiredUiLabels)
- 交易缺货口径统一:「背包不足」→「库存不足」(PlayerTrade,与对话交易失败名一致)
- 分页页脚留白/大小写统一:「…页 空格 翻页 Esc 关闭」→「…页 空格 翻页 ESC 关闭」
- P69CopyAuditTests(2 例,红先)+ P61 钉住样例同步
- 只改字符串字面量与相关断言;Kernel/Sim/MapSnapshot 未动
- Desktop 338/338、Kernel 119/119;digest 953775FA…7F6C 不变
|
| | |
|
| |
|
|
| |
4aa6fab,整图截图缺口关闭
|
| |
|
|
|
|
|
|
|
|
|
| |
- MapSnapshot:MapGen.Result 纯 CPU 渲染为整图 PNG(每瓦片 8px,自包含
IHDR/IDAT/IEND + CRC32 + ZLibStream,无外部图像依赖);调色板覆盖
河流/主路/农田/民居屋顶/小径/桥/树丛
- Program.fs:LV_P68_MAPSHOT=1 钩子用 paramsForSize 512 384 seed=4242 生成并
离线渲染整图后退出(headless,不需图形设备)
- P68MapSnapshotTests(3 例,红先):尺寸/PNG 签名、要素像素存在、两次渲染逐字节一致
- scripts/analyze-p68.py:尺寸/调色板像素/无黑白大块/missing_glyph_slots=0/确定性
- Desktop 336/336、Kernel 119/119;digest 953775FA…7F6C ×3 PASS;未动 Kernel/Sim
|
| |
|
|
|
|
|
|
|
|
| |
- TaskRuntime.targetText/taskLine:帮工→「村民 N」、翻土→「自家地块」,
无目标时与旧任务行文案逐字节一致(不加箭头/目标名)
- Interaction TaskPanel 任务行改用 taskLine(其余面板/文案不动)
- 字形表新增 地 块 →(343 字,图集重生成);ChineseText.requiredUiLabels 增补
- P67TaskTargetUiTests(5 例,红先)+ PrototypeTests 计数同步 340→343
- LV_P67_SHOT 证据钩子(有目标/无目标各一帧)+ scripts/analyze-p67.py
- Desktop 333/333、Kernel 119/119;digest 953775FA…7F6C ×3 PASS;未动 Kernel/Sim
|
| |
|
|
| |
健康推进,渲染接线段)
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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 未动
|
| | |
|
| | |
|
| |
|
|
| |
2da1cba(职业切片五·询价接谣言池)
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
+ 稿证据)
- Kernel Occupation 新增 freshReliableRumors/inquiryRumor/marketInquiryText(纯判定+文案,
对齐 Sim.latestRumorFor 新鲜度/可信度口径,全序命中规则,禁随机;不改 Sim.fs)
- Desktop chooseIntent:货郎 OfferTrade 读对话前谣言池,Status=inquiry|<短答>;statusLabel 透出
- 真字补 17 字(东头西北巷口盐巴米布茶柴涨两文落些)并重出 atlas(340 字/384x528)
- 红先 P65RumorInquiryTests(6 例):命中/幂等/陈旧·微弱·空池/仅货郎/非货郎回归逐字节/
save v2 头不变+v3 round-trip/穷举组合无缺字
- LV_P65_SHOT 钩子 + scripts/analyze-p65.py + docs/evidence/p65-*(PASS)
- Desktop 320/320,Kernel 119/119;digest 953775FA…7F6C ×3 PASS
|
| | |
|
| | |
|
| |
|
|
| |
整改桥梁栏杆可辨(深墨栏体/亮扶手/望柱)与内景四角布局(Hermes vision 复核)
|
| | |
|
| |
|
|
| |
样板三处视觉雕琢(俯瞰上半补种/桥栏杆与护岸石/内景家具)+ 证据
|
| | |
|
| | |
|
| |
|
|
| |
+ 真实相机俯瞰)
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
红:新增 src/LivingVillage.Desktop.Tests/P61GlyphCoverageTests.fs——扫描 Desktop 源码
字符串字面量内的全部 CJK 字,断言 100% 在 CjkGlyphAtlas 内;并逐字钉 G1 缺的
16 字(冬包卷品夏料春玩秋第背车轴页香鱼)、requiredUiLabels、以及运行期文案
(日历「春·第1天」/页脚「第 1/3 页…翻页」/「V 卖出 背包物品×1」/鱼卷轴香料玩车回)。
实现前实测 3 失败:缺字形 16。
绿:向 CjkGlyphAtlas.characterTable 补入 16 字(保持有序、去重),同步
Assets/cjk-glyphs.txt,并跑 scripts/generate-cjk-glyph-atlas.sh 用既有 Noto Sans CJK
重生成预生成 PNG:384x504(16x21 格,+16 字),16 个新字格均有真实字体墨迹
(ink_px 148-233,非程序几何伪字形)。更新 PrototypeTests 的图集几何常量
(307→323、rowCount 20→21、pixelHeight 480→504)。
证据:LV_P61_SHOT=1 拍 2 帧(p61-calendar 右上日历「春 · 第1天」;p61-dialog-footer
真实 Interact 开对话,页脚「第 1/3 页…翻页」+ 选项「V 卖出 背包物品×1」)。
analyze(p61-analysis.txt):缺字空白位=0、黑块=0、白块=0/2;全部抽检文案
missing_glyph_slots=0。钩子为 Game.fs 纯追加(53 行,0 删除),未动 HUD 结构。
回归(p61-verification.txt):Desktop 308/308(+4 P61)+ Kernel 119/119;
--performance-baseline ×3 digest 953775FAEB2F… 不变,determinism PASS。
未改 Kernel/Sim,未引外部素材(沿用既有 Noto 字体来源),未 push。
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
江南可玩样板端到端盘点与缺口证据(只盘点,零代码改动)
入口:仓内不存在 LV_DEBUGGAME;用真实游戏内钩子驱动同一 Game 循环取证
(LV_P46_SHOT 启动/菜单、LV_P44_SHOT 白天 NPC 对话、LV_P39_SHOT 夜晚石灯笼、
LV_P53_REC 提示-交互-关闭短帧链),复制为 docs/evidence/p60-*.png 共 7 帧。
盘点结论(docs/evidence/p60-inventory.md):
- 已完成:桥/河/岸/石板路/植物、村民四向动画、昼夜光照、提示-交互-关闭链、玩家与可区分村民。
- 部分完成:① 民居可进入——功能与测试齐备(Interaction.fs:400-424、Game.fs:2688-2690、
PrototypeTests/P36PromptTests/SampleTests),但无内景游戏截图;② 中文界面——字形图集
(CjkGlyphAtlas.characterTable,307 字)缺 16 个 UI 用字:冬包卷品夏料春玩秋第背车轴页香鱼,
缺字被置空(Game.fs:73-92),影响右上日历「春夏秋冬·第N天」、对话页脚「第…页」、
背包/交易/物品名/回车提示等。
帧分析(p60-analysis.txt):黑块 0、白块 0/7 failures、字面豆腐块 0;
对话 rect (190,558,900,138),提示 rect (598,288,52,26) 且 paint 44.55 / restore 0.00(P53 PASS)。
缺口分层:阻塞确认门 = 缺字 16(G1)、民居内景无截图(G2)、逐帧 vision 自审未执行(G3,
本 writer 模型无图像输入且环境无 OCR/vision CLI/凭据);不阻塞 = 长视野成本留档(G4)、
复用钩子非单一入口(G5)。均只给最小整改建议,未修。
回归(p60-verification.txt):Desktop 304/304 + Kernel 119/119;
--performance-baseline ×3 digest 953775FAEB2F… 不变,determinism PASS。未 push。
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
增长曲线证据单,只读)
目标:量化「多世界并存 × 天数」的内存/GC 增长,收口 P49 范围外项。
口径:新增 Headless `--profile-multiworld <worlds> <days> <npcs> <sampleEveryDays> <seedBase>`,
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>&1,state.json 记
pid/unit/log/commit/参数/起止/exit)。主运行 wall=1024.4s(17.1min < 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。
|
| | |
|
| |
|
|
| |
缩尺批验门槛收口
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
独立验收脚本)
缩尺口径: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>&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>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。
|
| |
|
|
| |
标定亲测(1世界×2/5/10天=34.6/87.7/173.6s) + P58 派发
|
| | |
|
| |
|
|
| |
菜单/启动水面第二层高光波光——逐列相位错开(步进2.4rad)/更快(周期80 vs 96 tick)/更亮更窄细高光条 + 昼夜 tint 衰减参数 + 帧计数纯函数回归;ANALYZE splash hl/main std=274.97 corr=-0.017、menu hl/main std=279.77 corr=-0.011、层间相关<0.95、相位差2.4rad、无黑块白块
|
| | |
|
| |
|
|
| |
各模块职责/数据结构/不变量/失败分支/单位口径 + 性能基准实测口径(吞吐/分配/GC + 40天长局曲线 + digest 953775FA 与 determinism 验证法),docs-only
|
| | |
|
| |
|
|
| |
当日任务经济闭环——设计口径物品报酬入账(夜捕鱼×2/送粮食物×1, 其余不发) + 连续完成天数(streak 跨日保留/漏完成清零) + v3 streak 尾段与 save(None) 兼容 + LV_P55_SHOT 证据
|
| | |
|
| |
|
|
| |
状态机接入真实事件/环境信号(接受/对话/交易/到达/夜水边),HUD 短中文反馈 + 任务面板接受提示 + v3 任务态往返与 save(None) 兼容 + LV_P54_SHOT 证据
|
| | |
|