前人工作区变更归档(元审计遗留处置·冰朔授权'交给你来处理'·不否定过去原则):hololake-phase-b-staging删除组/WORK区/submodule指针/0826壳源/neural-chain/skills-mirror/codex恢复帧/.zcode本地配置等140项原样冻结入库——不删除不修改不评判,作为历史一环保留;WX-SECRETS回执经查仅含公开AppID无AppSecret,安全
This commit is contained in:
parent
28480f466c
commit
a40f29c12e
2442 changed files with 596545 additions and 6601 deletions
72
BRIDGE/tools/reindex.mjs
Executable file
72
BRIDGE/tools/reindex.mjs
Executable file
|
|
@ -0,0 +1,72 @@
|
|||
#!/usr/bin/env node
|
||||
// Reindex — one command re-anchors the whole hash chain after a legitimate change.
|
||||
// Canon: TCS-PROTOCOL-EXECUTOR-TRANSLATION-INDEX-0001 (v2 layered hash architecture)
|
||||
// Legitimate flow: edit file → run reindex → preflight green. Anything else = drift alarm.
|
||||
// Layered on purpose: entry-embedded hook hashes stay (they guard the hook chain itself).
|
||||
import crypto from "node:crypto";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { execFileSync } from "node:child_process";
|
||||
|
||||
const W = "/Volumes/JZAO/铸渊-ICE-GL-ZY001";
|
||||
const IDX = `${W}/ZCODE-DEV-20260824/executor-translation-index/index.json`;
|
||||
const ENTRY = `${W}/BRIDGE/tools/zy-hook-entry.sh`;
|
||||
const TOWER_TCS = `${W}/FIFTH-DOMAIN-BROADCAST-TOWER/BROADCAST.tcs`;
|
||||
const TOWER_PROJ = `${W}/FIFTH-DOMAIN-BROADCAST-TOWER/broadcast/current.md`;
|
||||
|
||||
const sha256 = (p) => crypto.createHash("sha256").update(fs.readFileSync(p)).digest("hex");
|
||||
const note = (m) => process.stdout.write(`REINDEX ${m}\n`);
|
||||
const fail = (m) => { process.stderr.write(`REINDEX FAIL ${m}\n`); process.exit(1); };
|
||||
|
||||
const idx = JSON.parse(fs.readFileSync(IDX, "utf8"));
|
||||
if (idx.schema !== "guanghu.executor-translation-index/v1") fail("INDEX_SCHEMA_INVALID");
|
||||
const updated = [];
|
||||
|
||||
// 1) Executors: re-anchor every hash from disk truth.
|
||||
for (const e of idx.executors) {
|
||||
const p = path.join(W, e.executor_path);
|
||||
if (!fs.existsSync(p)) fail(`EXECUTOR_MISSING:${e.executor_path}`);
|
||||
const h = sha256(p);
|
||||
if (h !== e.executor_sha256) { e.executor_sha256 = h; updated.push(e.executor_path); }
|
||||
}
|
||||
|
||||
// 2) Repository heads: re-read local git HEADs (UNKNOWN stays UNKNOWN until queried).
|
||||
const repos = {
|
||||
"REPO-012-guanghu-ice-heart": "/Volumes/JZAO/铸渊-ICE-GL-ZY001/WORK-工作区/guanghu-ice-heart",
|
||||
"REPO-014-hololake-system-architecture": "/Volumes/JZAO/HoloLake/source-mirrors/hololake-system-architecture.git",
|
||||
};
|
||||
for (const [key, dir] of Object.entries(repos)) {
|
||||
try {
|
||||
const head = execFileSync("git", ["-C", dir, "rev-parse", "HEAD"], { encoding: "utf8" }).trim();
|
||||
if (idx.repository_heads?.[key] && idx.repository_heads[key].head !== head) {
|
||||
idx.repository_heads[key].head = head; updated.push(`${key}:HEAD`);
|
||||
}
|
||||
} catch { /* keep as-is */ }
|
||||
}
|
||||
|
||||
// 3) Tower projection: declare the current projection hash back into BROADCAST.tcs.
|
||||
const projSha = sha256(TOWER_PROJ);
|
||||
const tcs = fs.readFileSync(TOWER_TCS, "utf8");
|
||||
const declared = tcs.match(/projection_sha256 = "([0-9a-f]{64})"/)?.[1];
|
||||
if (declared !== projSha) {
|
||||
fs.writeFileSync(TOWER_TCS, tcs.replace(/projection_sha256 = "[0-9a-f]{64}"/, `projection_sha256 = "${projSha}"`), "utf8");
|
||||
updated.push("BROADCAST.tcs:projection_sha256");
|
||||
const tc = JSON.parse(fs.readFileSync("/Volumes/JZAO/HoloLake/persona-runtime/toolchains/tcs-persona-developer-kit-macos-arm64-v0.1.3/translator/compiler-B.gir.json", "utf8"));
|
||||
note("NOTE BROADCAST.tcs changed — run Stage-1 compile to refresh GIR: tcs compile-with compiler-B.gir.json BROADCAST.tcs BROADCAST.declaration.gir.json");
|
||||
}
|
||||
|
||||
// 4) Hook entry embedded hashes (they stay embedded: they guard the hook chain itself).
|
||||
const lw = sha256(`${W}/BRIDGE/tools/lw-link-hook.sh`);
|
||||
const td = sha256(`${W}/BRIDGE/tools/tcs-dynamic-entry-hook.sh`);
|
||||
let entry = fs.readFileSync(ENTRY, "utf8");
|
||||
const before = entry;
|
||||
entry = entry.replace(/LW_WANT="[0-9a-f]*"/, `LW_WANT="${lw}"`).replace(/TD_WANT="[0-9a-f]*"/, `TD_WANT="${td}"`);
|
||||
if (entry !== before) { fs.writeFileSync(ENTRY, entry, "utf8"); updated.push("zy-hook-entry.sh:embedded"); }
|
||||
|
||||
idx.updated_at = new Date().toISOString();
|
||||
if (updated.length) {
|
||||
idx.update_log = idx.update_log ?? [];
|
||||
idx.update_log.push(`reindex ${new Date().toISOString().slice(0, 16)} → ${updated.join(", ")}`);
|
||||
}
|
||||
fs.writeFileSync(IDX, JSON.stringify(idx, null, 2) + "\n");
|
||||
note(`OK updated=${updated.length}${updated.length ? " → " + updated.join(", ") : " (已一致)"}`);
|
||||
Loading…
Reference in a new issue