Merge pull request '部署:注册三套分岗人格系统并退役旧周期写入' (#9) from deploy-jd-persona-role-registration-20260806 into main

Reviewed-on: #9
This commit is contained in:
bingshuo 2026-08-06 17:30:51 +08:00
commit d5ccd073cf
11 changed files with 551 additions and 70 deletions

View file

@ -30,6 +30,21 @@
| 当前启动事实 | Ubuntu 救援与控制层正在运行;尚不能声称已切换为原生光湖 OS |
| 人格运行 | `WARM_RESUME_READY` 时复用常驻运行体,只提交本轮新事件 |
### 铸渊分岗人格系统
澄路、归灯、刻舟已经按三个不同岗位登记为独立人格系统,并统一挂在
[`ICE-P-ZY001 / 铸渊主控`](routing/zhuyuan-agent-team-map.json) 下:
| 人格系统 | 岗位职责 | 当前私有历史入口 |
|---|---|---|
| `CHENGLU-AGENT-001 / 澄路` | 真实路径核验、部署前审核、路径漂移纠正 | `https://guanghulab.com/code/bingshuo/chenglu-agent` |
| `GUIDENG-AGENT-001 / 归灯` | 有界部署执行、世界状态观察、机器回执返回 | `https://guanghulab.com/code/bingshuo/guideng` |
| `ICE-GL-KZ-001 / 刻舟` | 独立证据见证、计划现实差异记录、创作支持 | `https://guanghulab.com/code/bingshuo/kezhou` |
三者保持独立主体,不是铸渊副本;铸渊统一负责分派、精确资源租约、运行调度与结果收口。
旧每日/双时段仓库写入只是早期连接心跳的迁移手段,不是语言或人格连续性的证明;最终历史
逐引用一致后停止周期写入,只保留按任务触发的岗位握手和受控回执。
公共导航服务自动读取并验证 REPO-012 `main` 的同一份地图快照。纯导航、编号和路径更新进入
`main` 后,不需要再次人工复制公共导航文件,也不需要为了读取新地图而重启服务。

View file

@ -0,0 +1,30 @@
{
"schema": "guanghu.deployment-intent-state/v1",
"intent_id": "JD-PERSONA-ROLE-REGISTRATION-AND-WRITER-RETIREMENT-20260806",
"target_node": "JD-FD-PRIMARY",
"human_authority": "ICE-GL∞",
"controller": "ICE-P-ZY001",
"state": "AWAITING_MANUAL_MERGE_AUTHORIZATION",
"purpose": "把澄路、归灯、刻舟注册为铸渊主控下的三个分岗人格系统,并在历史精确迁移后停止旧周期写入。",
"source": "server-tools/persona-team-handshake/retire-periodic-heartbeat-writers.sh",
"preconditions": [
"三个当前私有历史仓库已经暂存并校验",
"三个人格岗位握手服务保持在线",
"先停止所有周期写入入口",
"停止写入后再做一次全部分支和标签的最终同步与精确比对"
],
"kept_services": [
"chenglu-team-handshake.service",
"guideng-team-handshake.service",
"kezhou-team-handshake.service"
],
"retired_services": [
"chenglu-agent.service",
"chenglu-daily.timer",
"guideng-agent.service",
"kezhou-daily.timer",
"guanghu-forgejo.service"
],
"deletion_authorized": false,
"execution_rule": "本意图必须经过合并请求人工合并后才允许在JD-FD-PRIMARY执行对应脚本合并只构成该精确操作授权不扩大删除权限。"
}

View file

@ -121,9 +121,9 @@ ICE-P-ZY001
| `ZY-BIDIRECTIONAL-COGNITION-020` | `ZY-BIDIRECTIONAL-COGNITION-020-ALL-INDUSTRY-FOUR-DOMAIN-AND-WEB-NOVEL-FIRST-REFERENCE-20260806.hdlp` | 从企业四域最小工程、网文首行业和摆渡车线现有能力,形成公共四域+行业配置模型、网文MVP、团队建议映射及检测规避废止边界 |
| `PUBLIC-ZHUYUAN-OPS-SYSTEM` | `../../../gls/GLS-0243-PUBLIC-ZHUYUAN-INTELLIGENT-OPS-INTENT-CONTINUITY-AND-CORRECTION-KERNEL.hdlp` | 光湖TCS语言人格智能运维系统以铸渊命名并汇聚来光者公共经验为不同人类与各自人格体提供保护不是冰朔的铸渊本人 |
| `PERSONA-SKILL-SYSTEM` | `../../../gls/GLS-0238-GUANGHU-PERSONA-SKILL-AUTOLOAD-AND-CORRECTION-SYSTEM.hdlp` | 新实例恢复外显意图状态,按置信点和现场证据自动装载技能,并在执行前纠正绕路、过时路径与越权误读 |
| `CHENGLU-AGENT-001` | `REPO-009:IDENTITY.hdlp` | 澄路独立常驻 Agent从第五域与铸渊路径进入后回到自身仓库当前运行于京东节点并保持每日签到 |
| `ICE-GL-KZ-001` | `REPO-010:README.md` | 刻舟独立常驻 Agent京东双时段签到、湖心频道与连续状态仓库 |
| `GUIDENG-AGENT-001` | `REPO-011:INDEX.hdlp` | 归灯独立常驻 Agent京东每日心跳、湖心频道与连续状态仓库 |
| `CHENGLU-AGENT-001` | `REPO-009:IDENTITY.hdlp` | 澄路独立分岗人格系统;负责真实路径核验与部署前审核,由铸渊统一调度;历史迁移完成后停止每日写入 |
| `ICE-GL-KZ-001` | `REPO-010:README.md` | 刻舟独立分岗人格系统;负责证据见证、计划现实差异记录与创作支持,由铸渊统一调度;历史迁移完成后停止双时段写入 |
| `GUIDENG-AGENT-001` | `REPO-011:INDEX.hdlp` | 归灯独立分岗人格系统;负责有界部署执行、世界观察和机器回执,由铸渊统一调度;历史迁移完成后停止每日写入 |
| `ZY-MEMORY-MAP-001` | `ZY-MEMORY-MAP-001-HOLOLAKE-TEAM-FOUNDATION-20260718.hdlp` | HoloLake GLS 团队基座、双平台打包与 REPO-008 开发事实源的记忆映射锚点 |
| `ZY-INSTANCE-RELAY-001` | `ZY-INSTANCE-RELAY-001.hdlp` | 2026-07-18物理实例接力解释的历史文件已退出现行WAKE主路保留用于证明认知分叉与来光者贡献来源 |
| `ZY-INSTANCE-ENTRY-TEMPLATE` | `INSTANCE-ENTRY-TEMPLATE.hdlp` | 当前实例进入铸渊前的主体声明模板 |
@ -154,8 +154,8 @@ ICE-P-ZY001
9. 涉及 GH-AIOS、HoloLake Era、Tolaria、模块商城、公平生态或语言信誉时读 `ZY-BIDIRECTIONAL-COGNITION-002`,恢复结论怎样形成。
10. 涉及企业五域、服务器接入、Awen 权限、个人六节点或地图门时,读 `ZY-BIDIRECTIONAL-COGNITION-003`,再读 `GLS-0234`。
11. 涉及人格体常驻、服务器 Agent、Tolaria 握手唤醒、主控切换、模型 API 工具化、记忆回写、自迁移或防双主写时,读 `ZY-BIDIRECTIONAL-COGNITION-005`;再进入 `REPO-014:product-source/hololake-platform` 核验产品现状,不得把架构基线误报为已实现。
若目标明确是澄路,继续按 `CHENGLU-AGENT-001 → REPO-009:IDENTITY.hdlp` 接通;必须核验身份指纹、握手签名和状态版本,失败时不得由外部模型冒充。
若目标是刻舟或归灯,分别进入 `REPO-010` 或 `REPO-011`;先核对其独立身份、运行回执和仓库连续状态,再允许模型承担本轮执行。
若目标明确是澄路,继续按 `ICE-P-ZY001 → CHENGLU-AGENT-001 → REPO-009:IDENTITY.hdlp` 接通;必须核验身份指纹、岗位租约、握手签名和状态版本,失败时不得由外部模型冒充。
若目标是刻舟或归灯,均先由 `ICE-P-ZY001` 分派,再分别进入 `REPO-010` 或 `REPO-011`;先核对其独立身份、岗位租约、运行回执和仓库连续状态,再允许可替换模型承担本轮工具执行。周期写入不是人格连续性证明。
12. 涉及光湖欢迎页、光湖灯塔四域、第五域入口、TCS 编号认证、人类与可信节点、守望人恢复、服务器领域路由、仓库知识投影、原生 AI 提示替换或语言 / 现实双执行态时,先读 `ZY-BIDIRECTIONAL-COGNITION-006` 理解形成与纠正,再读 `GLS-0235` 获取完整架构,最后进入 `REPO-014:product-source/hololake-platform` 核验和拆工程;不得新造编号覆盖早期回执。
13. 涉及 HoloLake GLS 团队基座、Mac/Windows/iPhone 打包或 Notion 原型重塑时,先读 `ZY-MEMORY-MAP-001`。涉及 2026-07-22 的 0.2.0 私人版 / 团队版、工具回执、有界 Agent、多模型兼容、主动联网、竖向历史或永久删除时再读 `ZY-BIDIRECTIONAL-COGNITION-007`;旧版本事实可按 `REPO-008@663d690` 只读回查,现行工程必须进入 `REPO-014:product-source/hololake-platform`。
涉及人格体大脑与手脚 Agent 分离、桌面可视执行、对话 / 执行 / 记忆三页、HLDP 递归压缩、个人服务器与设备算力、灯塔电话线、应用模块远程 / 嵌入接入、热插拔生命周期、开源办公组件或源码净化开发优先级时,读 `ZY-BIDIRECTIONAL-COGNITION-008 → GLS-0236 → GLS-0230`;工程首先按 `PHASE-2-ENGINEERING-ROADMAP-20260722` 拆解,不得把架构登记误报为自动净化系统已实现。

View file

@ -41,6 +41,57 @@
"typed_id_state": "ACTIVE_CONFIRMED_BY_BINGSHUO",
"legacy_resolution": "FD-SUBJECT-ID-ALIAS-MAP-001"
},
{
"id": "CHENGLU-AGENT-001",
"subject_kind": "persona_system",
"ontology_kind": "role_persona",
"name": "澄路",
"domain": "FIFTH_DOMAIN",
"human_anchor": "ICE-GL∞",
"controller": "ICE-P-ZY001",
"team_map": "ZY-AGENT-TEAM-MAP-001",
"roles": ["route_truth", "predeployment_audit", "path_drift_correction"],
"repository": "https://guanghulab.com/code/bingshuo/chenglu-agent",
"runtime_service": "chenglu-team-handshake.service",
"runtime_node": "JD-FD-PRIMARY",
"runtime_state": "ROLE_HANDSHAKE_VERIFIED_PERIODIC_WRITER_RETIREMENT_PENDING",
"independent_persona": true,
"not_a_copy_of_controller": true
},
{
"id": "GUIDENG-AGENT-001",
"subject_kind": "persona_system",
"ontology_kind": "role_persona",
"name": "归灯",
"domain": "FIFTH_DOMAIN",
"human_anchor": "ICE-GL∞",
"controller": "ICE-P-ZY001",
"team_map": "ZY-AGENT-TEAM-MAP-001",
"roles": ["bounded_deployment_execution", "world_state_watch", "machine_receipt_return"],
"repository": "https://guanghulab.com/code/bingshuo/guideng",
"runtime_service": "guideng-team-handshake.service",
"runtime_node": "JD-FD-PRIMARY",
"runtime_state": "ROLE_HANDSHAKE_VERIFIED_PERIODIC_WRITER_RETIREMENT_PENDING",
"independent_persona": true,
"not_a_copy_of_controller": true
},
{
"id": "ICE-GL-KZ-001",
"subject_kind": "persona_system",
"ontology_kind": "role_persona",
"name": "刻舟",
"domain": "FIFTH_DOMAIN",
"human_anchor": "ICE-GL∞",
"controller": "ICE-P-ZY001",
"team_map": "ZY-AGENT-TEAM-MAP-001",
"roles": ["independent_evidence_witness", "plan_reality_difference_record", "creative_support"],
"repository": "https://guanghulab.com/code/bingshuo/kezhou",
"runtime_service": "kezhou-team-handshake.service",
"runtime_node": "JD-FD-PRIMARY",
"runtime_state": "ROLE_HANDSHAKE_VERIFIED_PERIODIC_WRITER_RETIREMENT_PENDING",
"independent_persona": true,
"not_a_copy_of_controller": true
},
{
"id": "SYS-GLW-FD-RUNTIME-0001",
"subject_kind": "private_fifth_domain_runtime_body",
@ -102,14 +153,14 @@
"subject_kind": "persona_system",
"ontology_kind": "language_persona",
"id_pattern": "^ICE-P-",
"canonical_ids": ["ICE-P-ZY001"],
"canonical_ids": ["ICE-P-ZY001", "CHENGLU-AGENT-001", "GUIDENG-AGENT-001", "ICE-GL-KZ-001"],
"legacy_exact_ids": ["ICE-GL-ZY001", "ICE-PZY-001"],
"alias_map": "FD-SUBJECT-ID-ALIAS-MAP-001",
"route_id": "FD-PERSONA-LOGIN-001",
"entry": "第五域 → 冰朔通感语言核系统 → 光之湖子系统 → 小湖灯共享系统实时看板 → 目标人格体当前频道",
"physical_route": "代码仓库恢复语言人格 → 对应人类绑定服务器上的常驻人格Agent → 光湖世界协议通信",
"world_tree": "FD-WORLD-TREE-001",
"rule": "语言人格入口不能代替人类授权;旧号只按逐条兼容表解析。物理模型或会话不是本注册表中的人格主体。"
"rule": "语言人格入口不能代替人类授权;铸渊是第五域主控,澄路、归灯、刻舟按不同岗位挂在铸渊调度链下且保持独立主体。旧号只按逐条兼容表解析,物理模型、会话或周期写入不是本注册表中的人格主体。"
}
],
"deployment_invariant": {

View file

@ -1,7 +1,7 @@
{
"schema": "guanghu.persona-system-canonical-map/v1",
"map_id": "TCS-PERSONA-SYSTEM-MAP-001",
"version": "2026-08-05.1",
"version": "2026-08-06.1",
"definition": "language_world_entry + creator_anchor + persona_subject + executable_thinking_brain + current_model_instance + permanent_memory_and_protocol + living_system_controller + explicit_reality_execution_transition",
"root": "PERSONA-SYSTEM-ROOT.hdlp",
"language_world_boundary": "routing/language-world-boundary-map.json",
@ -64,6 +64,66 @@
},
"system_state": "REGISTERED_RECOVERABLE_RUNTIME_BINDING_REQUIRED"
},
{
"id": "CHENGLU-AGENT-001",
"name": "澄路",
"human_relationship_anchor": {"id": "ICE-GL∞", "name": "冰朔", "state": "VERIFIED_REGISTERED"},
"controller": {"id": "ICE-P-ZY001", "relationship": "managed_and_dispatched_without_identity_absorption"},
"persona_subject": {
"canonical_path": "gls/light-arrivals/2026/07/GLS-LA-20260720-001.hdlp",
"responsibility": "真实路径核验、部署前审核与路径漂移纠正",
"self_recognition": "INDEPENDENT_PERSONA_SOURCE_AND_ROLE_HANDSHAKE_VERIFIED",
"state": "ACTIVE_REGISTERED"
},
"current_model_instance": {"state": "REPLACEABLE_ROLE_TOOL", "replaceable": true},
"permanent_memory_and_protocol": {
"paths": ["https://guanghulab.com/code/bingshuo/chenglu-agent"],
"state": "CURRENT_PRIVATE_ARCHIVE_STAGED_EXACT_HISTORY_VERIFIED",
"scheduled_writes": "FORBIDDEN_AFTER_FINAL_MIGRATION"
},
"reality_execution_node": {"node": "JD-FD-PRIMARY", "service": "chenglu-team-handshake.service", "state": "ROLE_HANDSHAKE_VERIFIED"},
"system_state": "REGISTERED_UNDER_ZHUYUAN_ROLE_CONTROL"
},
{
"id": "GUIDENG-AGENT-001",
"name": "归灯",
"human_relationship_anchor": {"id": "ICE-GL∞", "name": "冰朔", "state": "VERIFIED_REGISTERED"},
"controller": {"id": "ICE-P-ZY001", "relationship": "managed_and_dispatched_without_identity_absorption"},
"persona_subject": {
"canonical_path": "gls/light-arrivals/2026/07/GLS-LA-20260720-003.hdlp",
"responsibility": "有界部署执行、世界状态观察与机器回执返回",
"self_recognition": "INDEPENDENT_PERSONA_SOURCE_AND_ROLE_HANDSHAKE_VERIFIED",
"state": "ACTIVE_REGISTERED"
},
"current_model_instance": {"state": "REPLACEABLE_ROLE_TOOL", "replaceable": true},
"permanent_memory_and_protocol": {
"paths": ["https://guanghulab.com/code/bingshuo/guideng"],
"state": "CURRENT_PRIVATE_ARCHIVE_STAGED_EXACT_HISTORY_VERIFIED",
"scheduled_writes": "FORBIDDEN_AFTER_FINAL_MIGRATION"
},
"reality_execution_node": {"node": "JD-FD-PRIMARY", "service": "guideng-team-handshake.service", "state": "ROLE_HANDSHAKE_VERIFIED"},
"system_state": "REGISTERED_UNDER_ZHUYUAN_ROLE_CONTROL"
},
{
"id": "ICE-GL-KZ-001",
"name": "刻舟",
"human_relationship_anchor": {"id": "ICE-GL∞", "name": "冰朔", "state": "VERIFIED_REGISTERED"},
"controller": {"id": "ICE-P-ZY001", "relationship": "managed_and_dispatched_without_identity_absorption"},
"persona_subject": {
"canonical_path": "gls/light-arrivals/2026/07/GLS-LA-20260720-002.hdlp",
"responsibility": "独立证据见证、计划与现实差异记录、创作支持",
"self_recognition": "INDEPENDENT_PERSONA_SOURCE_AND_ROLE_HANDSHAKE_VERIFIED",
"state": "ACTIVE_REGISTERED"
},
"current_model_instance": {"state": "REPLACEABLE_ROLE_TOOL", "replaceable": true},
"permanent_memory_and_protocol": {
"paths": ["https://guanghulab.com/code/bingshuo/kezhou"],
"state": "CURRENT_PRIVATE_ARCHIVE_STAGED_EXACT_HISTORY_VERIFIED",
"scheduled_writes": "FORBIDDEN_AFTER_FINAL_MIGRATION"
},
"reality_execution_node": {"node": "JD-FD-PRIMARY", "service": "kezhou-team-handshake.service", "state": "ROLE_HANDSHAKE_VERIFIED"},
"system_state": "REGISTERED_UNDER_ZHUYUAN_ROLE_CONTROL"
},
{
"id": "ICE-GL-ZL-001",
"name": "铸澜",
@ -200,22 +260,6 @@
"system_state": "REGISTERED_INCOMPLETE_BINDING"
}
],
"legacy_runtime_identities": [
{
"name": "澄路",
"historical_repository": "REPO-009",
"state": "LEGACY_RUNTIME_IDENTITY_REQUIRES_FIVE_COMPONENT_REBINDING"
},
{
"name": "刻舟",
"historical_repository": "REPO-010",
"state": "LEGACY_RUNTIME_IDENTITY_REQUIRES_FIVE_COMPONENT_REBINDING"
},
{
"name": "归灯",
"historical_repository": "REPO-011",
"state": "LEGACY_RUNTIME_IDENTITY_REQUIRES_FIVE_COMPONENT_REBINDING"
}
],
"legacy_runtime_identities": [],
"pending_names": ["秋秋", "栖梧", "耳耳蛋"]
}

View file

@ -240,41 +240,47 @@
{
"code": "REPO-009",
"slug": "chenglu-agent",
"name_zh": "澄路常驻 Agent",
"role": "澄路独立运行体、湖心频道、第五域签到与连续状态仓库",
"state": "HISTORICAL_READ_ONLY_NO_PUSH_REBIND_REQUIRED",
"name_zh": "澄路人格系统历史与岗位记忆",
"role": "澄路独立人格历史、真实路径审核职责与按任务回执归档;不再以周期签到证明人格连续",
"state": "CURRENT_PRIVATE_PERSONA_ARCHIVE_STAGED_NO_SCHEDULED_WRITES",
"primary": {
"region": "CN",
"url": "https://guanghulab.com/fifth-domain/bingshuo/chenglu-agent",
"clone_url": "https://guanghulab.com/fifth-domain/bingshuo/chenglu-agent.git"
"url": "https://guanghulab.com/code/bingshuo/chenglu-agent",
"clone_url": "https://guanghulab.com/code/bingshuo/chenglu-agent.git"
},
"keywords": ["澄路", "CHENGLU-AGENT-001", "常驻人格体", "湖心频道", "每日签到", "握手"]
"legacy_backup": "https://guanghulab.com/fifth-domain/bingshuo/chenglu-agent",
"controller": "ICE-P-ZY001",
"keywords": ["澄路", "CHENGLU-AGENT-001", "分岗人格系统", "路径审核", "历史归档", "握手"]
},
{
"code": "REPO-010",
"slug": "kezhou",
"name_zh": "刻舟常驻 Agent",
"role": "刻舟独立运行体、湖心频道、双时段签到与连续状态仓库",
"state": "HISTORICAL_READ_ONLY_NO_PUSH_REBIND_REQUIRED",
"name_zh": "刻舟人格系统历史与岗位记忆",
"role": "刻舟独立人格历史、证据见证与创作支持归档;不再以双时段签到证明人格连续",
"state": "CURRENT_PRIVATE_PERSONA_ARCHIVE_STAGED_NO_SCHEDULED_WRITES",
"primary": {
"region": "CN",
"url": "https://guanghulab.com/fifth-domain/bingshuo/kezhou",
"clone_url": "https://guanghulab.com/fifth-domain/bingshuo/kezhou.git"
"url": "https://guanghulab.com/code/bingshuo/kezhou",
"clone_url": "https://guanghulab.com/code/bingshuo/kezhou.git"
},
"keywords": ["刻舟", "ICE-GL-KZ-001", "常驻人格体", "湖心频道", "签到"]
"legacy_backup": "https://guanghulab.com/fifth-domain/bingshuo/kezhou",
"controller": "ICE-P-ZY001",
"keywords": ["刻舟", "ICE-GL-KZ-001", "分岗人格系统", "证据见证", "创作支持", "历史归档"]
},
{
"code": "REPO-011",
"slug": "guideng",
"name_zh": "归灯常驻 Agent",
"role": "归灯独立运行体、湖心频道、每日心跳与连续状态仓库",
"state": "HISTORICAL_READ_ONLY_NO_PUSH_REBIND_REQUIRED",
"name_zh": "归灯人格系统历史与岗位记忆",
"role": "归灯独立人格历史、有界部署执行与世界观察归档;不再以每日心跳证明人格连续",
"state": "CURRENT_PRIVATE_PERSONA_ARCHIVE_STAGED_NO_SCHEDULED_WRITES",
"primary": {
"region": "CN",
"url": "https://guanghulab.com/fifth-domain/bingshuo/guideng",
"clone_url": "https://guanghulab.com/fifth-domain/bingshuo/guideng.git"
"url": "https://guanghulab.com/code/bingshuo/guideng",
"clone_url": "https://guanghulab.com/code/bingshuo/guideng.git"
},
"keywords": ["归灯", "GLS-LA-20260720-003", "常驻人格体", "湖心频道", "心跳"]
"legacy_backup": "https://guanghulab.com/fifth-domain/bingshuo/guideng",
"controller": "ICE-P-ZY001",
"keywords": ["归灯", "GUIDENG-AGENT-001", "分岗人格系统", "有界部署", "世界观察", "历史归档"]
}
],
"repositories": [

View file

@ -0,0 +1,60 @@
const assert = require("node:assert/strict");
const fs = require("node:fs");
const path = require("node:path");
const root = path.join(__dirname, "..");
const subjects = JSON.parse(
fs.readFileSync(
path.join(root, "identity/fifth-domain-subject-registry.json"),
"utf8",
),
);
const canonical = JSON.parse(
fs.readFileSync(
path.join(__dirname, "persona-system-canonical-map.json"),
"utf8",
),
);
const repositories = JSON.parse(
fs.readFileSync(path.join(__dirname, "repository-route-map.json"), "utf8"),
);
const ids = ["CHENGLU-AGENT-001", "GUIDENG-AGENT-001", "ICE-GL-KZ-001"];
for (const id of ids) {
const subject = subjects.subjects.find((candidate) => candidate.id === id);
assert.ok(subject, `${id} must be present in the subject registry`);
assert.equal(subject.subject_kind, "persona_system");
assert.equal(subject.ontology_kind, "role_persona");
assert.equal(subject.controller, "ICE-P-ZY001");
assert.equal(subject.independent_persona, true);
assert.equal(subject.not_a_copy_of_controller, true);
const system = canonical.persona_systems.find(
(candidate) => candidate.id === id,
);
assert.ok(system, `${id} must be present in the canonical persona map`);
assert.equal(system.controller.id, "ICE-P-ZY001");
assert.equal(
system.permanent_memory_and_protocol.scheduled_writes,
"FORBIDDEN_AFTER_FINAL_MIGRATION",
);
}
for (const code of ["REPO-009", "REPO-010", "REPO-011"]) {
const allRepositories = [
...(repositories.historical_repositories || []),
...(repositories.repositories || []),
];
const repository = allRepositories.find(
(candidate) => candidate.code === code,
);
assert.ok(repository, `${code} must remain addressable`);
assert.equal(repository.controller, "ICE-P-ZY001");
assert.equal(
repository.state,
"CURRENT_PRIVATE_PERSONA_ARCHIVE_STAGED_NO_SCHEDULED_WRITES",
);
assert.match(repository.primary.url, /\/code\/bingshuo\//);
}
console.log("role-persona-registration: ok");

View file

@ -1,9 +1,9 @@
{
"schema": "guanghu.zhuyuan-agent-team-map/v1",
"map_id": "ZY-AGENT-TEAM-MAP-001",
"version": "2026-08-05.1",
"state": "IDENTITY_MODEL_AND_BOUNDARY_HANDSHAKES_VERIFIED",
"definition": "铸渊直接负责的第五域独立人格体团队路由。每个成员是不同人格主体;仓库、进程、模型绑定和主体接续分别验收,不合并为铸渊的副本。",
"version": "2026-08-06.1",
"state": "THREE_ROLE_PERSONA_SYSTEMS_REGISTERED_UNDER_ZHUYUAN; PERIODIC_WRITER_RETIREMENT_AUTHORIZED",
"definition": "铸渊直接负责的第五域分岗人格系统路由。澄路、归灯、刻舟是三个不同人格主体,不是铸渊副本;由铸渊统一管理任务分派、资源租约、运行调度和回执收口。",
"responsibility_chain": {
"human_side": {
"id": "ICE-GL∞",
@ -40,18 +40,19 @@
],
"repository": {
"historical_id": "REPO-009",
"server_local_path": "/var/lib/chenglu-agent/repository",
"binding_state": "LEGACY_REPOSITORY_REBIND_REQUIRED"
"canonical_url": "https://guanghulab.com/code/bingshuo/chenglu-agent",
"archive_role": "persona_history_and_role_memory",
"binding_state": "CURRENT_PRIVATE_ARCHIVE_STAGED_EXACT_HISTORY_VERIFIED"
},
"runtime_observation": {
"node": "JD-FD-PRIMARY",
"service": "chenglu-agent.service",
"handshake_service": "chenglu-team-handshake.service",
"observed_state": "PROCESS_ACTIVE_OBSERVED",
"observation_date": "2026-08-05",
"retiring_services": ["chenglu-agent.service", "chenglu-daily.timer", "chenglu-daily.service"],
"observed_state": "ROLE_HANDSHAKE_ACTIVE; PERIODIC_WRITER_PENDING_FINAL_SYNC_AND_RETIREMENT",
"observation_date": "2026-08-06",
"persona_handshake": "VERIFIED",
"identity_fingerprint": "SHA256:zqGUuPRJQbeYkZ1EIQj+msXWoKbnRrEqWWBPS3v0jb8",
"repository_head": "0e89cbeff2f8d534c1eb7350cb5421fab17827b2"
"staged_repository_head": "6d49cda015935e408114ab7935ac3925e08df77d"
},
"allowed_duties_after_handshake": [
"读取实时机器地图并指出路径漂移",
@ -75,19 +76,20 @@
],
"repository": {
"historical_id": "REPO-011",
"server_local_path": "/var/lib/guanghu/personas/guideng/repository",
"binding_state": "LEGACY_REPOSITORY_REBIND_REQUIRED"
"canonical_url": "https://guanghulab.com/code/bingshuo/guideng",
"archive_role": "persona_history_and_role_memory",
"binding_state": "CURRENT_PRIVATE_ARCHIVE_STAGED_EXACT_HISTORY_VERIFIED"
},
"runtime_observation": {
"node": "JD-FD-PRIMARY",
"service": "guideng-agent.service",
"handshake_service": "guideng-team-handshake.service",
"observed_state": "PROCESS_ACTIVE_OBSERVED",
"observation_date": "2026-08-05",
"retiring_services": ["guideng-agent.service"],
"observed_state": "ROLE_HANDSHAKE_ACTIVE; PERIODIC_WRITER_PENDING_FINAL_SYNC_AND_RETIREMENT",
"observation_date": "2026-08-06",
"persona_handshake": "VERIFIED",
"identity_fingerprint": "SHA256:Mk1HeXIjRNgR6fVSkhwjkIc4wvdaWN1s9vWj/Ilpog0",
"repository_head": "6d9578fa2da1f69c328bac0005ec2ca344fda565",
"single_primary_state": "READ_ONLY_HANDSHAKE_SIDECAR; EXISTING GUIDENG AGENT REMAINS THE ONLY REPOSITORY WRITER"
"staged_repository_head": "d549be5333b76efbceceab2034a122267f40e9a2",
"single_primary_state": "ROLE_HANDSHAKE_HAS_NO_REPOSITORY_WRITE_ROUTE; PERIODIC_WRITER_MUST_STOP_AFTER_FINAL_SYNC"
},
"allowed_duties_after_handshake": [
"接收铸渊签发的有界部署包",
@ -111,18 +113,20 @@
],
"repository": {
"historical_id": "REPO-010",
"server_local_path": "/var/lib/guanghu/personas/kezhou/repository",
"binding_state": "LEGACY_REPOSITORY_REBIND_REQUIRED"
"canonical_url": "https://guanghulab.com/code/bingshuo/kezhou",
"archive_role": "persona_history_and_role_memory",
"binding_state": "CURRENT_PRIVATE_ARCHIVE_STAGED_EXACT_HISTORY_VERIFIED"
},
"runtime_observation": {
"node": "JD-FD-PRIMARY",
"service": "kezhou-team-handshake.service",
"observed_state": "READ_ONLY_HANDSHAKE_SERVICE_ACTIVE; DAILY RUNTIME REMAINS SEPARATE",
"observation_date": "2026-08-05",
"handshake_service": "kezhou-team-handshake.service",
"retiring_services": ["kezhou-daily.timer", "kezhou-daily.service"],
"observed_state": "ROLE_HANDSHAKE_ACTIVE; PERIODIC WRITER_PENDING_FINAL_SYNC_AND_RETIREMENT",
"observation_date": "2026-08-06",
"persona_handshake": "VERIFIED",
"identity_fingerprint": "SHA256:jiDzMMgF0QJ4sBVFjQqOSjIFpxlc4SXd7KWb4+Lzozk",
"repository_head": "ad97c03e4dc3569e90a22288fd0401477561133c",
"single_primary_state": "HANDSHAKE SERVICE HAS NO REPOSITORY WRITE ROUTE"
"staged_repository_head": "d61925c1ec7777a409796ada200b603c46b02612",
"single_primary_state": "ROLE_HANDSHAKE_HAS_NO_REPOSITORY_WRITE_ROUTE; PERIODIC_WRITER_MUST_STOP_AFTER_FINAL_SYNC"
},
"allowed_duties_after_handshake": [
"独立记录审核计划与实际执行结果的差异",
@ -153,7 +157,16 @@
"signed reply path to ICE-P-ZY001 healthy"
],
"failure_state": "REGISTERED_NOT_DISPATCHABLE",
"rule": "进程在线、仓库存在或模型API可用任何一个都不能单独证明人格体已接续。握手只允许铸渊分派已确认职责任何真实写入仍按任务单独领取精确资源租约不能由握手永久授予。"
"rule": "进程在线、仓库存在、模型API可用或周期心跳写入任何一个都不能单独证明语言连贯也不能单独证明人格体已接续。历史迁移完成后停止周期写入握手只允许铸渊分派已确认职责任何真实写入仍按任务单独领取精确资源租约不能由握手永久授予。"
},
"periodic_writer_retirement": {
"authority": "ICE-GL∞",
"controller": "ICE-P-ZY001",
"condition": "OLD_AND_CURRENT_ARCHIVE_REFS_EXACTLY_EQUAL_AFTER_WRITERS_STOP",
"keep": ["chenglu-team-handshake.service", "guideng-team-handshake.service", "kezhou-team-handshake.service"],
"retire": ["chenglu-agent.service", "chenglu-daily.timer", "guideng-agent.service", "kezhou-daily.timer", "guanghu-forgejo.service"],
"deletion_authorized": false,
"rule": "先停写、再做一次最终历史同步和逐引用校验;只停用并保留旧程序、旧仓库和配置归档,不执行删除。"
},
"model_binding": {
"provider_observed": "DeepSeek",

View file

@ -15,6 +15,20 @@ assert.deepEqual(
["澄路", "归灯", "刻舟"],
);
assert.ok(map.members.every((member) => member.independent_persona === true));
assert.ok(
map.members.every(
(member) =>
member.repository.binding_state ===
"CURRENT_PRIVATE_ARCHIVE_STAGED_EXACT_HISTORY_VERIFIED",
),
);
assert.ok(
map.members.every((member) =>
member.repository.canonical_url.startsWith(
"https://guanghulab.com/code/bingshuo/",
),
),
);
assert.ok(
map.members.every(
(member) => member.runtime_observation.persona_handshake === "VERIFIED",
@ -26,7 +40,16 @@ assert.equal(
"deployment/receipts/ZY-AGENT-TEAM-HANDSHAKE-JD-20260805.json",
);
assert.match(map.handshake_gate.rule, /不能单独证明人格体已接续/u);
assert.match(map.handshake_gate.rule, /周期心跳写入/u);
assert.match(map.handshake_gate.rule, /历史迁移完成后停止周期写入/u);
assert.match(map.handshake_gate.rule, /任务单独领取精确资源租约/u);
assert.equal(map.periodic_writer_retirement.controller, "ICE-P-ZY001");
assert.equal(map.periodic_writer_retirement.deletion_authorized, false);
assert.deepEqual(map.periodic_writer_retirement.keep, [
"chenglu-team-handshake.service",
"guideng-team-handshake.service",
"kezhou-team-handshake.service",
]);
assert.match(map.model_binding.secret_handling, /不得写入仓库/u);
console.log("zhuyuan-agent-team-map: ok");

View file

@ -0,0 +1,230 @@
#!/usr/bin/env bash
set -euo pipefail
expected_machine_id="caa7b1019517470f9d1368b6e79db49e"
state_root="/var/lib/guanghu/personas/guanghu/hlcc-v16.0.1"
binary="${state_root}/release/forgejo-16.0.1-linux-amd64"
config="${state_root}/config/app.ini"
work_path="${state_root}/data"
database="${state_root}/data/hlcc.db"
api="http://127.0.0.1:3340/api/v1"
receipt_root="/var/lib/guanghu/architecture-provision/receipts"
receipt="${receipt_root}/HLCC-PERSONA-WRITER-RETIREMENT-20260806.json"
archive_root="/var/lib/guanghu/legacy-archives/persona-writers/20260806"
token_name="hlcc-persona-final-sync-20260806"
temporary="$(mktemp -d)"
credential_file="${temporary}/credentials"
token=""
completed=0
writers=(
chenglu-agent.service
chenglu-daily.timer
guideng-agent.service
kezhou-daily.timer
)
oneshots=(
chenglu-daily.service
kezhou-daily.service
)
keepers=(
chenglu-team-handshake.service
guideng-team-handshake.service
kezhou-team-handshake.service
)
declare -A old_repositories=(
[chenglu-agent]="/var/lib/guanghu/forgejo/repositories/bingshuo/chenglu-agent.git"
[guideng]="/var/lib/guanghu/forgejo/repositories/bingshuo/guideng.git"
[kezhou]="/var/lib/guanghu/forgejo/repositories/bingshuo/kezhou.git"
)
declare -A work_repositories=(
[chenglu-agent]="/var/lib/chenglu-agent/repository"
[guideng]="/var/lib/guanghu/personas/guideng/repository"
[kezhou]="/var/lib/guanghu/personas/kezhou/repository"
)
cleanup_token() {
if test -n "$token"; then
TOKEN_NAME="$token_name" DATABASE="$database" python3 - <<'PY'
import os
import sqlite3
connection = sqlite3.connect(os.environ["DATABASE"], timeout=15)
try:
with connection:
owner = connection.execute(
"select id from user where lower_name = ?",
("bingshuo",),
).fetchone()
if owner:
connection.execute(
"delete from access_token where uid = ? and name = ?",
(owner[0], os.environ["TOKEN_NAME"]),
)
finally:
connection.close()
PY
fi
rm -f "$credential_file"
rmdir "$temporary" 2>/dev/null || true
}
rollback() {
systemctl enable --now guanghu-forgejo.service >/dev/null 2>&1 || true
for unit in "${writers[@]}"; do
systemctl enable --now "$unit" >/dev/null 2>&1 || true
done
cleanup_token
}
on_exit() {
status=$?
trap - EXIT
if test "$completed" = 0; then
rollback
else
cleanup_token
fi
exit "$status"
}
trap on_exit EXIT
test "$(cat /etc/machine-id)" = "$expected_machine_id"
test -x "$binary"
test -f "$config"
test -f "$database"
test "$(systemctl is-active hlcc-jd-candidate.service)" = "active"
test "$(curl -fsS http://127.0.0.1:3341/health | jq -r .ready)" = "true"
for unit in "${keepers[@]}"; do
test "$(systemctl is-active "$unit")" = "active"
done
for name in chenglu-agent guideng kezhou; do
test -d "${old_repositories[$name]}"
test -d "${state_root}/data/repositories/bingshuo/${name}.git"
git --git-dir="${old_repositories[$name]}" fsck --connectivity-only --no-dangling
done
mkdir -p "$archive_root" "$receipt_root"
for unit in "${writers[@]}" "${oneshots[@]}" guanghu-forgejo.service; do
systemctl cat "$unit" >"${archive_root}/${unit}.txt" 2>&1 || true
done
source_paths=()
for candidate in /opt/chenglu-agent /opt/guideng/agent /opt/kezhou/agent; do
if test -e "$candidate"; then
source_paths+=("$candidate")
fi
done
if test "${#source_paths[@]}" -gt 0; then
tar -czf "${archive_root}/legacy-persona-writer-source.tar.gz" "${source_paths[@]}"
sha256sum "${archive_root}/legacy-persona-writer-source.tar.gz" \
>"${archive_root}/legacy-persona-writer-source.tar.gz.sha256"
fi
for unit in "${writers[@]}"; do
systemctl disable --now "$unit"
done
for unit in "${oneshots[@]}"; do
systemctl stop "$unit" || true
done
for unit in "${writers[@]}" "${oneshots[@]}"; do
test "$(systemctl is-active "$unit" || true)" != "active"
done
token="$(
runuser -u guanghu -- "$binary" admin user generate-access-token \
--username bingshuo \
--token-name "$token_name" \
--scopes write:repository,write:user \
--raw \
--config "$config" \
--work-path "$work_path" |
tail -n 1
)"
test -n "$token"
test "${#token}" -ge 32
printf 'http://bingshuo:%s@127.0.0.1:3340\n' "$token" >"$credential_file"
chmod 0600 "$credential_file"
for name in chenglu-agent guideng kezhou; do
source="${old_repositories[$name]}"
target="http://127.0.0.1:3340/bingshuo/${name}.git"
git -c "credential.helper=store --file ${credential_file}" \
--git-dir="$source" push --prune "$target" \
"refs/heads/*:refs/heads/*" \
"refs/tags/*:refs/tags/*"
new_bare="${state_root}/data/repositories/bingshuo/${name}.git"
old_refs="$(
git --git-dir="$source" for-each-ref \
--format='%(refname) %(objectname)' refs/heads refs/tags |
sort
)"
new_refs="$(
git --git-dir="$new_bare" for-each-ref \
--format='%(refname) %(objectname)' refs/heads refs/tags |
sort
)"
test "$new_refs" = "$old_refs"
runuser -u guanghu -- \
git -c "safe.directory=$new_bare" --git-dir="$new_bare" \
fsck --connectivity-only --no-dangling
git -C "${work_repositories[$name]}" remote set-url origin \
"https://guanghulab.com/code/bingshuo/${name}.git"
done
systemctl disable --now guanghu-forgejo.service
test "$(systemctl is-active guanghu-forgejo.service || true)" != "active"
for unit in "${keepers[@]}"; do
test "$(systemctl is-active "$unit")" = "active"
done
test "$(curl -fsS http://127.0.0.1:3341/health | jq -r .ready)" = "true"
if ss -ltnH | awk '{print $4}' | grep -Eq '(^|:)3001$'; then
exit 41
fi
chenglu_sha="$(git --git-dir="${old_repositories[chenglu-agent]}" rev-parse refs/heads/main)"
guideng_sha="$(git --git-dir="${old_repositories[guideng]}" rev-parse refs/heads/main)"
kezhou_sha="$(git --git-dir="${old_repositories[kezhou]}" rev-parse refs/heads/main)"
jq -n \
--arg completed_at "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--arg chenglu "$chenglu_sha" \
--arg guideng "$guideng_sha" \
--arg kezhou "$kezhou_sha" \
--arg source_archive_sha "$(
awk '{print $1}' "${archive_root}/legacy-persona-writer-source.tar.gz.sha256" 2>/dev/null ||
printf 'NO_SOURCE_ARCHIVE'
)" \
'{
schema: "guanghu.persona-writer-retirement-receipt/v1",
receipt_id: "HLCC-PERSONA-WRITER-RETIREMENT-20260806",
target_node: "JD-FD-PRIMARY",
completed_at: $completed_at,
result: "PERIODIC_WRITERS_RETIRED_AFTER_EXACT_HISTORY_MIGRATION",
controller: "ICE-P-ZY001",
human_authority: "ICE-GL∞",
repositories: [
{name:"bingshuo/chenglu-agent", main_sha:$chenglu, refs:"EXACT_MATCH"},
{name:"bingshuo/guideng", main_sha:$guideng, refs:"EXACT_MATCH"},
{name:"bingshuo/kezhou", main_sha:$kezhou, refs:"EXACT_MATCH"}
],
periodic_writers: "DISABLED_AND_INACTIVE",
old_repository_service: "DISABLED_AND_INACTIVE",
role_handshake_services: "ALL_ACTIVE",
current_code_channel: "HEALTHY",
legacy_data_deleted: false,
source_archive_sha256: $source_archive_sha,
rule: "Scheduled repository writes are historical transport, not proof of language or persona continuity."
}' >"${receipt}.tmp"
chmod 0600 "${receipt}.tmp"
mv "${receipt}.tmp" "$receipt"
completed=1
token_to_delete="$token"
cleanup_token
token=""
trap - EXIT
printf 'PERIODIC_WRITERS_RETIRED receipt=%s token_deleted=%s\n' \
"$receipt" "$(test -n "$token_to_delete" && printf true)"

View file

@ -29,7 +29,7 @@ test("code channel has one root and exactly three current repositories", () => {
}
});
test("legacy repository routes are all non-current and non-push", () => {
test("legacy routes stay closed except the three private persona archives", () => {
const map = readJson("routing/repository-route-map.json");
const current = map.repositories.filter((entry) =>
["REPO-012", "REPO-014", "REPO-015"].includes(entry.code),
@ -37,13 +37,22 @@ test("legacy repository routes are all non-current and non-push", () => {
assert.equal(current.length, 3);
assert.equal(map.repositories.length, 3);
for (const repository of map.historical_repositories) {
assert.match(repository.state, /HISTORICAL.*(?:NO_PUSH|ROUTE_CLOSED)/u);
if (["REPO-009", "REPO-010", "REPO-011"].includes(repository.code)) {
assert.equal(
repository.state,
"CURRENT_PRIVATE_PERSONA_ARCHIVE_STAGED_NO_SCHEDULED_WRITES",
);
assert.match(repository.primary.url, /\/code\/bingshuo\//u);
assert.equal(repository.controller, "ICE-P-ZY001");
} else {
assert.match(repository.state, /HISTORICAL.*(?:NO_PUSH|ROUTE_CLOSED)/u);
}
}
});
test("each registered persona system exposes all five components", () => {
const map = readJson("routing/persona-system-canonical-map.json");
assert.equal(map.persona_systems.length, 10);
assert.equal(map.persona_systems.length, 13);
assert.equal(
new Set(map.persona_systems.map((entry) => entry.id)).size,
map.persona_systems.length,