fix(tier2): store roundtrip harness 重建用 cwd+相对路径——修 esbuild 路径注释致 bundle 假不确定(SRC T3 真库 5/5)
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>
This commit is contained in:
parent
47644881ff
commit
d007974600
@ -89,18 +89,21 @@ def _rebuild(sp: dict) -> dict:
|
||||
if not esbuild:
|
||||
return {"source_digest": source_digest, "bundle_sha256": None, "mode": "source-bytes"}
|
||||
# 真 esbuild:把源写进临时目录、bundle 出单文件、算 sha256(bundle)。
|
||||
# 关键:cwd=tmp + 相对 entry/outfile 跑 esbuild。esbuild bundle 会把入口【路径】作为模块注释写进
|
||||
# 产物(`// <path>`);若传绝对路径,mkdtemp 每次目录名不同 → 注释不同 → bundle 字节跨目录不稳,
|
||||
# 会把「重建确定性」误判为失败(实为 harness 自身路径泄漏,非 store / esbuild 不确定)。故用 cwd +
|
||||
# 相对路径,让注释恒为 `// src/game-logic.js`,bundle 字节跨目录稳定(2026-07-05 mini-infra 真库窗口实测坐实)。
|
||||
tmp = Path(tempfile.mkdtemp(prefix="t2-rebuild-"))
|
||||
try:
|
||||
for f in files:
|
||||
dst = tmp / f["path"]
|
||||
dst.parent.mkdir(parents=True, exist_ok=True)
|
||||
dst.write_text(f["content"], encoding="utf-8")
|
||||
out = tmp / "bundle.js"
|
||||
entry = sp.get("entry") or "src/game-logic.js"
|
||||
subprocess.run(
|
||||
[esbuild, str(tmp / (sp.get("entry") or "src/game-logic.js")),
|
||||
"--bundle", f"--outfile={out}"],
|
||||
check=True, capture_output=True, timeout=60)
|
||||
bundle_sha = hashlib.sha256(out.read_bytes()).hexdigest()
|
||||
[esbuild, entry, "--bundle", "--outfile=bundle.js"],
|
||||
check=True, capture_output=True, timeout=60, cwd=str(tmp))
|
||||
bundle_sha = hashlib.sha256((tmp / "bundle.js").read_bytes()).hexdigest()
|
||||
return {"source_digest": source_digest, "bundle_sha256": bundle_sha, "mode": "bundle"}
|
||||
finally:
|
||||
shutil.rmtree(tmp, ignore_errors=True)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user