lili
1981a6be01
feat(storage): 闭合 Agent 到 Runtime 的 OSS 游戏链路
...
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
增加不可变源码检出、两阶段 finalize/activate、Runtime 同源对象读取与 iframe 安全边界,并用 fail-closed CI 门固定契约。Git 仅提交平台实现、契约、迁移和 SoT,不包含具体游戏源码、素材、bundle 或验收证据。
2026-07-30 05:21:44 -07:00
lili
a513ae38fd
fix(storage): harden source authorization and committed CAS
...
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
Provision the isolated game-source writer path, bind source uploads to
GameSourceArchive manifests, and require every immutable storage field for
pending-to-committed CAS. Reuse the gate-validated runtime manifest snapshot,
normalize remote storage errors, and record the staging object/CAS evidence.
2026-07-29 19:10:09 -07:00
lili
17727d08c3
feat(storage): 接入游戏内容对象存储与运行时提交门
...
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
冻结 GameArtifactManifest/GameSourceArchive 契约和 V34 pending/committed 状态记录,增加专用 writer 的全量回读物化校验,并让 Runtime API 在消费和发布前对账 committed、GamePackage checksum 与实际 engineBundle hash。隔离 staging 已验证真实消费拒绝未提交版本;源码桶权限仍保持 fail-closed,正式金标不切换。
2026-07-29 12:02:22 -07:00
lili
d007974600
fix(tier2): store roundtrip harness 重建用 cwd+相对路径——修 esbuild 路径注释致 bundle 假不确定(SRC T3 真库 5/5)
...
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
W-ASSET-SRC T3 mini-infra 真库窗口验证(真 MySQL+MinIO)暴露:harness _rebuild 每次用新 mkdtemp +
绝对 entry 路径跑 esbuild,而 esbuild bundle 把入口路径写进产物注释(// <abs-path>),mkdtemp 目录名每次
不同 → bundle 字节跨目录不稳 → 断言1「确定性重建」误判失败(实为 harness 自身路径泄漏,非 store/esbuild 不确定)。
改用 cwd=tmp + 相对 entry/outfile,注释恒为 // src/game-logic.js、bundle 字节稳定。
真库真跑坐实:修前 4/5(断言1 假失败),修后 5/5 全绿——幂等 / 确定性重建(bundle sha 字节相等)/ 版本寻址 /
缺源显式失败 / 半落库不留隐形孤儿(put 失败留可见 pending、无隐形对象、续跑自愈成 committed)。
ASSET-SRC manifest-first 存储在真 MySQL+MinIO 全五条闭环坐实(mini-infra:infra-mysql tier2 库 + infra-minio tier2-src 桶)。
T1(翻 TIER2_STORE=backend + 真 tier2 富游戏 gen 落库)待 tier2 真跑窗口。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 20:58:53 -07:00
lili
8200aa08d0
feat(tier2): W-ASSET-SRC 源工程存储 manifest-first 落库 + 治理对账门 + 取回重建 harness + 孤儿清扫 job (SRC T1-T4)
...
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
背景/目标:tier2 富游戏 BackendStore 真实现已写好却未通电,且 save 走 MinIO-first、半落库会留无 manifest
指向的隐形对象,manifest 表游离在治理外(in-code DDL + 留档 .sql 双源无机器门)。本切片按已拍板的
manifest-first 方案把 SRC 一面推到「接生产、schema 受治理、取回可重建、半落库孤儿有修法」。只碰富游戏这
一面,不动便宜档 Java 面、不做素材、不接 fetch 生产消费方。
改动(六件核心 + T1/T3/T4):
- T2① status 列(pending/committed):新建走 CREATE DDL、存量走受治理 ALTER;BackendStore._ensure_schema
按 information_schema 探测缺列才补(每实例一次,跨 MySQL/MariaDB 稳)。
- T2② save 改写入序:MySQL 落 pending 行 → MinIO put → 翻 committed;命中 committed 幂等返回、命中
pending 复用 versionId 续跑自愈(同前缀真覆盖)。半落库崩溃只留可见 pending 行、无隐形对象。
- T2③ fetch 两条分支(取最新 / 取指定版本)都补 AND status='committed',pending 半成品对取回不可见。
- T2④ 治理归属:.sql 留 tier2/config/schema/(owner=tier2、不走 huijing Flyway、无执行副本),
contracts/README.md 加治理指针认领、明说不参与 Flyway 对账;不塞 db-schemas/ 根。
- T2⑤ 可跑对账机器门 test_store_ddl_reconcile.py:规范化比对 in-code(_DDL+_ALTER)与 .sql,改一处
漏改另一处即红。
- T2⑥ 修 store.py 模块头 docstring 整块(占位/seam/绝不实连/forbidden-import 守着 的陈旧误述改为与真
实现一致,并纠正守卫范围:check-forbidden-import.sh 只禁 wg1.*/SAA/L2,不禁 pymysql/minio)。
- T1 接线单点:TIER2_STORE=backend 激活配方 + 前置 checklist(CREATE DATABASE / status 列状态确认)落
staging-ops §7(tier2 gen-worker 部署 env 单点);不改 default_store 工厂形态。
- T3 取回重建 harness store_roundtrip_harness.py:五条(确定性重建优先 bundle sha256 字节相等、非字节稳
才退九门 verdict 逐项一致+无 missingContent、不拿近乎恒真 buildInputHash 承重;版本寻址;幂等;缺源
显式失败;半落库两失败点),本地 LocalFsStore 自检覆盖 1-4、真库+bundle 字节相等标 follow-up 窗口。
- T4 孤儿清扫 store_cleanup_job.py + BackendStore.cleanup_orphans:乐观删(status=pending CAS 先删行
再删对象)防与续 put 的 TOCTOU 竞态,幂等,owner=tier2,可追溯日志。
契约(contract-first):.sql DDL additive 加 status 列 + 首份受治理 ALTER;contracts/README.md 治理指针;
落库寻址 doc↔code 断言点(表名/双唯一键/「pending 对 fetch 不可见」)。不改 tier2-source-project.schema.json
addressing、不改 buildInputHash 字段、不改 GamePackage / 便宜档 source-project.schema。
验证:本地 14 个新单测真跑全绿(DDL 对账 3 + manifest-first 行为 8 + harness 本地 3);harness 脚本
LocalFsStore 自检 5/5;docs-gate 七检全绿;forbidden-import 守卫通过。真 MySQL+MinIO 往返 + bundle 字节
相等 = mini-infra 窗口 follow-up(worktree 无真库/无 esbuild,诚实未跑)。缺重依赖的既有测试(agentscope/
nacos)本极简 venv 未跑,均不 import store、与本改动无关。
计划锚点:docs/plans/2026-07-05-001-feat-asset-src-源工程存储-plan.md §4 T1-T4 / §5。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 18:03:28 -07:00
lili
3b6573941d
feat(cfg): NacosHotConfig 接进 genconfig — HotConfig 单例工厂 + 取值链前端热源(配置控制面阶段二·步骤4)
...
件2 genconfig 接热源:get() 取值链最前端插进程级热源单例(attach/detach),优先级 Nacos 热源>env>YAML>内置默认>调用方 default;复合键 area.key 无歧义扁平化 (area,key) 二维;缺键/未 attach/异常一律回落原链,绝不引入第二默认值(坑④·tech-decisions §13);热源命中即返回不读 YAML,mtime 缓存无从盖住热值;middleware 等所有 genconfig.get 调用面一行不改。
件1 worker/genconfig_nacos.py 工厂:启用旗 TIER2_GENCONFIG_NACOS 默认关(=行为字节不变,兼作 §3.6/§6 回退开关);按档隔离 dataId(tier2=gen-hot-params-tier2 / cheap=gen-hot-params-cheap,env 可覆盖);建 client 前 NO_PROXY 内网旁路;真实 namespaceId 默认空串(勿写 public,沿前置任务口径);注入 NacosHotConfig 的 defaults 刻意空;全程 best-effort 失败不 attach 不抛,genconfig 回落纯本地。
cheap-worker 共享 worker.genconfig(from worker import genconfig),两档隔离靠各进程 attach 各自 dataId 的热源;缝在 cheap_service_app.py:main 对称调 build_and_attach_hot_source(tier=cheap),本单不动只说明。
验证:单测 19 条锁死四条回落路径(未 attach/Nacos 不可达/namespace 配错/YAML 回落)+ 两档各读各 dataId + Nacos>env 优先级 + 门阈值热读 + 工厂 best-effort/按档/NO_PROXY/namespace 空串;worktree 全量 126 passed 无回归;真 Nacos(mini-infra 100.64.0.8)演示脚本改演示 dataId → genconfig 0.5s 热读到新值不重启、清理不碰生产 dataId。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-04 09:15:33 -07:00