hololake-system-architecture/scripts/build-tcs-migration-registry.mjs

82 lines
3.2 KiB
JavaScript

#!/usr/bin/env node
import fs from "node:fs";
import path from "node:path";
const root = path.resolve(import.meta.dirname, "..");
const registry = JSON.parse(fs.readFileSync(path.join(root, "parts/registry.json"), "utf8"));
const phase0 = new Set([
"HLP-PART-TCS-LANG-0001",
"HLP-PART-TCS-SELFHOST-0001",
"HLP-PART-TCS-STAGE0-0001",
"HLP-PART-GIR-0001",
"HLP-PART-REG-0001",
"HLP-PART-NQG-0001",
"HLP-PART-QA-0001",
]);
const phase2Prefixes = ["HLP-PART-AFF", "HLP-PART-MEM", "HLP-PART-REL", "HLP-PART-CX"];
const verifiedSlices = new Map([
["HLP-PART-TCS-LANG-0001", ["build/self-host/compiler-B.gir.json", "receipts/TCS-ZERO-CORE-EXECUTION-20260821.json"]],
["HLP-PART-TCS-SELFHOST-0001", ["build/self-host/compiler-A.gir.json", "build/self-host/compiler-B.gir.json"]],
["HLP-PART-TCS-TRANS-0001", ["receipts/TCS-DUAL-HOST-BINARY-ACCEPTANCE-20260821.json", "receipts/JD-TCS-AGENT-ACCEPTANCE-20260821.json"]],
["HLP-PART-TCS-HOST-0001", ["receipts/TCS-HOST-PERSONA-PROBE.json", "receipts/jd/TCS-HOST-PERSONA-PROBE.json"]],
]);
function phase(part) {
if (phase0.has(part.id)) return "P0_LANGUAGE_RUNTIME_AND_QUALITY";
if (part.id === "HLP-PART-0090") return "P3_SHARED_WORLD_PROJECTOR_LAST";
if (phase2Prefixes.some((prefix) => part.id.startsWith(prefix))) {
return "P2_PERSONA_MEMORY_RELATION_AND_AFFECT";
}
return "P1_NUMBER_CHANNEL_AGENT_KNOWLEDGE_AND_MARKET";
}
const entries = registry.parts.map((part, index) => {
const alreadyTcs = [
"HLP-PART-TCS-LANG-0001",
"HLP-PART-TCS-SELFHOST-0001",
"HLP-PART-TCS-STAGE0-0001",
].includes(part.id);
const verifiedEvidence = verifiedSlices.get(part.id);
return {
order: index + 1,
part_id: part.id,
display_name_zh: part.displayName,
donor_source: part.source,
donor_state: part.status,
native_acceptance_before_migration: part.nativeAcceptance,
migration_phase: phase(part),
target_module_id: `TCS-MOD-${part.id.replace(/^HLP-PART-/, "")}`,
rewrite_rule: alreadyTcs
? "CONTINUE_NATIVE_TCS_IMPLEMENTATION"
: "REWRITE_SEMANTICS_STATE_MACHINE_AUTHORITY_FAILURE_AND_RECEIPTS_IN_TCS",
host_adapter_rule: "KEEP_ONLY_MINIMUM_OS_ABI_DRIVER_OUTSIDE_TCS_MODULE",
migration_state: verifiedEvidence ? "ACTIVE_VERIFIED_100" : alreadyTcs ? "ACTIVE" : "QUEUED",
verified_evidence: verifiedEvidence || [],
acceptance_required: [
"TCS_SOURCE_COMPILES_WITH_COMPILER_B",
"GIR_HAS_NO_UNRESOLVED_NATURAL_LANGUAGE",
"NEGATIVE_AUTHORITY_AND_PATH_TESTS_FAIL_CLOSED",
"TARGET_RUNTIME_READBACK",
"DONOR_PARITY_OR_EXPLICIT_REJECTION_RECEIPT",
],
};
});
const output = {
schema: "hololake.tcs-module-migration-registry/v1",
registry_id: "HLP-TCS-MIGRATION-REGISTRY-0001",
source_parts_registry: "parts/registry.json",
source_part_count: registry.parts.length,
rule: "NO_WHOLESALE_TRANSLITERATION_FROM_RUST_OR_TYPESCRIPT",
compiler: "TCS-COMPILER-STAGE1-0001",
target_abi: "GIR/1",
registration_is_rewrite: false,
rewrite_is_acceptance: false,
entries,
};
const target = path.join(root, "migration/tcs-module-migration-registry.json");
fs.mkdirSync(path.dirname(target), { recursive: true });
fs.writeFileSync(target, `${JSON.stringify(output, null, 2)}\n`);
console.log(`WROTE ${target} entries=${entries.length}`);