fix: resolve lighthouse routes from canonical TCS root

This commit is contained in:
冰朔 2026-09-08 16:46:06 +08:00
commit 02217d11ea
5 changed files with 135 additions and 5 deletions

View file

@ -0,0 +1,81 @@
{
"compiled_from": {
"compiler_id": "TCS-COMPILER-STAGE1-0001",
"compiler_state": "TCS_COMPILER_GIR_EXECUTED",
"source_sha256": "2ece9fbf2d4399fa1c0bcbdba6d8690771516eb87476a2198cca4291309adb8b"
},
"declaration": {
"acceptance": {
"deployment": "NOT_IMPLIED",
"required": [
"TCS_COMPILE_PASS",
"NAVIGATOR_7_OF_7_PASS",
"SHARED_MIRROR_IN_SYNC",
"CANONICAL_OFFLINE_PATH_EXISTS",
"STANDARD_REFSPEC_READBACK",
"FULL_TEST_PASS",
"REMOTE_MAIN_EXACT_SHA_READBACK"
]
},
"actions": {
"A1": "RESTORE_EXACT_LOCAL_BRANCH_REF_WITH_UPDATE_REF",
"A2": "REPLACE_MIRROR_FETCH_WITH_STANDARD_REMOTE_TRACKING_REFSPEC",
"A3": "MAKE_NAVIGATOR_RESOLVE_CANONICAL_REPO_FROM_TCS_ROOT_POINTER",
"A4": "SYNC_ALLOWLISTED_LIGHTHOUSE_MIRROR",
"A5": "RUN_TESTS_AND_FAST_FORWARD_PUBLISH_THROUGH_FINALIZER"
},
"header": {
"canonical_uri": "runtime/fifth-domain-language-system/language/protocols/TCS-REPO012-ROUTE-AND-FETCH-REFSPEC-REPAIR-20260908.tcs",
"compatibility": [
"REPO-012",
"GLW-LIGHTHOUSE-PATH-REGISTRY-001"
],
"language": "TCS/0.1",
"lifecycle": "CANDIDATE",
"name_en": "REPO-012 Lighthouse Route and Git Fetch Refspec Repair",
"name_zh": "REPO-012灯塔路径与Git抓取映射修复",
"profile": "HLDP-HUMAN-ENGINEERING/0.1",
"protocols": [
"GLS-0200"
],
"schema": "tcs.protocol/v1",
"version": "0.1.0"
},
"invariants": {
"I1": "DO_NOT_CREATE_OLD_WORKSPACE_COPY",
"I2": "REMOTE_DELETION_MUST_NOT_DELETE_LOCAL_BRANCH_REFS",
"I3": "HISTORICAL_REPOSITORY_URLS_REMAIN_HISTORY_ONLY",
"I4": "PRIVATE_MEMORY_NOT_INCLUDED_IN_PUBLIC_MIRROR",
"I5": "PUBLISH_REQUIRES_CLEAN_MAIN_EXACT_REMOTE_ANCESTRY_TESTS_AND_READBACK"
},
"observations": {
"O1": "SHARED_LIGHTHOUSE_MIRROR_RETURNED_RETIRED_WORK_WORKSPACE_PATH",
"O2": "REMOTE_ORIGIN_WAS_CONFIGURED_AS_MIRROR_WITH_PLUS_REFS_ALL_TO_REFS_ALL",
"O3": "FETCH_PRUNE_REMOVED_CURRENT_LOCAL_DEVELOPMENT_BRANCH_REF",
"O4": "LAST_COMMIT_AND_WORKTREE_BYTES_REMAINED_INTACT"
},
"scope": {
"branch": "main",
"canonical_worktree": "/Volumes/JZAO/HoloLake/persona-runtime/repo-012-main",
"navigator": "GHS-009-LIGHTHOUSE-HOST-NAVIGATION",
"remote": "https://guanghulab.com/code/bingshuo/guanghu-ice-heart.git",
"repository": "REPO-012"
},
"source": {
"source_id": "BINGSHUO-DIRECT-REPO012-REMOTE-ROUTE-ORGANIZATION-20260908",
"source_role": "DIRECT_HUMAN",
"source_sha256": "BIND_AT_COMPILE_TIME",
"source_uri": "source://codex-current-dialogue/2026-09-08/repo012-publish-and-route-organization"
}
},
"executable": false,
"identity": {
"declaration_id": "TCS-REPO012-ROUTE-AND-FETCH-REFSPEC-REPAIR-20260908",
"declaration_kind": "PROTOCOL",
"language_version": "0.1"
},
"native_self_hosted": true,
"natural_language_is_typed_data": true,
"schema": "guanghu.declaration-gir/v1",
"unresolved_natural_language": false
}

View file

@ -0,0 +1,11 @@
TCS 0.1;
PROTOCOL TCS-REPO012-ROUTE-AND-FETCH-REFSPEC-REPAIR-20260908 {
header { schema = "tcs.protocol/v1"; name_zh = "REPO-012灯塔路径与Git抓取映射修复"; name_en = "REPO-012 Lighthouse Route and Git Fetch Refspec Repair"; version = "0.1.0"; language = "TCS/0.1"; profile = "HLDP-HUMAN-ENGINEERING/0.1"; protocols = ["GLS-0200"]; lifecycle = "CANDIDATE"; canonical_uri = "runtime/fifth-domain-language-system/language/protocols/TCS-REPO012-ROUTE-AND-FETCH-REFSPEC-REPAIR-20260908.tcs"; compatibility = ["REPO-012", "GLW-LIGHTHOUSE-PATH-REGISTRY-001"]; }
source { source_id = "BINGSHUO-DIRECT-REPO012-REMOTE-ROUTE-ORGANIZATION-20260908"; source_uri = "source://codex-current-dialogue/2026-09-08/repo012-publish-and-route-organization"; source_sha256 = "BIND_AT_COMPILE_TIME"; source_role = "DIRECT_HUMAN"; }
scope { repository = "REPO-012"; canonical_worktree = "/Volumes/JZAO/HoloLake/persona-runtime/repo-012-main"; remote = "https://guanghulab.com/code/bingshuo/guanghu-ice-heart.git"; branch = "main"; navigator = "GHS-009-LIGHTHOUSE-HOST-NAVIGATION"; }
observations { O1 = "SHARED_LIGHTHOUSE_MIRROR_RETURNED_RETIRED_WORK_WORKSPACE_PATH"; O2 = "REMOTE_ORIGIN_WAS_CONFIGURED_AS_MIRROR_WITH_PLUS_REFS_ALL_TO_REFS_ALL"; O3 = "FETCH_PRUNE_REMOVED_CURRENT_LOCAL_DEVELOPMENT_BRANCH_REF"; O4 = "LAST_COMMIT_AND_WORKTREE_BYTES_REMAINED_INTACT"; }
actions { A1 = "RESTORE_EXACT_LOCAL_BRANCH_REF_WITH_UPDATE_REF"; A2 = "REPLACE_MIRROR_FETCH_WITH_STANDARD_REMOTE_TRACKING_REFSPEC"; A3 = "MAKE_NAVIGATOR_RESOLVE_CANONICAL_REPO_FROM_TCS_ROOT_POINTER"; A4 = "SYNC_ALLOWLISTED_LIGHTHOUSE_MIRROR"; A5 = "RUN_TESTS_AND_FAST_FORWARD_PUBLISH_THROUGH_FINALIZER"; }
invariants { I1 = "DO_NOT_CREATE_OLD_WORKSPACE_COPY"; I2 = "REMOTE_DELETION_MUST_NOT_DELETE_LOCAL_BRANCH_REFS"; I3 = "HISTORICAL_REPOSITORY_URLS_REMAIN_HISTORY_ONLY"; I4 = "PRIVATE_MEMORY_NOT_INCLUDED_IN_PUBLIC_MIRROR"; I5 = "PUBLISH_REQUIRES_CLEAN_MAIN_EXACT_REMOTE_ANCESTRY_TESTS_AND_READBACK"; }
acceptance { required = ["TCS_COMPILE_PASS", "NAVIGATOR_7_OF_7_PASS", "SHARED_MIRROR_IN_SYNC", "CANONICAL_OFFLINE_PATH_EXISTS", "STANDARD_REFSPEC_READBACK", "FULL_TEST_PASS", "REMOTE_MAIN_EXACT_SHA_READBACK"]; deployment = "NOT_IMPLIED"; }
}

View file

@ -10,9 +10,25 @@ import subprocess
from pathlib import Path
SCRIPT_PATH = Path(__file__).resolve()
REPO_ROOT = SCRIPT_PATH.parents[4]
SHARED_ROOT = SCRIPT_PATH.parents[3]
if (REPO_ROOT / "routing" / "lighthouse-path-registry.json").is_file():
LOCAL_SOURCE_ROOT = SCRIPT_PATH.parents[3]
RUNTIME_ROOT = Path("/Volumes/JZAO/HoloLake/persona-runtime")
POINTER = RUNTIME_ROOT / "TCS-ROOT.json"
SHARED_ROOT = RUNTIME_ROOT / "shared"
def canonical_repo_root() -> Path | None:
if (LOCAL_SOURCE_ROOT / "routing" / "lighthouse-path-registry.json").is_file():
return LOCAL_SOURCE_ROOT
if POINTER.is_file() and not POINTER.is_symlink():
value = json.loads(POINTER.read_text(encoding="utf-8"))
candidate = Path(value.get("canonical_repo", ""))
if (candidate / "routing" / "lighthouse-path-registry.json").is_file():
return candidate
return None
REPO_ROOT = canonical_repo_root()
if REPO_ROOT:
DEFAULT_LIGHTHOUSE = REPO_ROOT / "routing" / "lighthouse-path-registry.json"
DEFAULT_HOST_MAP = REPO_ROOT / "routing" / "host-skill-navigation-map.json"
else:

View file

@ -11,8 +11,25 @@ import shutil
import subprocess
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[4]
DEFAULT_TARGET = Path("/Volumes/JZAO/HoloLake/persona-runtime/shared")
SCRIPT_PATH = Path(__file__).resolve()
LOCAL_SOURCE_ROOT = SCRIPT_PATH.parents[3]
RUNTIME_ROOT = Path("/Volumes/JZAO/HoloLake/persona-runtime")
POINTER = RUNTIME_ROOT / "TCS-ROOT.json"
def canonical_repo_root() -> Path:
if (LOCAL_SOURCE_ROOT / "routing" / "lighthouse-path-registry.json").is_file():
return LOCAL_SOURCE_ROOT
if POINTER.is_file() and not POINTER.is_symlink():
value = json.loads(POINTER.read_text(encoding="utf-8"))
candidate = Path(value.get("canonical_repo", ""))
if (candidate / "routing" / "lighthouse-path-registry.json").is_file():
return candidate
raise RuntimeError("CANONICAL_REPO012_UNAVAILABLE")
REPO_ROOT = canonical_repo_root()
DEFAULT_TARGET = RUNTIME_ROOT / "shared"
ASSETS = {
"routing/lighthouse-path-registry.json": "registries/lighthouse-path-registry.json",
"routing/host-skill-navigation-map.json": "registries/host-skill-navigation-map.json",

View file

@ -18,6 +18,11 @@ class LighthouseNavigatorTests(unittest.TestCase):
self.assertIn("finalize-development.mjs", route["intent"]["executor"])
self.assertFalse(route["authority_granted"])
self.assertFalse(route["transport_probe"]["secret_read"])
self.assertEqual(
route["target"]["offline"],
"/Volumes/JZAO/HoloLake/persona-runtime/repo-012-main",
)
self.assertTrue(route["offline_reality"]["exists"])
def test_qoder_and_qoderwork_resolve_same_brain_with_distinct_adapters(self):
qoder = compile_route(self.registry, self.host_map, "qoder-cn", "大脑思维技能包")