@pm_zhousl/xinyun-ai-init 1.8.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +1 -1
  2. package/init/xinyun-ai-init/README.md +42 -6
  3. package/init/xinyun-ai-init/rules/directory-self-completion.md +24 -0
  4. package/init/xinyun-ai-init/rules/init-rules.md +23 -1
  5. package/init/xinyun-ai-init/rules/session-workbench.md +23 -2
  6. package/init/xinyun-ai-init/rules/upgrade-rules.md +21 -1
  7. package/init/xinyun-ai-init/templates/AGENTS.template.md +27 -2
  8. package/init/xinyun-ai-init/templates/README.template.md +4 -0
  9. package/init/xinyun-ai-init/templates/control-plane-index.template.json +24 -0
  10. package/init/xinyun-ai-init/templates/core-rules.template.md +33 -3
  11. package/init/xinyun-ai-init/templates/current-task.template.md +23 -1
  12. package/init/xinyun-ai-init/templates/database-authorization.template.json +39 -0
  13. package/init/xinyun-ai-init/templates/host-capabilities.template.json +33 -0
  14. package/init/xinyun-ai-init/templates/init-result.template.json +21 -1
  15. package/init/xinyun-ai-init/templates/managed-baseline.template.json +2 -2
  16. package/init/xinyun-ai-init/templates/manifest.template.json +52 -6
  17. package/init/xinyun-ai-init/templates/onboarding-report.template.json +25 -0
  18. package/init/xinyun-ai-init/templates/preflight-report.template.json +30 -0
  19. package/init/xinyun-ai-init/templates/project-check.template.md +27 -1
  20. package/init/xinyun-ai-init/templates/project-guide.template.md +20 -2
  21. package/init/xinyun-ai-init/templates/project-identity.template.json +23 -0
  22. package/init/xinyun-ai-init/templates/project-index.template.json +50 -1
  23. package/init/xinyun-ai-init/templates/project-status.template.json +45 -0
  24. package/init/xinyun-ai-init/templates/requirement-packet.template.json +23 -0
  25. package/init/xinyun-ai-init/templates/role-execution.template.md +1 -1
  26. package/init/xinyun-ai-init/templates/role-session-binding.template.json +18 -2
  27. package/init/xinyun-ai-init/templates/session-candidates.template.json +19 -0
  28. package/init/xinyun-ai-init/templates/takeover-baseline.template.json +17 -0
  29. package/init/xinyun-ai-init/templates/task-index.template.json +5 -3
  30. package/init/xinyun-ai-init/templates/technical-impact-packet.template.json +31 -0
  31. package/init/xinyun-ai-init/templates/technical-landscape.template.json +41 -0
  32. package/init/xinyun-ai-init/version.json +1 -1
  33. package/package.json +1 -1
  34. package/scripts/verify-init-package.js +369 -32
  35. package/scripts/verify-rules-package.js +242 -15
  36. package/test-scenarios/README.md +11 -5
  37. package/test-scenarios/fixtures/v1.9.0-behavior-fixture/README.md +9 -0
  38. package/test-scenarios/review-template.md +1 -1
  39. package/test-scenarios/scenarios.md +55 -2
  40. package/test-scenarios/v1.10.0-behavior-evidence.json +31 -0
  41. package/test-scenarios/v1.10.0-scenarios.md +96 -0
  42. package/test-scenarios/v1.9.0-behavior-evidence.json +269 -0
  43. package/test-scenarios/v1.9.0-scenarios.md +55 -0
package/README.md CHANGED
@@ -24,7 +24,7 @@ npx --yes @pm_zhousl/xinyun-ai-init@latest --force
24
24
  npm run verify:init
25
25
  npm run verify:rules
26
26
  npm run verify:rules -- --json
27
- npm run verify:rules -- --tarball ./pm_zhousl-xinyun-ai-init-1.8.0.tgz
27
+ npm run verify:rules -- --tarball ./pm_zhousl-xinyun-ai-init-1.10.0.tgz
28
28
  ```
29
29
 
30
30
  `verify:rules` 为只读规则包一致性检查,不自动修复、不安装依赖、不修改 Git 或业务代码。
@@ -2,7 +2,7 @@
2
2
 
3
3
  本目录是“欣芸技术开发 Agent 流”的初始化包,负责把完整 AI 执行要求下发到目标项目。
4
4
 
5
- 当前规则版本:`1.8.0`。
5
+ 当前规则版本:`1.10.0`。
6
6
 
7
7
  ## Codex 一句话入口
8
8
 
@@ -19,7 +19,7 @@ npx --yes @pm_zhousl/xinyun-ai-init@latest --force
19
19
  ```
20
20
 
21
21
  v1.7.2 fixed task contract keys: `taskKind=initialization-main`, `taskKind=initialization-record`, `taskKind=role-execution`.
22
- v1.7.3 fixed Codex role session contract keys: `provider=codex`, `sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`, `roleSessionIdempotency={taskId,roleId,provider,targetVersion}`.
22
+ v1.7.3 fixed Codex role session creation compatibility fields: `provider=codex`, `sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`, and legacy creation index `{taskId,roleId,provider,targetVersion}`. v1.10.0 takeover gates are authoritative for project readiness.
23
23
  v1.7.3 Codex role session orchestration is host-level only; CLI still only creates `xinyun-ai-init/`.
24
24
 
25
25
  执行上面的命令后,会生成 `xinyun-ai-init/`。随后让 AI 读取 `xinyun-ai-init/README.md` 即可。
@@ -424,7 +424,7 @@ AI 读取本 README 并进入初始化或升级流程后,不论项目大小、
424
424
  - 任务 `task.status`:`pending`、`executing`、`partial`、`blocked`、`completed`、`cancelled`。
425
425
  - 步骤 `step.status`:`pending`、`running`、`completed`、`skipped`、`failed`。
426
426
  - 升级 `upgrade.status`:`not-started`、`analyzing`、`ready`、`applied`、`conflict-pending`、`partial`、`blocked`、`failed`。
427
- - 能力 `capability.status`:`available`、`available-with-dependency`、`unavailable`、`not-checked`、`unknown`。
427
+ - 能力 `capability.status`:`available`、`available-with-dependency`、`unavailable`、`permission-denied`、`unknown`、`not-checked`、`not-verified`、`failed`。
428
428
  - 结果 `result.status` 必须使用任务状态的同名值。
429
429
  - 锁 `lock.status`:`active`、`waiting`、`blocked`、`unknown`、`released`。
430
430
 
@@ -511,7 +511,7 @@ AI 读取本 README 并进入初始化或升级流程后,不论项目大小、
511
511
  - capabilityId:唯一能力 ID
512
512
  - name:能力名称
513
513
  - detectionMethod:检测方式或命令名称,不写敏感参数
514
- - status:available / available-with-dependency / unavailable / not-checked / unknown
514
+ - status:available / available-with-dependency / unavailable / permission-denied / unknown / not-checked / not-verified / failed
515
515
  - evidence:路径、版本、命令返回摘要或项目封装位置
516
516
  - dependencyStatus:满足 / 缺失 / 不适用 / 未知
517
517
  - fallbackPlan:降级方案
@@ -1025,7 +1025,7 @@ v1.7.3 在 v1.7.2 已创建或恢复 5 个 `role-execution` 本地任务之后
1025
1025
 
1026
1026
  每个绑定至少记录:`bindingId`、`taskId`、`roleId`、`sessionId`、`parentSessionId`、`provider`、`targetVersion`、`sessionStatus`、`understandingStatus`、`confirmationStatus`、`executionEligible`、`idempotencyKey`、`hostCapability`、`createdAt`、`updatedAt`、`failure`、`degradation` 和 `audit`。
1027
1027
 
1028
- `provider=codex`。`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`。会话幂等键固定为 `taskId + roleId + provider + targetVersion` 的 JCS-SHA-256;重复升级或重复初始化必须优先复用已有真实会话和绑定,不得创建重复角色会话。
1028
+ `provider=codex`。`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`。v1.9 会话复用键固定为 `{projectRootHash, workspaceScope, repositoryScopeHash, workstream, taskId, roleId, provider, targetVersion}` 的 RFC8785-JCS-SHA-256;v1.7.3 的 `legacyCreationIndexFields={taskId, roleId, provider, targetVersion}` 只能作为创建兼容索引,绝不参与候选选择或跨项目复用。重复升级或重复初始化必须优先复用已有真实会话和绑定,不得创建重复角色会话。
1029
1029
 
1030
1030
  真实 `sessionId` 必须来自 Codex 宿主创建会话后的返回值;不得伪造 sessionId,不得用任务 ID、角色 ID、占位符或历史摘要冒充真实会话。Codex 宿主不支持创建子会话、创建接口不可用或权限不足时,只能记录 `local-degraded-no-fake-session-id`,保持 `sessionId=null`,并写入 `sessionStatus=blocked` 或 `failed`、`degradation.reason` 和 `nextAction`。
1031
1031
 
@@ -1099,7 +1099,7 @@ npx --yes @pm_zhousl/xinyun-ai-init@latest --force
1099
1099
 
1100
1100
  `activeTaskIds` 必须包含所有未完成的角色后续任务,`executableTaskIds` 只包含满足成员绑定、职责确认、理解完成、确认人不冲突和 CodeGraph 条件的任务。`executableTaskIds` 可以为空,但只要 `activeTaskIds` 非空,`current-task.md` 就不得使用 `status=idle` 或 `taskId=null`,必须指向排序最高的活动任务;待分配使用 `status=pending`,权限、冲突或失败使用 `status=blocked`,并填写 `blockedReason` 或 `nextAction`。
1101
1101
 
1102
- 每个角色的幂等键是对 `{sourceTaskId, roleId, taskKind, targetVersion}` 使用 v1.6 JCS 规范化 JSON 后计算的 SHA-256,规范化算法为 `JCS-SHA-256`。同一幂等键只对应一个 `role-execution` 任务;重复升级复用已有任务并补齐索引,不覆盖用户控制文件或业务文件。
1102
+ 每个角色任务的幂等键仍按 `{sourceTaskId, roleId, taskKind, targetVersion}` 使用 v1.6 JCS 规范化 JSON;这只裁决 role-execution 任务,不裁决跨项目会话复用。会话复用必须使用包含 `projectRootHash`、`workspaceScope`、`repositoryScopeHash`、`workstream` 的 v1.9 全身份键;重复升级复用已有任务并补齐索引,不覆盖用户控制文件或业务文件。
1103
1103
 
1104
1104
  补建使用逐角色临时文件、完整校验、原子重命名和任务索引原子更新。单角色写入失败记录 `status=blocked`、`blockedReason=write-failed`;部分成功为 `partial`,全失败为 `blocked`。索引更新中断时不得清空 `activeTaskIds` 或伪造 `idle`,下次按幂等键恢复。
1105
1105
 
@@ -1114,3 +1114,39 @@ Skill 位于 `xinyun-ai/skills/`。分配文件必须使用 `assignmentStatus`
1114
1114
  前端审计位于 `xinyun-ai/frontend-audits/`。`audit-only` 不产生代码 diff;`refactor-now` 必须有计划、用户确认、允许路径、前后哈希、diff 和测试证据。预算或权限不足只能记录 `partial/unknown` 和 `unverifiedScope`。
1115
1115
 
1116
1116
  临时程序员会话必须有已确认的 `planId`、`userConfirmationId`、单一 `taskId`、规范化 `changeDomain`、允许路径和真实 `sessionId`。最多同时占用 3 个运行额度;`occupancyStatus=unknown` 不得自动释放,人工释放必须有完整 `releaseAudit`。跨文件控制面必须使用 `coordinationTransactionId`。详情见 `rules/coordination.md`、`rules/skills.md`、`rules/frontend-audit.md` 和 `rules/temporary-sessions.md`。
1117
+
1118
+ ## v1.10 项目 AI 接管初始化门禁
1119
+
1120
+ v1.10 的目标是接管整个项目的 AI 代码开发。接管 preflight 和 onboarding 未完成前,AI 只能读取项目、创建或补齐 `xinyun-ai/` 控制面,不得进入业务代码开发。
1121
+ `projectStatus=not-started/initializing/partial/blocked/ready`;`executionEligible=true` 只有全部接管门禁通过后才允许写入。
1122
+
1123
+ 必须创建并维护:
1124
+
1125
+ - `xinyun-ai/project-status.json`
1126
+ - `xinyun-ai/preflight-report.json`
1127
+ - `xinyun-ai/onboarding-report.json`
1128
+ - `xinyun-ai/host-capabilities.json`
1129
+ - `xinyun-ai/index/takeover-baseline.json`
1130
+ - `xinyun-ai/index/control-plane-index.json`
1131
+
1132
+ preflight 必须检查宿主真实会话创建/复用/发送/获取/关闭和控制文件读写,项目身份,CodeGraph,业务与控制面基线,Git 模式,测试框架,工具链,旧 AI 沉淀,五个角色职责,主任务/角色任务,控制面原子写入,数据库默认授权和敏感扫描。宿主核心能力、项目身份、CodeGraph、基线、真实角色会话、控制面或敏感扫描任一必要项不可用时,不得 `projectStatus=ready`。
1133
+ CodeGraph 唯一状态源为 `xinyun-ai/manifest.json` 的 `codeGraphRequired`;`project-index.json`、`preflight-report.json`、`onboarding-report.json`、`current-task.md` 和 `init-result.json` 必须引用同一 `codeGraphRecordId`,并同步 `status`、`sourceRevision`、`indexScope`、`unindexedScope`、`failureReason` 和 evidence。
1134
+ 宿主能力状态为 `available-with-dependency` 时必须等待依赖授权和依赖 evidence,不能直接 ready;`unknown`、`unavailable`、`permission-denied`、`failed`、`not-checked`、`not-verified` 和依赖未授权均阻断 ready。
1135
+
1136
+ `projectStatus` 固定为 `not-started/initializing/partial/blocked/ready`。只有全部 `requiredGates` 通过且无高风险阻塞时才允许 `executionEligible=true`。缺少真实角色会话时必须 `blocked + blockedReason=required-role-session-not-created`,不得伪造 `sessionId`。
1137
+
1138
+ Git none、无测试框架和工具链未检测只登记 `not-available/not-detected`、证据和 `unverifiedScope`,不伪造通过且不自动安装依赖。数据库默认 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`;未明确授权不得连接数据库或执行 SQL,只输出 SQL 计划。所有敏感信息不得写入任务、日志、交接单、JSON、Markdown 或 stdout/stderr。
1139
+
1140
+ ## v1.9 项目会话隔离、总工全景与数据库授权
1141
+
1142
+ 项目身份写入 `xinyun-ai/project-identity.json`。项目根优先使用 realpath,失败时使用 lexical-fallback 并记录 `identityEvidence`;路径统一 `/`、Unicode NFC,Windows 盘符大写且按不区分大小写规范化,Unix 保持大小写敏感。`projectRootHash` 和 `repositoryScopeHash` 不包含原始绝对路径,后者对稳定排序的 repository scope 使用 RFC 8785 JCS-SHA-256。
1143
+
1144
+ 会话候选必须同时匹配项目身份、仓库范围、workstream、角色、任务幂等键和权限范围。`sessionMatchStatus` 固定为 `reusable/renamed/duplicate-not-primary/other-project/unknown/not-reusable/requires-confirmation`,只有 `reusable` 或含完整改名 audit 的 `renamed` 才能绑定;其他项目不得展示完整路径、任务内容或 sessionId。候选排序和 `selectionEvidence` 必须可追溯,重复候选保留历史且不自动删除或合并。
1145
+
1146
+ 角色展示名使用 `项目简称|角色中文名|职责名称`,主会话使用 `项目简称|主会话|项目总调度`。改名只更新宿主展示名和本地摘要,历史 sessionId、旧标题、绑定 ID 和 audit 必须保留。
1147
+
1148
+ 总工维护 `xinyun-ai/technical-landscape.json`,主会话维护 `xinyun-ai/packets/requirement-packet.json`,总工返回 `xinyun-ai/packets/technical-impact-packet.json`。技术全景只有 `coverageStatus=full`、`unverifiedScope=[]` 且核心对象都有有效证据时才可 `ready`;`partial/unknown` 不得写成 ready。两个 packet 必须关联同一 requirementId、taskId、projectRootHash 和 version,使用 RFC 8785 JCS-SHA-256;关联内容变化时写入 `blockedReason=packet-stale` 并重新确认。
1149
+
1150
+ 数据库默认 `databaseAccessMode=sql-only`。未明确授权连接时只输出 SQL,不连接、不读取真实数据、不执行 SQL、不安装驱动。连接、只读查询、结构变更和数据修改权限独立记录;四类授权状态固定为 `not-requested/requested/authorized/denied/expired/failed/unknown`,脱敏状态固定为 `verified/unverified/failed`。执行前校验规范化 SQL、参数、方言、targetEnvironment、授权范围和 `statementHash`。授权过期或输入变化时回到 `executionStatus=needs-confirmation`,受影响授权进入 `expired` 并追加 audit。
1151
+
1152
+ v1.9 不自动复用其他项目会话、不自动连接或修改数据库、不扩大 HTML 迁移范围,不执行 Git 写操作或 npm publish。
@@ -64,3 +64,27 @@
64
64
  - Skill 路由任务按需补齐 `xinyun-ai/skills/registry.json`、`assignments.json` 和 `usage-records/`;分配字段必须是 `assignmentStatus`。
65
65
  - 前端审计按需补齐 `xinyun-ai/frontend-audits/`;临时程序员任务按需补齐 `xinyun-ai/sessions/temporary/`。
66
66
  - 普通咨询、首次极速初始化和不涉及这些能力的任务不创建空目录。目录补齐只修改 AI 控制面,不修改业务代码。
67
+ - 普通咨询、首次极速初始化和不涉及这些能力的任务不创建空目录。目录补齐只修改 AI 控制面,不修改业务代码。
68
+
69
+ ## v1.10 项目 AI 接管目录
70
+
71
+ - `xinyun-ai/project-status.json`
72
+ - `xinyun-ai/preflight-report.json`
73
+ - `xinyun-ai/onboarding-report.json`
74
+ - `xinyun-ai/host-capabilities.json`
75
+ - `xinyun-ai/index/takeover-baseline.json`
76
+ - `xinyun-ai/index/control-plane-index.json`
77
+ - `xinyun-ai/events/events.jsonl`
78
+
79
+ 接管门禁目录必须在业务代码开发前创建或明确记录为 blocked/partial;首次 CLI 仍只创建 `xinyun-ai-init/`,不会直接创建 `xinyun-ai/`。
80
+
81
+ ## v1.9 按需目录
82
+
83
+ - `xinyun-ai/project-identity.json`
84
+ - `xinyun-ai/sessions/session-candidates.json`
85
+ - `xinyun-ai/technical-landscape.json`
86
+ - `xinyun-ai/packets/requirement-packet.json`
87
+ - `xinyun-ai/packets/technical-impact-packet.json`
88
+ - `xinyun-ai/database/authorization.json`
89
+
90
+ 小改和普通咨询不强制创建技术全景或 packet。创建后同步 manifest、project-index、current-task 和任务引用;只登记当前项目身份,不复制其他项目会话。
@@ -71,7 +71,7 @@
71
71
  - 会话创建属于 Codex 宿主编排规则,CLI 仍只创建 `xinyun-ai-init/`。
72
72
  - 创建或恢复绑定时写入 `xinyun-ai/sessions/role-session-bindings.json` 和 `xinyun-ai/sessions/roles/` 摘要,并同步 `manifest.json`、`project-index.json`、`task-index.json`、`assignments.json`、`current-task.md`、`init-result.json`。
73
73
  - 绑定必须使用 `provider=codex`,`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`。
74
- - 幂等键固定为 `taskId + roleId + provider + targetVersion` 的 JCS-SHA-256。
74
+ - v1.7.3 的 `legacyCreationIndexFields={taskId, roleId, provider, targetVersion}` 只保留为创建兼容索引;v1.9 会话复用必须使用 `{projectRootHash, workspaceScope, repositoryScopeHash, workstream, taskId, roleId, provider, targetVersion}` 的 RFC8785-JCS-SHA-256,旧字段不得参与候选选择或跨项目复用。
75
75
  - 真实 `sessionId` 必须来自 Codex 宿主返回值;不得伪造 sessionId。宿主不支持时记录 `local-degraded-no-fake-session-id`,`sessionId=null`。
76
76
  - 创建成功后先进入只读 `onboarding`;`sessionStatus=ready` 必须等待职责理解、职责确认、成员 / 会话绑定和执行资格全部满足。
77
77
 
@@ -79,4 +79,26 @@
79
79
 
80
80
  需要多会话协作时,按 A-D 顺序补齐 `xinyun-ai/coordination/`、`xinyun-ai/skills/`、`xinyun-ai/frontend-audits/` 和 `xinyun-ai/sessions/temporary/` 的最小模板。普通咨询和首次极速初始化不强制创建这些业务记录目录。
81
81
 
82
+ ## v1.10 项目 AI 接管初始化门禁
83
+
84
+ - 所有项目先执行接管 preflight,再允许进入业务代码开发。必须创建 `project-status.json`、`preflight-report.json`、`onboarding-report.json`、`host-capabilities.json`、`index/takeover-baseline.json` 和 `index/control-plane-index.json`。
85
+ - 宿主能力必须逐项检测真实会话创建、旧会话复用、发送任务、获取结果、关闭会话和控制文件读写;核心能力 unavailable、permission-denied、failed 或 unknown 时不得 ready。
86
+ - 项目身份必须明确 projectRoot、projectName、repositoryScopeHash、workstream、version、codeBaselineHash;路径不明确进入 blocked。
87
+ - CodeGraph 缺失且命令可用时执行 `codegraph init -i`;登记 initialization result、indexScope、sourceRevision、unindexedScope 和 failureReason,失败不得声称完整理解。
88
+ - CodeGraph 状态唯一读取 `xinyun-ai/manifest.json` 的 `codeGraphRequired`;preflight、onboarding、current-task 和 init-result 只引用同一 `codeGraphRecordId`,状态源缺失或摘要不一致时 blocked。
89
+ - 宿主能力为 `available-with-dependency` 时必须记录 dependencyStatus、依赖授权和 evidence;依赖未授权以及 `unknown`、`unavailable`、`permission-denied`、`failed`、`not-checked`、`not-verified` 均禁止 ready。
90
+ - 接管基线记录业务文件哈希、控制文件哈希、未提交 Git、已有任务/会话和旧 AI 文档。旧沉淀必须分类为 adopted/pending-confirmation/not-adopted,敏感原文不得落盘。
91
+ - 五个角色和主任务必须有父子任务、状态、下一步和真实 sessionId;缺失角色会话固定 `blockedReason=required-role-session-not-created`,不得伪造 sessionId。
92
+ - `projectStatus` 只有在所有 requiredGates 通过、敏感扫描通过且无高风险阻塞时才可为 ready;executionEligible 必须同时为 true。
93
+ - Git none、无测试框架、工具链未检测只记录 not-available/not-detected 和 unverifiedScope;数据库默认 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`,未经确认不得连接或执行 SQL。
94
+
95
+ ## v1.9 初始化项目身份与联合门禁
96
+
97
+ 按需创建 `xinyun-ai/project-identity.json`、`sessions/session-candidates.json`、`technical-landscape.json`、`packets/requirement-packet.json`、`packets/technical-impact-packet.json` 和 `database/authorization.json`。项目根优先 realpath,失败使用 lexical-fallback;使用 Unicode NFC、规范化路径和 RFC 8785 JCS-SHA-256,禁止保存原始绝对路径。
98
+
99
+ 会话候选状态固定为 `reusable/renamed/duplicate-not-primary/other-project/unknown/not-reusable/requires-confirmation`,只有 reusable 或有完整改名 audit 的 renamed 才能绑定。其他项目会话不得展示或复用,中文展示名使用项目简称、角色中文名和职责名称。
100
+
101
+ 技术全景只有 full coverage、空 unverifiedScope 和核心证据完整时才可 ready;partial/unknown 不得 ready。requirementPacket 与 technicalImpactPacket 必须同项目、task、版本和 hash;失效时进入 `packet-stale` 并阻断执行。数据库默认 `sql-only`,连接、查询、结构变更和数据修改分别授权,每条 SQL 必须校验 statementHash 和目标环境。
102
+ - v1.9 fields: `sessionMatchStatus`、`selectionEvidence`、`项目简称|角色中文名|职责名称`、`coverageStatus=full`、`databaseAccessMode=sql-only`、`targetEnvironment`。
103
+
82
104
  共享事实和 Skill 文件使用临时文件、完整校验和原子重命名。前端审计默认只读;临时会话只有用户确认的代码任务才可创建。不得修改业务代码、数据库、API、依赖、Git 或发布配置。
@@ -269,8 +269,8 @@ HTML 迁移只允许评估和单页面 / 区块试点计划;实际代码迁移
269
269
  - `sessionBindingId`
270
270
  - `sessionBindingPath`:xinyun-ai/sessions/role-session-bindings.json
271
271
  - `roleSessionPath`:xinyun-ai/sessions/roles/<roleId>.md
272
- - `roleSessionIdempotency`:taskId + roleId + provider + targetVersion
273
- - `hostCapability`:available / unavailable / permission-denied / unknown / failed
272
+ - `roleSessionIdempotency`:v1.9 使用 projectRootHash + workspaceScope + repositoryScopeHash + workstream + taskId + roleId + provider + targetVersion 的 RFC8785-JCS-SHA-256;v1.7.3 `legacyCreationIndexFields={taskId, roleId, provider, targetVersion}` 只作创建兼容索引,不参与候选选择或跨项目复用
273
+ - `hostCapability`:available / available-with-dependency / unavailable / permission-denied / unknown / not-checked / not-verified / failed
274
274
  - `degradationReason`:local-degraded-no-fake-session-id / none
275
275
  - `onboardingStatus`
276
276
  - `created-but-writeback-failed` 恢复线索
@@ -284,3 +284,24 @@ HTML 迁移只允许评估和单页面 / 区块试点计划;实际代码迁移
284
284
  涉及前端审计时记录 `couplingType`、`decision`、审计 `status`、`coverage`、props/events/slots、状态/API/路由/业务流依赖、前后哈希、diff 和测试证据。涉及临时程序员会话时记录 `taskId`、`changeDomain`、`sessionId`、会话 `status`、`occupancyStatus`、并发额度、`releaseAudit` 和 `closeEvidence`。
285
285
 
286
286
  任何跨会话冲突、状态源缺失、预算超限、权限失败或敏感信息无法确认时暂停或阻塞,不自动重试、合并、覆盖或释放。
287
+
288
+ ## v1.10 接管 preflight 与交接
289
+
290
+ 交接必须记录 host capability、真实 sessionId、executionEligible 和阻塞原因;宿主不支持时保持 sessionId=null,不得伪造 sessionId。
291
+
292
+ - 接管交接必须引用 `preflightId`、`projectStatus`、`projectRootHash`、`codeGraphRecordId`、`baselineRecordId`、`hostCapabilityRecordId`、`mainTaskId` 和五个 role task/session 记录。
293
+ - 交接前必须确认宿主真实会话能力、项目身份、CodeGraph、业务/控制面基线、Git/测试/工具链发现、旧沉淀分类、职责确认、控制面索引和敏感扫描。
294
+ - CodeGraph 交接必须引用 manifest 状态源的 `codeGraphRecordId`,并同步 sourceRevision、indexScope、unindexedScope、failureReason 和 evidence;状态源缺失或跨文件不一致时 blocked。
295
+ - 每项宿主能力必须有 capabilityId、detectionMethod、status、dependencyStatus、fallbackPlan、usedTools、unusedTools、unverifiedScope、failureReason 和 checkedAt;available-with-dependency 未获授权不得 ready。
296
+ - `projectStatus=ready` 是唯一允许进入业务代码执行的状态;任一必要角色会话缺失时必须 `blocked + required-role-session-not-created`,不能伪造 sessionId。
297
+ - 数据库交接默认写 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`;只交付 SQL 计划,不连接数据库。
298
+ - 所有交接文件、事件日志和 JSON/Markdown 输出必须通过敏感扫描;原子写入失败、锁异常或用户修改控制文件进入 paused/blocked 并保留 audit。
299
+
300
+ ## v1.9 会话与技术交接字段
301
+
302
+ 会话交接记录 `projectRootHash`、`workspaceScope`、`repositoryScopeHash`、`workstream`、`roleId`、`taskId`、`permissionScope`、`sessionMatchStatus`、`hostRecoveryAvailable`、`hostRecoveryEvidence` 和 `selectionEvidence`。只有 reusable 或完成改名 audit 的 renamed 可绑定当前项目。
303
+
304
+ 总工交接必须引用 technical-landscape、requirementPacket 和 technicalImpactPacket 的 ID、版本、sourceRevision 和 RFC8785 JCS-SHA-256 hash;任一 hash 失效时状态为 blocked、原因 packet-stale。技术全景 partial/unknown 不得写为 ready。
305
+
306
+ 数据库交接必须记录 `databaseAccessMode=sql-only`、四类授权、授权状态 `not-requested/requested/authorized/denied/expired/failed/unknown`、`statementHash`、targetEnvironment、`executionStatus`、`redactionStatus=verified/unverified/failed` 和完整 audit;授权变化后不得继续执行旧 SQL,执行状态回到 `needs-confirmation`。
307
+ - v1.9 fields: `lexical-fallback`、`duplicate-not-primary`、`项目简称|角色中文名|职责名称`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`。
@@ -106,7 +106,7 @@
106
106
 
107
107
  - 升级到 v1.7.3 时,先确认 5 个 `role-execution` 本地任务已存在;缺失时按 v1.7.2 幂等规则补齐,再处理真实会话创建。
108
108
  - Codex 主会话可为 5 个角色任务创建真实角色子会话,并把真实 `sessionId` 回写到角色任务、`assignments.json`、`task-index.json`、`manifest.json`、`project-index.json` 和 `xinyun-ai/sessions/role-session-bindings.json`。
109
- - 会话绑定幂等键固定为 `taskId + roleId + provider + targetVersion`;重复升级必须复用已有绑定和真实 `sessionId`。
109
+ - v1.7.3 `legacyCreationIndexFields={taskId, roleId, provider, targetVersion}` 只作为兼容创建索引;v1.9 会话绑定幂等键固定为 `{projectRootHash, workspaceScope, repositoryScopeHash, workstream, taskId, roleId, provider, targetVersion}` 的 RFC8785-JCS-SHA-256。旧四字段不得参与候选选择或跨项目复用;重复升级仅在完整项目身份键匹配时复用已有绑定和真实 `sessionId`。
110
110
  - 如果会话已创建但回写失败,下一次升级必须先查询宿主已有会话并恢复绑定,记录 `created-but-writeback-failed` 和 audit,不得再次创建重复会话。
111
111
  - 单角色创建或回写失败不得影响其他角色;失败角色进入 `blocked` 或 `failed` 并记录 `blockedReason` / `failureReason` / `nextAction`。
112
112
  - Codex 宿主不支持创建子会话、权限不足或接口不可用时,使用本地降级 `local-degraded-no-fake-session-id`,保持 `sessionId=null`,不得伪造 sessionId。
@@ -116,4 +116,24 @@
116
116
 
117
117
  升级先校验共享事实、状态源和 coordination transaction;再校验 Skill registry、`assignmentStatus`/`usageStatus` 映射;然后处理前端 audit-only 或已确认的单页面试点;最后才创建临时程序员会话。已有用户修改的控制文件不得静默覆盖,冲突或哈希不一致进入 `blocked`/`recovery-required`。
118
118
 
119
+ ## v1.10 接管状态升级与恢复
120
+
121
+ 升级前读取 `projectStatus` 和全部 preflight 控制文件;冲突进入 blocked/recovery-required,不覆盖用户修改。
122
+
123
+ - 升级先读取 `project-status.json`、`preflight-report.json`、`onboarding-report.json`、`host-capabilities.json`、`takeover-baseline.json` 和 `control-plane-index.json`,任何用户修改或 hash 冲突进入 blocked/recovery-required,不覆盖控制文件。
124
+ - 接管状态统一为 `not-started/initializing/partial/blocked/ready`。已有任务、会话、锁、旧沉淀和 Git 改动必须先登记,再按幂等键恢复;不得删除历史或强制解锁。
125
+ - 真实角色会话缺失、无法复用或回写失败时,保留活动任务和恢复线索,状态为 `blocked`,`blockedReason=required-role-session-not-created`;不得把 sessionId 写成占位值。
126
+ - CodeGraph 缺失且命令可用时只执行一次 `codegraph init -i`;不可用、权限失败、索引损坏或状态未知按失败矩阵记录,不能声称 ready。
127
+ - 升级时不得读取未注册的 `codegraph-status.json`;统一从 manifest 的 `codeGraphRequired` 恢复,并校验 project-index、preflight、onboarding、current-task、init-result 的 codeGraphRecordId 和摘要一致。
128
+ - `available-with-dependency` 必须等待依赖授权;必要能力处于 unknown、unavailable、permission-denied、failed、not-checked、not-verified 或依赖未授权时保持 blocked/partial,不得 ready。
129
+ - Git none、测试框架未发现和工具链未检测不单独阻塞,但必须写入 status、evidence 和 unverifiedScope;禁止自动安装依赖。
130
+ - 数据库状态升级默认保持 `not-requested/needs-confirmation/verified`;没有新授权不得连接、执行 SQL、migration、seed 或修改真实数据。
131
+
132
+ ## v1.9 升级兼容与失效处理
133
+
134
+ 升级前按当前项目身份的 realpath/lexical-fallback 结果计算 projectRootHash,按排序 repository scope 计算 repositoryScopeHash。只有八字段身份/任务键、权限和 RFC8785 JCS-SHA-256 复用键一致时复用会话;其他项目、重复非主会话和身份未知会话不得复用。保留 v1.7.3 sessionId、旧创建索引、v1.8 共享事实和双会话文件契约。
135
+
136
+ 技术全景、requirementPacket 或 technicalImpactPacket 的 contentHash、版本、项目身份或 sourceRevision 变化时,相关任务进入 blocked + blockedReason=packet-stale,不得静默使用旧结果。数据库默认仍为 sql-only,授权、目标环境、参数、方言或 statementHash 变化时追加 audit 并回到 needs-confirmation。
137
+ - v1.9 fields: `sessionMatchStatus`、`duplicate-not-primary`、`selectionEvidence`、`项目简称|角色中文名|职责名称`、`technical-landscape`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`、`databaseAccessMode=sql-only`、`targetEnvironment`。
138
+
119
139
  同一 taskId + changeDomain 不得重复创建临时会话;容量不足进入 `queued`,unknown occupancy 保持占用,失败不得自动重试。升级不自动安装 Skill 依赖,不执行业务代码、数据库、API 或 Git 写操作。
@@ -191,7 +191,7 @@ CodeGraph 为必需能力时,只有 `initialized` 或 `healthy` 才能将结
191
191
  - CLI 仍只创建 `xinyun-ai-init/`,不得直接创建 `xinyun-ai/`、业务代码或真实角色会话。
192
192
  - 绑定文件固定为 `xinyun-ai/sessions/role-session-bindings.json`,角色会话目录固定为 `xinyun-ai/sessions/roles/`,模板为 `xinyun-ai-init/templates/role-session-binding.template.json`。
193
193
  - 每个角色绑定必须记录 `provider=codex`、`parentSessionId`、真实 `sessionId`、`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`、理解进度、确认进度和阻塞原因。
194
- - 会话幂等键固定为 `taskId + roleId + provider + targetVersion`;重复升级复用已有真实会话和绑定。
194
+ - v1.7.3 的 `legacyCreationIndexFields={taskId, roleId, provider, targetVersion}` 只作创建兼容索引;v1.9 会话复用键必须包含 `projectRootHash`、`workspaceScope`、`repositoryScopeHash`、`workstream`、`taskId`、`roleId`、`provider`、`targetVersion`,使用 RFC8785-JCS-SHA-256。旧字段不得参与候选选择或跨项目复用。
195
195
  - 真实 `sessionId` 必须来自 Codex 宿主返回值;不得伪造 sessionId。宿主不支持时记录 `local-degraded-no-fake-session-id`,保持 `sessionId=null`。
196
196
  - 创建后的角色会话先进入只读 `onboarding`;只有职责理解、职责确认、成员 / 会话绑定、确认门禁和执行资格都满足后才允许 `sessionStatus=ready`。
197
197
  - 创建成功不等于业务代码修改授权;普通咨询不创建角色会话,不写绑定文件,不创建外部账号或第三个会话。
@@ -204,7 +204,32 @@ AI 接手本项目时,请先读取:
204
204
  - `xinyun-ai/rules/core-rules.md`
205
205
  - `xinyun-ai/index/project-index.json`
206
206
 
207
- 未获用户确认前,不要修改业务代码、配置、数据库、依赖、构建脚本、测试逻辑、API 行为、UI 行为或业务流程。
207
+ 未获用户确认前,不要修改业务代码、配置、数据库、依赖、构建脚本、测试逻辑、API 行为、UI 行为或业务流程。
208
+
209
+ ## v1.10 项目 AI 接管初始化门禁
210
+
211
+ - 初始化目标是接管整个项目的 AI 代码开发;`xinyun-ai/` 接管门禁完成前,任何 AI 不得进入业务代码开发。
212
+ - 初始化必须先生成 `xinyun-ai/preflight-report.json`、`xinyun-ai/project-status.json`、`xinyun-ai/onboarding-report.json`、`xinyun-ai/host-capabilities.json`、`xinyun-ai/index/takeover-baseline.json` 和 `xinyun-ai/index/control-plane-index.json`。
213
+ - 宿主能力必须检测真实会话创建、旧会话复用、发送任务、获取结果、关闭会话和本地控制文件读写;任一核心能力为 unavailable、permission-denied、failed 或 unknown 时不得 ready。
214
+ - 项目身份必须包含 projectRoot、projectName、repositoryScopeHash、workstream、version、codeBaselineHash;路径不明确时为 `blocked`,不得猜测项目根。
215
+ - CodeGraph 必须检查 `.codegraph/`,命令可用且缺失时执行 `codegraph init -i`;记录结果、索引范围、sourceRevision、未索引范围和失败原因。失败或未知不得声称完整理解。
216
+ - 接管基线必须记录业务文件清单/哈希、xinyun-ai 控制文件哈希、未提交 Git 改动、已有任务/会话和旧 AI 文档;敏感原文不得进入任何任务、日志、JSON、Markdown 或 stdout/stderr。
217
+ - 五个逻辑角色必须完成职责、文件责任、读取范围、禁止操作、最终确认人和理解回执登记;角色登记不等于真实会话,未绑定真实 sessionId 必须保持 null。
218
+ - 主任务和五个角色任务必须有明确名称、父子关联、状态、下一步和真实 sessionId 绑定;任一必要角色会话缺失时写入 `blockedReason=required-role-session-not-created`。
219
+ - `projectStatus` 固定为 `not-started/initializing/partial/blocked/ready`;只有身份、CodeGraph、基线、团队、任务、控制面、旧沉淀、宿主能力、敏感扫描和无高风险阻塞全部通过,才允许 `ready` 和 `executionEligible=true`。
220
+ - 初始化冲突、旧任务、锁异常或用户修改控制文件时必须暂停/阻塞,不覆盖、不强制解锁;所有控制面写入使用临时文件、原子重命名、revision、幂等和恢复记录。
221
+ - Git none、无测试框架和未检测到工具链只记录 `not-available/not-detected` 及未验证范围,不得伪造通过,也不得自动安装依赖。
222
+ - 数据库初始化固定为 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`;未经明确授权不得连接数据库或执行 SQL,只输出 SQL 计划。
223
+
224
+ ## v1.9 当前项目会话隔离与联合门禁
225
+
226
+ - 项目身份使用 `xinyun-ai/project-identity.json`;优先 realpath,失败使用 lexical-fallback,记录 `identityEvidence`,路径使用 `/` 和 Unicode NFC,`projectRootHash` 不保存原始绝对路径。
227
+ - 会话候选必须包含 `projectRootHash`、`workspaceScope`、`repositoryScopeHash`、`workstream`、`roleId`、`taskId`、`permissionScope`、`hostRecoveryAvailable`、`hostRecoveryEvidence` 和 `sessionMatchStatus`。状态固定为 `reusable/renamed/duplicate-not-primary/other-project/unknown/not-reusable/requires-confirmation`,仅 reusable 或带完整改名 audit 的 renamed 可绑定。
228
+ - 其他项目会话不得展示完整路径、任务内容或 sessionId;重复会话保留历史,只选择一个主会话。中文标题使用 `项目简称|角色中文名|职责名称`。
229
+ - 总工维护 `technical-landscape.json`,主会话维护 `requirement-packet.json`,总工输出 `technical-impact-packet.json`。技术全景只有 full coverage、空 unverifiedScope 和完整核心证据才可 ready;partial/unknown 不得 ready。
230
+ - 两个 packet 必须同 requirementId、taskId、projectRootHash、version,并使用 RFC8785 JCS-SHA-256。关联内容变化后进入 `blockedReason=packet-stale`,程序员不得执行。
231
+ - 数据库默认 `sql-only`;连接、查询、结构变更、数据修改分别授权,四类授权状态固定为 `not-requested/requested/authorized/denied/expired/failed/unknown`,`redactionStatus` 固定为 `verified/unverified/failed`。每条 SQL 执行前校验规范化 `statementHash`、targetEnvironment 和权限状态,过期或变化必须进入 `needs-confirmation` 并追加 audit。
232
+ - v1.9 fields: `selectionEvidence`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`、`databaseAccessMode=sql-only`。
208
233
  ## v1.7 machine-readable enum anchors
209
234
 
210
235
  - decision=direct-map/rewrite-required/backend-required/unsupported/pending/unknown
@@ -2,6 +2,10 @@
2
2
 
3
3
  本目录是当前项目的 AI 协作工作区,采用“欣芸技术开发 Agent 流”。
4
4
 
5
+ ## v1.10 接管门禁
6
+
7
+ 当前项目必须先完成 `preflight-report.json` 和 `onboarding-report.json`,再进入业务代码开发。`project-status.json` 只有在项目身份、CodeGraph、基线、团队职责、五个真实角色会话、本地控制面、旧沉淀、宿主能力和敏感扫描全部通过时才可为 `ready`;缺失真实角色会话必须为 `blocked + required-role-session-not-created`。CLI 只创建 `xinyun-ai-init/`,AI 获得授权后才创建项目控制面。
8
+
5
9
  ## 工作方式
6
10
 
7
11
  - 首次初始化为极速模式,后续能力按需补齐。
@@ -0,0 +1,24 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "indexId": "control-plane-index-template",
4
+ "projectRootHash": null,
5
+ "taskIndex": "xinyun-ai/tasks/task-index.json",
6
+ "sessionIndex": "xinyun-ai/sessions/role-session-bindings.json",
7
+ "roleIndex": "xinyun-ai/team/assignments.json",
8
+ "factIndex": "xinyun-ai/coordination/project-facts.json",
9
+ "evidenceIndex": "xinyun-ai/index/evidence-index.json",
10
+ "eventLog": "xinyun-ai/events/events.jsonl",
11
+ "lockFile": "xinyun-ai/task-lock.json",
12
+ "status": "unknown",
13
+ "statusEnum": ["unknown", "initializing", "ready", "partial", "blocked", "recovery-required"],
14
+ "atomicWriteContract": {
15
+ "tempFileRequired": true,
16
+ "fsyncBeforeRename": true,
17
+ "indexRevisionRequired": true,
18
+ "recoveryRecordRequired": true,
19
+ "userModifiedControlFile": "blocked",
20
+ "lockFailure": "paused"
21
+ },
22
+ "idempotency": { "required": true, "keyScope": "projectRootHash + operation + targetPath + requestHash", "duplicatePolicy": "reuse-and-audit" },
23
+ "updatedAt": null
24
+ }
@@ -429,7 +429,7 @@ v1.7.2 fixed task contract keys: `taskKind=initialization-main`, `taskKind=initi
429
429
  The fixed task ordering expression is `priority ASC`, followed by `createdAt ASC`, roleId Unicode order, and taskId order.
430
430
  A single-role write failure records `status=blocked` and `blockedReason=write-failed`.
431
431
  v1.7.3 Codex role session orchestration is host-level only; CLI still only creates `xinyun-ai-init/`.
432
- v1.7.3 fixed Codex role session contract keys: `provider=codex`, `sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`, `roleSessionIdempotency={taskId,roleId,provider,targetVersion}`.
432
+ v1.7.3 fixed Codex role session compatibility fields: `provider=codex`, `sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`, and legacy creation index `{taskId,roleId,provider,targetVersion}`. The v1.9 project-isolated role session reuse contract is authoritative.
433
433
 
434
434
  ## v1.7.3 Codex 角色会话自动创建与绑定
435
435
 
@@ -438,7 +438,7 @@ v1.7.3 fixed Codex role session contract keys: `provider=codex`, `sessionStatus=
438
438
  - 会话绑定固定登记到 `xinyun-ai/sessions/role-session-bindings.json`,角色会话目录为 `xinyun-ai/sessions/roles/`,绑定模板为 `xinyun-ai-init/templates/role-session-binding.template.json`。
439
439
  - `manifest.json`、`project-index.json`、`task-index.json`、`role-execution` 任务、`assignments.json` 和 `init-result.json` 必须引用同一 `bindingId` / `sessionId` / `sessionStatus` 摘要。
440
440
  - `provider=codex`;`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`。
441
- - 会话幂等键固定为 `taskId + roleId + provider + targetVersion` 的 JCS-SHA-256;重复升级必须复用已有真实会话和绑定,不得重复创建同一角色会话。
441
+ - v1.9 会话复用键固定为 `{projectRootHash, workspaceScope, repositoryScopeHash, workstream, taskId, roleId, provider, targetVersion}` 的 RFC8785-JCS-SHA-256;只有完整项目身份键匹配时才允许重复升级复用已有真实会话和绑定。v1.7.3 `legacyCreationIndexFields={taskId, roleId, provider, targetVersion}` 只作创建兼容索引,不得参与候选选择、复用或跨项目身份判定。
442
442
  - 真实 `sessionId` 必须来自 Codex 宿主创建会话后的返回值;不得伪造 sessionId,不得用任务 ID、角色 ID、占位符或历史摘要冒充真实会话。
443
443
  - Codex 宿主不支持创建子会话、创建接口不可用或权限不足时,只能记录 `local-degraded-no-fake-session-id`,保持 `sessionId=null`,并写入 `sessionStatus=blocked` 或 `failed`、`degradation.reason` 和 `nextAction`。
444
444
  - 创建成功后角色会话先进入 `onboarding` 且只读读取入口规则、角色任务、职责确认和角色理解资料;`sessionStatus=ready` 必须等待真实 sessionId 回写、职责理解完成、职责确认完成、成员 / 会话绑定有效、确认门禁和执行资格全部满足。
@@ -559,7 +559,7 @@ v1.7.3 fixed Codex role session contract keys: `provider=codex`, `sessionStatus=
559
559
  - `activeTaskIds` 包含所有未完成角色任务;`executableTaskIds` 只包含满足执行前置条件的任务。活动任务存在时 `current-task.md` 不得为 `idle/null`。
560
560
  - 默认优先级为 project-owner 10、project-product 20、chief-engineer 30、programmer 40、test-reviewer 50;排序为 priority、createdAt、roleId Unicode 字典序、taskId 字典序。
561
561
  - 待分配任务使用 `status=pending`;权限、冲突或失败使用 `status=blocked`,并填写 `blockedReason` 或 `nextAction`。
562
- - 幂等键固定为 `{sourceTaskId, roleId, taskKind, targetVersion}` 的 JCS-SHA-256;同键复用同一任务。
562
+ - 角色任务幂等键固定为 `{sourceTaskId, roleId, taskKind, targetVersion}` 的 JCS-SHA-256;它只裁决 role-execution 任务,不参与跨项目会话候选复用。v1.9 会话复用键必须包含 `{projectRootHash, workspaceScope, repositoryScopeHash, workstream, taskId, roleId, provider, targetVersion}`,使用 RFC8785-JCS-SHA-256;v1.7.3 `legacyCreationIndexFields={taskId, roleId, provider, targetVersion}` 只作创建兼容索引,绝不参与候选选择或跨项目复用。
563
563
  - 单角色写入失败为 `blocked/write-failed`,部分成功为 `partial`,全失败为 `blocked`;索引更新中断时保留活动任务并按幂等键恢复,不得伪造 `idle`。
564
564
 
565
565
  ## v1.8 多会话协作规则
@@ -576,6 +576,36 @@ Skill 分配使用 `assignmentStatus`,使用记录使用 `usageStatus`。固
576
576
 
577
577
  临时程序员会话最多并行 3 个,状态与 `occupancyStatus` 分离。`occupancyStatus=unknown` 时继续占用额度。同一 changeDomain 不重复写入;unknown 占用不得自动释放,人工释放必须记录 releaseAudit。异常、超时、写回失败和测试失败不得自动重试或伪造完成。
578
578
 
579
+ ## v1.10 项目 AI 接管初始化门禁
580
+
581
+ - CodeGraph 唯一状态源为 `xinyun-ai/manifest.json` 的 `codeGraphRequired`;所有接管报告和 current-task/init-result 必须引用同一 `codeGraphRecordId`,不得创建未注册的 `codegraph-status.json`。
582
+ - 宿主能力记录必须包含 `capabilityId`、`detectionMethod`、`status`、`evidence`、`dependencyStatus`、`fallbackPlan`、`usedTools`、`unusedTools`、`unverifiedScope`、`failureReason` 和 `checkedAt`。
583
+ - `available-with-dependency` 只有依赖已授权且有证据时才可通过;`unknown`、`unavailable`、`permission-denied`、`failed`、`not-checked`、`not-verified` 或依赖未授权时不得 ready。
584
+
585
+ 接管使用 `host-capabilities`、`takeover-baseline`、`projectStatus` 和 `executionEligible` 控制面;核心宿主能力不可用时不得 ready。
586
+
587
+ - `projectStatus` 是接管状态源,枚举为 `not-started/initializing/partial/blocked/ready`;接管完成前,程序员任务只能读取、分析和补齐 AI 控制面,不得修改业务代码。
588
+ - `preflight-report.json` 必须逐项记录 `checkId/category/status/evidence/unverifiedScope/failureReason/checkedAt`,覆盖项目身份、宿主能力、CodeGraph、基线、Git、测试框架、工具链、旧沉淀、团队、任务、控制面、数据库和敏感扫描。
589
+ - 宿主能力检测必须覆盖真实会话创建、复用、发送任务、获取结果、关闭会话和本地控制文件读写;核心能力不可用或未知时 `projectStatus` 不得 ready。
590
+ - 项目身份缺少明确 projectRoot 时必须 blocked;身份最小字段为 projectRoot、projectName、repositoryScopeHash、workstream、version、codeBaselineHash。
591
+ - CodeGraph 缺失且命令可用时执行 `codegraph init -i`;必须登记 initialization result、indexScope、sourceRevision、unindexedScope 和 failureReason,失败不得宣称完整理解。
592
+ - 初始化前后基线必须分别记录业务文件清单/哈希、控制文件哈希、未提交 Git 改动、已有任务/会话和旧 AI 文档;敏感扫描未通过时不得 ready。
593
+ - `role-execution` 任务必须与五个逻辑角色和主任务关联;真实角色会话创建失败、无法复用或宿主不支持时写入 `blocked + required-role-session-not-created`,不得伪造 sessionId。
594
+ - `projectStatus=ready` 且 `executionEligible=true` 的联合门禁必须同时通过项目身份、CodeGraph、基线、职责确认、五个真实角色会话、任务树、本地控制面、旧沉淀分类、宿主能力、敏感扫描和无高风险阻塞。
595
+ - Git none、测试框架 not-available、工具链 not-detected 只降低覆盖范围并记录 unverifiedScope,不得伪造测试通过;数据库保持 `not-requested/needs-confirmation/verified`,禁止未授权连接或 SQL。
596
+
597
+ ## v1.9 项目会话隔离、总工全景与数据库授权
598
+
599
+ 项目身份落盘于 `xinyun-ai/project-identity.json`。根目录优先 realpath,失败使用 lexical-fallback 并记录失败原因;路径统一 `/`、Unicode NFC,Windows 盘符大写且不区分大小写,Unix 保持大小写敏感。projectRootHash 使用规范化根目录 SHA-256;repository scope 按 repoRootHash、workstream、kind 排序后使用 RFC 8785 JCS-SHA-256。
600
+
601
+ 会话候选至少有 `sessionId/provider/projectRootHash/workspaceScope/repositoryScopeHash/workstream/roleId/taskId/sessionStatus/permissionScope/updatedAt/identityEvidence/hostRecoveryAvailable/hostRecoveryEvidence/sessionMatchStatus`。sessionMatchStatus 固定为 `reusable/renamed/duplicate-not-primary/other-project/unknown/not-reusable/requires-confirmation`,只有 reusable 或含完整 renameAudit 的 renamed 才允许绑定。候选按有效绑定、reusable、身份完整、ready、updatedAt 倒序和 sessionId Unicode 升序选择,并写入 selectionEvidence。
602
+
603
+ 角色展示名固定为 `项目简称|角色中文名|职责名称`,主会话为 `项目简称|主会话|项目总调度`。改名只更新宿主展示名和 displayName,历史 sessionId、旧标题、绑定 ID 和 audit 必须保留。
604
+
605
+ 总工维护 `xinyun-ai/technical-landscape.json`。只有 coverageStatus=full、unverifiedScope=[]、核心对象均有有效证据且无未登记冲突时才可 ready;partial/unknown 只能保持 partial/blocked。主会话维护 requirementPacket,总工输出 technicalImpactPacket;两个 packet 最小字段固定为 schemaVersion、packetId、requirementId、taskId、projectRootHash、version、status、content、evidence、sourceRevision、contentHash、createdAt、updatedAt,使用 RFC8785 JCS-SHA-256。需求、影响范围、身份、版本或 sourceRevision 变化时写 blockedReason=packet-stale。
606
+
607
+ 数据库默认 databaseAccessMode=sql-only。连接、只读查询、结构变更、数据修改分别授权,四类授权状态固定为 not-requested/requested/authorized/denied/expired/failed/unknown,redactionStatus 固定为 verified/unverified/failed;SQL 执行前校验规范化 SQL、参数、方言、targetEnvironment、授权范围生成的 statementHash。授权或输入变化时回到 needs-confirmation,并追加包含 auditId、action、actorType、actorId、authorizationType、statementHash、targetEnvironment、resultStatus、redactionStatus、evidence、at 的 audit。
608
+
579
609
  ## 自我学习
580
610
 
581
611
  发现可复用经验时,先记录为候选经验。候选经验必须标注来源、适用范围、可信度、状态和最后验证时间。用户确认后,才能合并进正式规则。
@@ -79,6 +79,12 @@
79
79
  - 检索根目录:
80
80
  - 排除目录与文件:
81
81
  - CodeGraph 状态:
82
+ - codeGraphRecordId:null
83
+ - statusSource:xinyun-ai/manifest.json
84
+ - sourceRevision:null
85
+ - indexScope:[]
86
+ - unindexedScope:[]
87
+ - failureReason:null
82
88
  - 证据列表:
83
89
  - 已覆盖范围:
84
90
  - 可能遗漏位置:
@@ -162,11 +168,15 @@
162
168
  - executableTaskIds:
163
169
  - CodeGraph 必备初始化:
164
170
  - codeGraphRecordId:
171
+ - statusSource:xinyun-ai/manifest.json
165
172
  - required:true
166
173
  - status:initialized / healthy / missing / unavailable / permission-denied / failed / unknown
167
174
  - command:codegraph init -i
168
175
  - version:
169
176
  - indexPath:.codegraph/
177
+ - sourceRevision:
178
+ - indexScope:
179
+ - unindexedScope:
170
180
  - initializedAt:
171
181
  - checkedAt:
172
182
  - evidence:
@@ -222,7 +232,7 @@
222
232
  - 能力检测与降级:
223
233
  - capabilityId:
224
234
  - detectionMethod:
225
- - capability.status:available / available-with-dependency / unavailable / not-checked / unknown
235
+ - capability.status:available / available-with-dependency / unavailable / permission-denied / unknown / not-checked / not-verified / failed
226
236
  - evidence:
227
237
  - fallbackPlan:
228
238
  - usedTools:
@@ -289,3 +299,15 @@
289
299
  - 前端审计 decision / audit status / coverage:
290
300
  - 临时会话 status / occupancyStatus / changeDomain:
291
301
  - 未验证范围与阻塞原因:
302
+
303
+ ## v1.9 当前项目与技术联合状态摘要
304
+
305
+ - projectIdentity:`xinyun-ai/project-identity.json`
306
+ - projectRootHash / repositoryScopeHash:待填写
307
+ - 当前会话候选与 selectionEvidence:待填写
308
+ - 技术全景状态 / coverageStatus / unverifiedScope:待填写
309
+ - requirementPacketId / technicalImpactPacketId / 两个 contentHash:待填写
310
+ - packet 状态:captured / clarifying / proposed / confirmed / in-progress / blocked / completed / cancelled;技术影响:not-started / assessing / ready / partial / blocked
311
+ - packet 失效原因:packet-stale / 待填写
312
+ - databaseAccessMode:sql-only
313
+ - 数据库连接、查询、结构变更、数据修改授权状态:待填写
@@ -0,0 +1,39 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "databaseAccessMode": "sql-only",
4
+ "connectionStatus": "not-requested",
5
+ "connectionStatusEnum": ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"],
6
+ "queryAuthorization": "not-requested",
7
+ "queryAuthorizationEnum": ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"],
8
+ "schemaChangeAuthorization": "not-requested",
9
+ "schemaChangeAuthorizationEnum": ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"],
10
+ "dataMutationAuthorization": "not-requested",
11
+ "dataMutationAuthorizationEnum": ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"],
12
+ "authorizationStatusEnum": ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"],
13
+ "authorizationTransitionRules": {
14
+ "not-requested": ["requested", "denied"],
15
+ "requested": ["authorized", "denied", "failed", "unknown"],
16
+ "authorized": ["expired", "denied", "failed", "unknown"],
17
+ "denied": ["requested"],
18
+ "expired": ["requested"],
19
+ "failed": ["requested", "unknown"],
20
+ "unknown": ["requested", "denied"]
21
+ },
22
+ "invalidatingChanges": ["authorization-expired", "target-environment-changed", "statement-hash-changed", "parameters-changed", "dialect-changed"],
23
+ "invalidatingAction": "set affected authorization to expired or needs-confirmation, append audit, and prohibit execution until reauthorized",
24
+ "authorizationScope": [],
25
+ "authorizedBy": null,
26
+ "authorizedAt": null,
27
+ "targetEnvironment": null,
28
+ "statementHash": null,
29
+ "statementHashAlgorithm": "RFC8785-JCS-SHA-256",
30
+ "statementHashCanonicalInput": ["databaseEngine", "dialectVersion", "statements", "parameters", "transactionPlan", "targetEnvironment", "authorizationScope"],
31
+ "executionStatus": "needs-confirmation",
32
+ "executionStatusEnum": ["not-run", "needs-confirmation", "authorized", "executed", "failed", "unknown"],
33
+ "redactionStatus": "verified",
34
+ "redactionStatusEnum": ["verified", "unverified", "failed"],
35
+ "audit": [],
36
+ "auditRequiredFields": ["auditId", "action", "actorType", "actorId", "authorizationType", "statementHash", "targetEnvironment", "resultStatus", "redactionStatus", "evidence", "at"],
37
+ "createdAt": "2026-07-24T00:00:00.000Z",
38
+ "updatedAt": "2026-07-24T00:00:00.000Z"
39
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "capabilityRecordId": "host-capabilities-template",
4
+ "provider": "codex",
5
+ "projectRootHash": null,
6
+ "status": "unknown",
7
+ "statusEnum": ["available", "available-with-dependency", "unavailable", "permission-denied", "unknown", "not-checked", "not-verified", "failed"],
8
+ "dependencyStatusEnum": ["not-required", "required", "authorized", "not-authorized", "unknown"],
9
+ "capabilityRequiredFields": ["capabilityId", "detectionMethod", "status", "evidence", "dependencyStatus", "fallbackPlan", "usedTools", "unusedTools", "unverifiedScope", "failureReason", "checkedAt"],
10
+ "checkedAt": null,
11
+ "capabilities": {
12
+ "createRealSession": { "capabilityId": "createRealSession", "detectionMethod": "host-api", "status": "unknown", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "local-degraded-no-fake-session-id", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null },
13
+ "reuseExistingSession": { "capabilityId": "reuseExistingSession", "detectionMethod": "host-api", "status": "unknown", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "local-degraded-no-fake-session-id", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null },
14
+ "sendTask": { "capabilityId": "sendTask", "detectionMethod": "host-api", "status": "unknown", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "read-only handoff", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null },
15
+ "receiveResult": { "capabilityId": "receiveResult", "detectionMethod": "host-api", "status": "unknown", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "read-only handoff", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null },
16
+ "closeSession": { "capabilityId": "closeSession", "detectionMethod": "host-api", "status": "unknown", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "manual host close", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null },
17
+ "controlFileReadWrite": { "capabilityId": "controlFileReadWrite", "detectionMethod": "filesystem", "status": "unknown", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "pause on write failure", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null }
18
+ },
19
+ "readyPolicy": {
20
+ "requiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "closeSession", "controlFileReadWrite"],
21
+ "unavailableBlocksReady": true,
22
+ "unknownBlocksReady": true,
23
+ "availableWithDependencyBlocksReady": true,
24
+ "notVerifiedBlocksReady": true,
25
+ "blockedStatuses": ["unknown", "unavailable", "permission-denied", "failed", "available-with-dependency", "not-checked", "not-verified"],
26
+ "dependencyRequiredStatus": "authorized",
27
+ "fakeSessionIdProhibited": true
28
+ },
29
+ "unverifiedScope": [],
30
+ "sensitiveScan": { "status": "not-run", "matches": [] },
31
+ "createdAt": null,
32
+ "updatedAt": null
33
+ }
@@ -7,7 +7,7 @@
7
7
  "mode": "initialization",
8
8
  "status": "pending",
9
9
  "currentVersion": null,
10
- "targetVersion": "1.8.0",
10
+ "targetVersion": "1.10.0",
11
11
  "idempotencyKey": null,
12
12
  "createdFiles": [],
13
13
  "updatedFiles": [],
@@ -44,13 +44,33 @@
44
44
  "hostCapability": "unknown",
45
45
  "degradationReason": null
46
46
  },
47
+ "v19": {
48
+ "projectIdentityPath": "xinyun-ai/project-identity.json",
49
+ "technicalLandscapePath": "xinyun-ai/technical-landscape.json",
50
+ "requirementPacketPath": "xinyun-ai/packets/requirement-packet.json",
51
+ "technicalImpactPacketPath": "xinyun-ai/packets/technical-impact-packet.json",
52
+ "databaseAuthorizationPath": "xinyun-ai/database/authorization.json",
53
+ "packetHashAlgorithm": "RFC8785-JCS-SHA-256",
54
+ "databaseAccessMode": "sql-only"
55
+ },
56
+ "databaseAuthorization": {
57
+ "authorization": "not-requested",
58
+ "executionStatus": "needs-confirmation",
59
+ "redactionStatus": "verified",
60
+ "connected": false,
61
+ "evidence": []
62
+ },
47
63
  "codeGraph": {
48
64
  "codeGraphRecordId": null,
65
+ "statusSource": "xinyun-ai/manifest.json",
49
66
  "required": true,
50
67
  "status": "unknown",
51
68
  "command": "codegraph init -i",
52
69
  "version": null,
53
70
  "indexPath": ".codegraph/",
71
+ "sourceRevision": null,
72
+ "indexScope": [],
73
+ "unindexedScope": [],
54
74
  "initializedAt": null,
55
75
  "checkedAt": null,
56
76
  "evidence": [],
@@ -3,13 +3,13 @@
3
3
  "hashAlgorithm": "sha256",
4
4
  "contentEncoding": "utf8-normalized",
5
5
  "managedBy": "@pm_zhousl/xinyun-ai-init",
6
- "lastAppliedVersion": "1.8.0",
6
+ "lastAppliedVersion": "1.10.0",
7
7
  "files": [
8
8
  {
9
9
  "path": "xinyun-ai/rules/core-rules.md",
10
10
  "baselineHash": null,
11
11
  "templateHash": null,
12
- "lastAppliedVersion": "1.8.0",
12
+ "lastAppliedVersion": "1.10.0",
13
13
  "managedBy": "@pm_zhousl/xinyun-ai-init",
14
14
  "status": "unknown"
15
15
  }