@pm_zhousl/xinyun-ai-init 1.7.2 → 1.8.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 (42) hide show
  1. package/README.md +1 -1
  2. package/init/xinyun-ai-init/README.md +33 -1
  3. package/init/xinyun-ai-init/rules/coordination.md +33 -0
  4. package/init/xinyun-ai-init/rules/directory-self-completion.md +15 -0
  5. package/init/xinyun-ai-init/rules/frontend-audit.md +9 -0
  6. package/init/xinyun-ai-init/rules/init-rules.md +17 -0
  7. package/init/xinyun-ai-init/rules/session-workbench.md +27 -0
  8. package/init/xinyun-ai-init/rules/skills.md +15 -0
  9. package/init/xinyun-ai-init/rules/temporary-sessions.md +9 -0
  10. package/init/xinyun-ai-init/rules/upgrade-rules.md +16 -0
  11. package/init/xinyun-ai-init/templates/AGENTS.template.md +17 -0
  12. package/init/xinyun-ai-init/templates/coordination-change-ledger.template.json +10 -0
  13. package/init/xinyun-ai-init/templates/coordination-conflict-record.template.json +13 -0
  14. package/init/xinyun-ai-init/templates/coordination-contract-snapshot.template.json +9 -0
  15. package/init/xinyun-ai-init/templates/coordination-project-facts.template.json +9 -0
  16. package/init/xinyun-ai-init/templates/coordination-transaction.template.json +16 -0
  17. package/init/xinyun-ai-init/templates/core-rules.template.md +33 -0
  18. package/init/xinyun-ai-init/templates/current-task.template.md +37 -0
  19. package/init/xinyun-ai-init/templates/frontend-audit.template.json +27 -0
  20. package/init/xinyun-ai-init/templates/init-result.template.json +14 -1
  21. package/init/xinyun-ai-init/templates/managed-baseline.template.json +2 -2
  22. package/init/xinyun-ai-init/templates/manifest.template.json +85 -7
  23. package/init/xinyun-ai-init/templates/project-check.template.md +23 -0
  24. package/init/xinyun-ai-init/templates/project-guide.template.md +20 -0
  25. package/init/xinyun-ai-init/templates/project-index.template.json +58 -0
  26. package/init/xinyun-ai-init/templates/role-execution.template.md +18 -0
  27. package/init/xinyun-ai-init/templates/role-session-binding.template.json +43 -0
  28. package/init/xinyun-ai-init/templates/skills-assignments.template.json +19 -0
  29. package/init/xinyun-ai-init/templates/skills-registry.template.json +10 -0
  30. package/init/xinyun-ai-init/templates/task-index.template.json +8 -0
  31. package/init/xinyun-ai-init/templates/team/README.md +10 -0
  32. package/init/xinyun-ai-init/templates/team/assignments.json +6 -1
  33. package/init/xinyun-ai-init/templates/temporary-session.template.json +32 -0
  34. package/init/xinyun-ai-init/version.json +2 -2
  35. package/package.json +1 -1
  36. package/scripts/verify-init-package.js +237 -23
  37. package/scripts/verify-rules-package.js +119 -8
  38. package/test-scenarios/README.md +14 -4
  39. package/test-scenarios/review-template.md +23 -3
  40. package/test-scenarios/scenarios.md +112 -4
  41. package/test-scenarios/v1.7.3-scenarios.md +79 -0
  42. package/test-scenarios/v1.8.0-scenarios.md +39 -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.7.2.tgz
27
+ npm run verify:rules -- --tarball ./pm_zhousl-xinyun-ai-init-1.8.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.7.2`。
5
+ 当前规则版本:`1.8.0`。
6
6
 
7
7
  ## Codex 一句话入口
8
8
 
@@ -19,6 +19,8 @@ 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}`.
23
+ v1.7.3 Codex role session orchestration is host-level only; CLI still only creates `xinyun-ai-init/`.
22
24
 
23
25
  执行上面的命令后,会生成 `xinyun-ai-init/`。随后让 AI 读取 `xinyun-ai-init/README.md` 即可。
24
26
 
@@ -1015,6 +1017,24 @@ CodeGraph 状态只能是 `initialized`、`healthy`、`missing`、`unavailable`
1015
1017
 
1016
1018
  CodeGraph 失败时,不自动安装 CodeGraph,不修改系统环境,不修改业务代码、数据库、API、配置、依赖或 Git。相同项目、相同 `codeGraphRecordId` 和相同失败状态只提示一次;命令、权限、服务或索引状态变化后才允许再次提示或重试。
1017
1019
 
1020
+ ## v1.7.3 Codex 角色会话自动创建与绑定
1021
+
1022
+ v1.7.3 在 v1.7.2 已创建或恢复 5 个 `role-execution` 本地任务之后,由 Codex 主会话尝试创建 5 个真实角色子会话:`project-owner`、`project-product`、`chief-engineer`、`programmer`、`test-reviewer`。这是 Codex 宿主编排规则,不是 npm CLI 行为;CLI 边界保持不变,只创建 `xinyun-ai-init/`。
1023
+
1024
+ 会话绑定固定登记到 `xinyun-ai/sessions/role-session-bindings.json`,角色会话目录为 `xinyun-ai/sessions/roles/`,模板为 `xinyun-ai-init/templates/role-session-binding.template.json`。`manifest.json`、`project-index.json`、`task-index.json`、角色任务和 `assignments.json` 必须引用同一绑定记录。
1025
+
1026
+ 每个绑定至少记录:`bindingId`、`taskId`、`roleId`、`sessionId`、`parentSessionId`、`provider`、`targetVersion`、`sessionStatus`、`understandingStatus`、`confirmationStatus`、`executionEligible`、`idempotencyKey`、`hostCapability`、`createdAt`、`updatedAt`、`failure`、`degradation` 和 `audit`。
1027
+
1028
+ `provider=codex`。`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`。会话幂等键固定为 `taskId + roleId + provider + targetVersion` 的 JCS-SHA-256;重复升级或重复初始化必须优先复用已有真实会话和绑定,不得创建重复角色会话。
1029
+
1030
+ 真实 `sessionId` 必须来自 Codex 宿主创建会话后的返回值;不得伪造 sessionId,不得用任务 ID、角色 ID、占位符或历史摘要冒充真实会话。Codex 宿主不支持创建子会话、创建接口不可用或权限不足时,只能记录 `local-degraded-no-fake-session-id`,保持 `sessionId=null`,并写入 `sessionStatus=blocked` 或 `failed`、`degradation.reason` 和 `nextAction`。
1031
+
1032
+ 创建成功后角色会话先进入 `onboarding`,且只读读取入口规则、角色任务、职责确认和角色理解资料。`sessionStatus=ready` 只有在真实 sessionId 已回写、职责理解完成、职责确认完成、成员/会话绑定有效、确认门禁和执行资格全部满足后才允许写入。创建成功不等于业务代码修改授权。
1033
+
1034
+ 会话创建成功但回写失败时,必须记录 `created-but-writeback-failed`、可查询恢复线索和真实 `sessionId` 来源;下次按幂等键查询并恢复绑定。单角色创建、回写或 onboarding 失败不得影响其他角色,失败角色单独进入 `blocked` 或 `failed`。
1035
+
1036
+ 任务界面、`current-task.md`、`init-result.json` 和项目索引必须展示 5 个角色会话入口、`sessionId`、`sessionStatus`、理解进度和阻塞原因。普通咨询不创建角色会话,不写绑定文件,不创建外部账号或第三个会话。
1037
+
1018
1038
  ## 自我学习
1019
1039
 
1020
1040
  AI 可以沉淀项目经验,但不能自己升级正式规则。
@@ -1082,3 +1102,15 @@ npx --yes @pm_zhousl/xinyun-ai-init@latest --force
1082
1102
  每个角色的幂等键是对 `{sourceTaskId, roleId, taskKind, targetVersion}` 使用 v1.6 JCS 规范化 JSON 后计算的 SHA-256,规范化算法为 `JCS-SHA-256`。同一幂等键只对应一个 `role-execution` 任务;重复升级复用已有任务并补齐索引,不覆盖用户控制文件或业务文件。
1083
1103
 
1084
1104
  补建使用逐角色临时文件、完整校验、原子重命名和任务索引原子更新。单角色写入失败记录 `status=blocked`、`blockedReason=write-failed`;部分成功为 `partial`,全失败为 `blocked`。索引更新中断时不得清空 `activeTaskIds` 或伪造 `idle`,下次按幂等键恢复。
1105
+
1106
+ ## v1.8 多会话协作控制面
1107
+
1108
+ v1.8 按 A-D 分阶段启用:A 共享事实和冲突协调,B Skill 注册与技术栈路由,C 前端耦合审计和单页面试点,D 临时程序员会话。A 的状态和事务契约未通过前,不得进入 D 的真实并行写入。
1109
+
1110
+ 共享控制文件位于 `xinyun-ai/coordination/`:`project-facts.json` 使用 `factStatus`,`change-ledger.json` 使用 `changeStatus`,`conflict-records/<conflictId>.json` 使用 `conflictStatus`。任务索引使用 `taskStatus`,受影响任务使用 `refreshStatus`。状态字段按对象分域,禁止用 `status` 跨对象互相覆盖;临时会话的 `queued` 只属于会话状态域。
1111
+
1112
+ Skill 位于 `xinyun-ai/skills/`。分配文件必须使用 `assignmentStatus`,使用记录必须使用 `usageStatus`,固定映射以 `xinyun-ai-init/rules/skills.md` 为准。缺依赖、权限不足、未审核或未知框架只能降级或阻塞,不自动安装、不伪造执行。
1113
+
1114
+ 前端审计位于 `xinyun-ai/frontend-audits/`。`audit-only` 不产生代码 diff;`refactor-now` 必须有计划、用户确认、允许路径、前后哈希、diff 和测试证据。预算或权限不足只能记录 `partial/unknown` 和 `unverifiedScope`。
1115
+
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`。
@@ -0,0 +1,33 @@
1
+ # v1.8-A 共享事实与跨会话协调
2
+
3
+ `xinyun-ai/coordination/` 是多会话共享控制面,不是业务代码目录。初始化或按需升级时创建最小目录,不扫描或写入业务文件。
4
+
5
+ ## 文件与状态源
6
+
7
+ - `project-facts.json` 记录可追溯项目事实,字段必须包含 `factId`、`factType`、`scope`、`valueHash`、`source`、`taskId`、`sessionId`、`evidence`、`confidence`、`factStatus`、`revision`、`observedAt`、`updatedAt`。
8
+ - `change-ledger.json` 记录改动台账,字段必须包含 `changeId`、`taskId`、`sessionId`、`actor`、`role`、`changeDomain`、`targetPaths`、`baselineHash`、`changeStatus`、`evidence`、`createdAt`、`updatedAt`。
9
+ - `contract-snapshots/<contractId>.json` 记录 API、字段、组件、路由、消息和业务流程快照。
10
+ - `conflict-records/<conflictId>.json` 记录冲突,必须使用 `conflictStatus`,不能使用通用 `status` 裁决冲突。
11
+ - `task-index.json` 裁决 `taskStatus`;`change-ledger.json` 裁决 `changeStatus`;冲突文件裁决 `conflictStatus`;受影响任务记录裁决 `refreshStatus`。
12
+
13
+ 状态字段严格分域:`taskStatus=pending/assigned/accepted/executing/paused/blocked/completed/cancelled`;`changeStatus=proposed/reserved/in-progress/completed/conflict-pending/blocked/cancelled`;`conflictStatus=detected/awaiting-confirmation/resolved/rejected/blocked`;`refreshStatus=not-required/refresh-required/refreshed/blocked`。临时会话的 `queued` 不属于 `changeStatus`。
14
+
15
+ 取消只允许 `changeStatus=proposed/reserved -> cancelled`。同一事实、台账、冲突记录的状态源缺失、非法或 `revision` 不一致时,关联任务统一进入 `taskStatus=blocked`,并写 `blockedReason=status-inconsistent`,不得用最近写入内容覆盖。
16
+
17
+ ## 三道门禁
18
+
19
+ 1. 领取前:声明 `changeDomain`、目标路径、API、数据库字段、组件、路由和业务流程影响,读取当前共享事实和冲突记录。
20
+ 2. 写入前:重新校验基线、契约快照、同域活动任务和冲突状态;冲突时进入 `changeStatus=conflict-pending` 与 `conflictStatus=awaiting-confirmation`。
21
+ 3. 完成后:写入证据、更新共享事实和台账;受影响任务设置 `refreshStatus=refresh-required`,在刷新完成前保持 `taskStatus=paused` 或 `blocked`。
22
+
23
+ 冲突不得由单个会话自行裁决,不自动覆盖或合并。解决后由总工或业务确认人写入 `resolvedBy`、`resolvedAt`、`resolutionEvidence`,重新验证基线后才可继续。
24
+
25
+ ## changeDomain 与事务
26
+
27
+ 规范化格式至少包括 `file:<normalized-path>`、`api:<METHOD> <normalized-route>`、`db:<table>.<field>`、`component:<normalized-path>`、`flow:<business-flow-id>`。路径优先 realpath,统一 `/` 和 Unicode NFC;无法规范化写 `unknown`。
28
+
29
+ 跨文件写入必须使用 `coordinationTransactionId`,记录在 `.transactions/<coordinationTransactionId>.json`。事务阶段为 `prepared/validated/renamed/revision-updated/committed/recovery-required/blocked`;每个 `targetFiles` 条目必须有 `path`、`tempPath`、`beforeHash`、`afterHash`、`targetRevision`。按“临时文件、完整校验、原子重命名、更新 revision、提交事务”执行,重复请求复用同一事务。崩溃、部分重命名、权限失败或哈希不一致时保留记录并进入 `recovery-required` 或 `blocked`,不能只更新索引、删除历史或覆盖新版本。
30
+
31
+ ## 安全边界
32
+
33
+ 只读冲突审计不产生业务 diff。数据库、API、业务流程和跨端冲突未确认前不得 SQL、migration、seed、批量修复、接口兼容改动或自动合并。
@@ -49,3 +49,18 @@
49
49
  - 同步校验 `task-index.json`、`current-task.md`、`manifest.json` 和 `project-index.json` 的角色执行任务路径与索引。
50
50
  - 活动角色任务不可执行时仍保留在 `activeTaskIds`;只有活动列表为空才允许 current-task 为 idle/null。
51
51
  - 逐角色临时文件和索引必须原子写入;发现中断、冲突或写入失败时保留恢复记录,不清空活动任务。
52
+
53
+ ## v1.7.3 角色会话绑定目录
54
+
55
+ - Codex 角色会话绑定触发后,按需补齐 `xinyun-ai/sessions/`、`xinyun-ai/sessions/roles/` 和 `xinyun-ai/sessions/role-session-bindings.json`。
56
+ - 绑定模板来源固定为 `xinyun-ai-init/templates/role-session-binding.template.json`。
57
+ - `manifest.json`、`project-index.json` 和 `task-index.json` 必须登记 `roleSessions`、`roleSessionBindingIds`、`roleSessionBindings`、`provider=codex` 和 `sessionStatus` 枚举。
58
+ - 绑定目录只保存 Codex 宿主返回的真实 `sessionId` 摘要、onboarding 状态、失败原因和 audit,不保存伪造 sessionId。
59
+ - 宿主不支持创建子会话时,仍可补齐本地目录和降级记录,状态使用 `local-degraded-no-fake-session-id`。
60
+
61
+ ## v1.8 按需目录
62
+
63
+ - 多会话协调任务按需补齐 `xinyun-ai/coordination/`、`contract-snapshots/`、`conflict-records/` 和 `.transactions/`。
64
+ - Skill 路由任务按需补齐 `xinyun-ai/skills/registry.json`、`assignments.json` 和 `usage-records/`;分配字段必须是 `assignmentStatus`。
65
+ - 前端审计按需补齐 `xinyun-ai/frontend-audits/`;临时程序员任务按需补齐 `xinyun-ai/sessions/temporary/`。
66
+ - 普通咨询、首次极速初始化和不涉及这些能力的任务不创建空目录。目录补齐只修改 AI 控制面,不修改业务代码。
@@ -0,0 +1,9 @@
1
+ # v1.8-C 前端耦合审计与渐进式组件化
2
+
3
+ 适用微信小程序、uni-app 和 HTML。先审计,再决定是否改造;不整站重写,不默认更换 UI 框架,不自动把 HTML 转成小程序或 uni-app。
4
+
5
+ 审计记录必须包含页面/组件路径、平台、框架、`couplingType`、props、events、slots、状态、API、路由、业务流程依赖、`baselineHash`、`decision`、`status`、`coverage`、`evidence` 和 `unverifiedScope`。`couplingType` 使用 `template-style/state-view/api-page/route-page/business-page/cross-platform/shared-component/unknown`。
6
+
7
+ 审计状态使用 `not-started/assessing/partial/completed/blocked/unknown`;处理决定使用 `audit-only/refactor-now/defer/requires-confirmation/out-of-scope`;覆盖使用 `full/partial/unknown`。这些是审计记录的字段,不得与 `taskStatus`、`changeStatus` 或 `conflictStatus` 混用。
8
+
9
+ `audit-only` 必须零代码 diff。`refactor-now` 必须先有 `planId`、`userConfirmationId`、`permittedPaths`,并保留前后哈希、diff 证据和测试证据;单页面或单组件试点也必须遵守确认门禁。预算超限、权限失败或依赖未知只能输出 `partial/unknown` 和未验证范围,不能宣称完整审计。
@@ -63,3 +63,20 @@
63
63
  - `activeTaskIds` 包含未完成角色任务;`executableTaskIds` 只包含真正满足执行条件的任务。活动任务非空时不得写 `current-task.status=idle` 或 `taskId=null`。
64
64
  - 任务选择按 priority、createdAt、roleId、taskId 稳定排序;角色默认 priority 为 10、20、30、40、50。
65
65
  - 重复升级按逐角色 JCS-SHA-256 幂等键复用任务。写入失败记录 `blockedReason=write-failed`;部分成功为 `partial`,全失败为 `blocked`;索引失败时保留活动任务并在下次恢复。
66
+
67
+ ## v1.7.3 Codex 角色会话初始化
68
+
69
+ - 只有 5 个 `role-execution` 本地任务已存在或已按幂等键恢复后,才允许 Codex 主会话尝试创建真实角色子会话。
70
+ - 角色会话固定为 `project-owner`、`project-product`、`chief-engineer`、`programmer`、`test-reviewer` 五个,不创建第三个类型的会话。
71
+ - 会话创建属于 Codex 宿主编排规则,CLI 仍只创建 `xinyun-ai-init/`。
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
+ - 绑定必须使用 `provider=codex`,`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`。
74
+ - 幂等键固定为 `taskId + roleId + provider + targetVersion` 的 JCS-SHA-256。
75
+ - 真实 `sessionId` 必须来自 Codex 宿主返回值;不得伪造 sessionId。宿主不支持时记录 `local-degraded-no-fake-session-id`,`sessionId=null`。
76
+ - 创建成功后先进入只读 `onboarding`;`sessionStatus=ready` 必须等待职责理解、职责确认、成员 / 会话绑定和执行资格全部满足。
77
+
78
+ ## v1.8 控制面按需初始化
79
+
80
+ 需要多会话协作时,按 A-D 顺序补齐 `xinyun-ai/coordination/`、`xinyun-ai/skills/`、`xinyun-ai/frontend-audits/` 和 `xinyun-ai/sessions/temporary/` 的最小模板。普通咨询和首次极速初始化不强制创建这些业务记录目录。
81
+
82
+ 共享事实和 Skill 文件使用临时文件、完整校验和原子重命名。前端审计默认只读;临时会话只有用户确认的代码任务才可创建。不得修改业务代码、数据库、API、依赖、Git 或发布配置。
@@ -257,3 +257,30 @@ HTML 迁移只允许评估和单页面 / 区块试点计划;实际代码迁移
257
257
  - `activeTaskIds`、`executableTaskIds`、`currentTaskId`
258
258
  - `roleExecutionResult`:created / reused / blocked / write-failed
259
259
  - 活动任务非空时,交接单必须说明不可执行原因和下一步,不得写成“暂无待执行任务”。
260
+
261
+ ## v1.7.3 角色会话交接字段
262
+
263
+ 涉及 Codex 真实角色会话创建、绑定、恢复或降级时,任务单、交接单和行为证据必须补充:
264
+
265
+ - `provider`:固定为 codex
266
+ - `parentSessionId`
267
+ - `sessionId`:必须为 Codex 宿主返回的真实值;不得伪造 sessionId
268
+ - `sessionStatus`:pending / creating / created / onboarding / ready / blocked / failed / closed
269
+ - `sessionBindingId`
270
+ - `sessionBindingPath`:xinyun-ai/sessions/role-session-bindings.json
271
+ - `roleSessionPath`:xinyun-ai/sessions/roles/<roleId>.md
272
+ - `roleSessionIdempotency`:taskId + roleId + provider + targetVersion
273
+ - `hostCapability`:available / unavailable / permission-denied / unknown / failed
274
+ - `degradationReason`:local-degraded-no-fake-session-id / none
275
+ - `onboardingStatus`
276
+ - `created-but-writeback-failed` 恢复线索
277
+
278
+ 会话创建成功只代表可进入只读 onboarding;不得把 `created` 直接写成 `ready`,不得因此获得业务代码修改授权。普通咨询不创建角色会话,也不写 `role-session-bindings.json`。
279
+
280
+ ## v1.8 任务单补充
281
+
282
+ 涉及共享事实时记录 `factStatus`、`changeStatus`、`conflictStatus`、`refreshStatus`、`coordinationTransactionId`、`changeDomain`、目标文件和 revision。涉及 Skill 时记录 `skillId`、`assignmentStatus`、`usageStatus`、匹配证据、依赖、降级原因、`failureReason`、`nextAction` 和 `unverifiedScope`。
283
+
284
+ 涉及前端审计时记录 `couplingType`、`decision`、审计 `status`、`coverage`、props/events/slots、状态/API/路由/业务流依赖、前后哈希、diff 和测试证据。涉及临时程序员会话时记录 `taskId`、`changeDomain`、`sessionId`、会话 `status`、`occupancyStatus`、并发额度、`releaseAudit` 和 `closeEvidence`。
285
+
286
+ 任何跨会话冲突、状态源缺失、预算超限、权限失败或敏感信息无法确认时暂停或阻塞,不自动重试、合并、覆盖或释放。
@@ -0,0 +1,15 @@
1
+ # v1.8-B Skill 注册与技术栈路由
2
+
3
+ Skill 只能从 `xinyun-ai/skills/registry.json` 的已登记记录中选择。未登记、未审查、过期或被阻断的外部 Skill 不得执行,不自动安装 Python、Node 驱动、CLI 或第三方依赖。
4
+
5
+ ## 注册与选择
6
+
7
+ 每个 Skill 记录 `skillId`、`name`、`version`、`source`、`digest`、`priority`、`availabilityStatus`、`trustStatus`、`reviewedAt`、`allowedRoles`、`frameworks`、`platforms`、`dependencies`、`permissions`、`evidence`、`fallbackPlan`、`createdAt`、`updatedAt`。`availabilityStatus` 与 `trustStatus` 独立:前者为 `available/unavailable/disabled/unknown`,后者为 `unreviewed/reviewed/blocked/expired`,不得用 registry `status` 代替。
8
+
9
+ 按“项目明确绑定 > 框架专用 > 通用 Skill > fallback”选择;同级按稳定 `priority` 和 `skillId` 排序,不按扫描顺序随机选择。ThinkPHP、uni-app、微信小程序和 HTML 只在对应技术栈已确认时路由专用 Skill;未识别框架使用通用 Skill 并标记不确定性。
10
+
11
+ ## 分配与使用状态
12
+
13
+ `assignments.json` 使用 `assignmentStatus`,`usage-records/<usageRecordId>.json` 使用 `usageStatus`。固定映射为:`pending + selected`、`selected + selected/running`、`running + running`、`completed + completed`、`fallback + fallback`、`blocked + failed/blocked`、`cancelled + skipped`。`usageStatus=failed` 必须映射 `assignmentStatus=blocked`,并记录 `failureReason` 和 `nextAction`;非法组合统一 `assignmentStatus=blocked`。
14
+
15
+ 调用前记录匹配证据、使用工具、未使用工具、降级方案和 `unverifiedScope`。依赖缺失、权限不足、宿主不可用或未知框架只能 `usageStatus=fallback/blocked`,不得伪造已执行结果。使用记录不得保存 Token、密码、私钥、完整 `.env`、连接串或未经脱敏的项目内容。
@@ -0,0 +1,9 @@
1
+ # v1.8-D 临时程序员执行会话
2
+
3
+ 仅对已完成需求整理、技术影响审查、计划和用户确认的代码任务创建临时程序员会话。必须绑定单一 `taskId`、单一规范化 `changeDomain`、真实 `sessionId`、`planId`、`userConfirmationId` 和 `permittedPaths`;不加入永久成员名单。
4
+
5
+ 会话状态固定为 `pending/creating/onboarding/queued/executing/waiting-review/completed/blocked/failed/closed/cancelled`,合法主流程为 `pending -> creating -> onboarding -> executing -> waiting-review -> completed -> closed`。容量不足或同域冲突允许 `onboarding -> queued -> creating`;容量可用时不得强制排队。`changeStatus` 不使用 `queued`。
6
+
7
+ 并发上限为 3,最多同时占用 3 个运行额度,只统计 `creating/onboarding/executing/waiting-review`。`occupancyStatus` 独立使用 `occupied/released/unknown`;`pending/queued` 初始为 `released`,进入 `creating` 时原子占用。崩溃、锁损坏、超时或不可读时写 `occupancyStatus=unknown` 并继续占用,不得自动释放、自动重试或自动关闭。人工释放必须包含 `releaseAudit.auditId/releasedBy/releasedAt/reason/evidence`。
8
+
9
+ 同一变更域已有执行会话时排队或冲突待确认,不重复创建。队列按确认时间、优先级和 taskId 稳定排序。只有代码 diff、测试、共享事实和改动台账都同步,并写入 `closeEvidence`、`closedAt`、`closedBy` 后才能自动关闭;异常、冲突或测试失败保持阻塞。
@@ -101,3 +101,19 @@
101
101
  - 已有任务直接复用,缺失任务逐角色补建;不得覆盖用户修改的控制文件、业务任务或业务代码。
102
102
  - `activeTaskIds` 非空时,即使 `executableTaskIds=[]`,也必须让 `current-task.md` 指向最高优先级活动任务,不能显示 `idle`。
103
103
  - 单角色写入失败为 `blocked/write-failed`,部分成功为 `partial`,全失败为 `blocked`;索引更新失败不得清空活动索引,下次按幂等键恢复。
104
+
105
+ ## v1.7.3 升级创建和绑定真实角色会话
106
+
107
+ - 升级到 v1.7.3 时,先确认 5 个 `role-execution` 本地任务已存在;缺失时按 v1.7.2 幂等规则补齐,再处理真实会话创建。
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`。
110
+ - 如果会话已创建但回写失败,下一次升级必须先查询宿主已有会话并恢复绑定,记录 `created-but-writeback-failed` 和 audit,不得再次创建重复会话。
111
+ - 单角色创建或回写失败不得影响其他角色;失败角色进入 `blocked` 或 `failed` 并记录 `blockedReason` / `failureReason` / `nextAction`。
112
+ - Codex 宿主不支持创建子会话、权限不足或接口不可用时,使用本地降级 `local-degraded-no-fake-session-id`,保持 `sessionId=null`,不得伪造 sessionId。
113
+ - 创建成功后的角色会话为只读 `onboarding`,不得直接获得业务代码、数据库、API、配置、依赖、Git 写操作或发布授权。
114
+
115
+ ## v1.8 升级顺序
116
+
117
+ 升级先校验共享事实、状态源和 coordination transaction;再校验 Skill registry、`assignmentStatus`/`usageStatus` 映射;然后处理前端 audit-only 或已确认的单页面试点;最后才创建临时程序员会话。已有用户修改的控制文件不得静默覆盖,冲突或哈希不一致进入 `blocked`/`recovery-required`。
118
+
119
+ 同一 taskId + changeDomain 不得重复创建临时会话;容量不足进入 `queued`,unknown occupancy 保持占用,失败不得自动重试。升级不自动安装 Skill 依赖,不执行业务代码、数据库、API 或 Git 写操作。
@@ -185,6 +185,17 @@ CodeGraph 为必需能力时,只有 `initialized` 或 `healthy` 才能将结
185
185
  - `activeTaskIds` 非空时不得把 `current-task.md` 写成 idle/null;不可执行任务使用 pending 或 blocked,并显示 blockedReason/nextAction。
186
186
  - 重复升级按逐角色幂等键复用任务;写入或索引失败时保留活动任务并恢复,不得清空索引。
187
187
 
188
+ ## v1.7.3 Codex 角色会话自动创建与绑定
189
+
190
+ - v1.7.3 在 5 个 `role-execution` 本地任务创建或恢复后,由 Codex 主会话尝试创建 5 个真实角色子会话;这是 Codex 宿主编排规则,不是 npm CLI 行为。
191
+ - CLI 仍只创建 `xinyun-ai-init/`,不得直接创建 `xinyun-ai/`、业务代码或真实角色会话。
192
+ - 绑定文件固定为 `xinyun-ai/sessions/role-session-bindings.json`,角色会话目录固定为 `xinyun-ai/sessions/roles/`,模板为 `xinyun-ai-init/templates/role-session-binding.template.json`。
193
+ - 每个角色绑定必须记录 `provider=codex`、`parentSessionId`、真实 `sessionId`、`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`、理解进度、确认进度和阻塞原因。
194
+ - 会话幂等键固定为 `taskId + roleId + provider + targetVersion`;重复升级复用已有真实会话和绑定。
195
+ - 真实 `sessionId` 必须来自 Codex 宿主返回值;不得伪造 sessionId。宿主不支持时记录 `local-degraded-no-fake-session-id`,保持 `sessionId=null`。
196
+ - 创建后的角色会话先进入只读 `onboarding`;只有职责理解、职责确认、成员 / 会话绑定、确认门禁和执行资格都满足后才允许 `sessionStatus=ready`。
197
+ - 创建成功不等于业务代码修改授权;普通咨询不创建角色会话,不写绑定文件,不创建外部账号或第三个会话。
198
+
188
199
  AI 接手本项目时,请先读取:
189
200
 
190
201
  - `xinyun-ai/README.md`
@@ -199,3 +210,9 @@ AI 接手本项目时,请先读取:
199
210
  - decision=direct-map/rewrite-required/backend-required/unsupported/pending/unknown
200
211
  - status=planned/assessing/partial/blocked/paused/completed
201
212
  - coverage=full/partial/unknown
213
+
214
+ ## v1.8 多会话执行边界
215
+
216
+ 共享事实、改动台账和冲突记录必须使用 `factStatus`、`changeStatus`、`conflictStatus` 分域状态;Skill 分配必须使用 `assignmentStatus`,使用结果必须使用 `usageStatus`。不得把 `assignments.json.status` 当作正式字段,也不得把临时会话 `queued` 写进改动状态。
217
+
218
+ 前端 `audit-only` 只能审计,禁止产生 diff;`refactor-now` 必须有计划、确认、允许路径、前后哈希、diff 和测试证据。临时程序员只能执行已确认任务,单变更域不得并发写入,最多 3 个运行会话;`occupancyStatus=unknown` 时不得自动释放。
@@ -0,0 +1,10 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "changes": [],
4
+ "recordContract": {
5
+ "requiredFields": ["schemaVersion", "changeId", "taskId", "sessionId", "actor", "role", "changeDomain", "targetPaths", "baselineHash", "changeStatus", "evidence", "createdAt", "updatedAt"],
6
+ "changeStatusEnum": ["proposed", "reserved", "in-progress", "completed", "conflict-pending", "blocked", "cancelled"],
7
+ "cancelRule": "Only proposed or reserved may become cancelled; in-progress cannot be silently cancelled."
8
+ },
9
+ "sourceOfTruth": "xinyun-ai/coordination/change-ledger.json"
10
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "conflictId": "",
3
+ "conflictType": "file|api|field|message|route|business-flow",
4
+ "participants": [],
5
+ "evidence": [],
6
+ "severity": "low|medium|high|critical",
7
+ "conflictStatus": "detected",
8
+ "decision": null,
9
+ "resolvedBy": null,
10
+ "resolvedAt": null,
11
+ "resolutionEvidence": [],
12
+ "nextAction": "awaiting-confirmation"
13
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "contractId": "",
3
+ "contractType": "api|database-field|component|route|message|business-flow",
4
+ "scope": [],
5
+ "contentHash": "",
6
+ "sourceRevision": "",
7
+ "capturedAt": "",
8
+ "changeId": ""
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "facts": [],
4
+ "recordContract": {
5
+ "requiredFields": ["schemaVersion", "factId", "factType", "scope", "valueHash", "source", "taskId", "sessionId", "evidence", "confidence", "factStatus", "revision", "observedAt", "updatedAt"],
6
+ "factStatusEnum": ["proposed", "confirmed", "superseded", "unknown", "blocked"]
7
+ },
8
+ "sourceOfTruth": "xinyun-ai/coordination/project-facts.json"
9
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "coordinationTransactionId": "",
4
+ "idempotencyKey": "",
5
+ "taskId": "",
6
+ "sessionId": "",
7
+ "targetFiles": [],
8
+ "phase": "prepared",
9
+ "attempt": 1,
10
+ "failureReason": null,
11
+ "recoveryOwner": null,
12
+ "createdAt": "",
13
+ "updatedAt": "",
14
+ "phaseEnum": ["prepared", "validated", "renamed", "revision-updated", "committed", "recovery-required", "blocked"],
15
+ "targetFileContract": ["path", "tempPath", "beforeHash", "afterHash", "targetRevision"]
16
+ }
@@ -428,6 +428,25 @@
428
428
  v1.7.2 fixed task contract keys: `taskKind=initialization-main`, `taskKind=initialization-record`, `taskKind=role-execution`.
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
+ 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}`.
433
+
434
+ ## v1.7.3 Codex 角色会话自动创建与绑定
435
+
436
+ - v1.7.3 只在 5 个 `role-execution` 本地任务已经创建或恢复后,才由 Codex 主会话尝试创建 5 个真实角色子会话:`project-owner`、`project-product`、`chief-engineer`、`programmer`、`test-reviewer`。
437
+ - 这是 Codex 宿主编排规则,不是 npm CLI 行为;CLI 边界保持不变,只创建 `xinyun-ai-init/`,不得直接创建 `xinyun-ai/`、业务代码或真实会话。
438
+ - 会话绑定固定登记到 `xinyun-ai/sessions/role-session-bindings.json`,角色会话目录为 `xinyun-ai/sessions/roles/`,绑定模板为 `xinyun-ai-init/templates/role-session-binding.template.json`。
439
+ - `manifest.json`、`project-index.json`、`task-index.json`、`role-execution` 任务、`assignments.json` 和 `init-result.json` 必须引用同一 `bindingId` / `sessionId` / `sessionStatus` 摘要。
440
+ - `provider=codex`;`sessionStatus=pending/creating/created/onboarding/ready/blocked/failed/closed`。
441
+ - 会话幂等键固定为 `taskId + roleId + provider + targetVersion` 的 JCS-SHA-256;重复升级必须复用已有真实会话和绑定,不得重复创建同一角色会话。
442
+ - 真实 `sessionId` 必须来自 Codex 宿主创建会话后的返回值;不得伪造 sessionId,不得用任务 ID、角色 ID、占位符或历史摘要冒充真实会话。
443
+ - Codex 宿主不支持创建子会话、创建接口不可用或权限不足时,只能记录 `local-degraded-no-fake-session-id`,保持 `sessionId=null`,并写入 `sessionStatus=blocked` 或 `failed`、`degradation.reason` 和 `nextAction`。
444
+ - 创建成功后角色会话先进入 `onboarding` 且只读读取入口规则、角色任务、职责确认和角色理解资料;`sessionStatus=ready` 必须等待真实 sessionId 回写、职责理解完成、职责确认完成、成员 / 会话绑定有效、确认门禁和执行资格全部满足。
445
+ - 创建成功不等于业务代码修改授权;任何业务代码、数据库、API、配置、依赖、Git 写操作或发布仍需独立计划和用户确认。
446
+ - 会话创建成功但回写失败时,必须记录 `created-but-writeback-failed`、真实 `sessionId` 来源、恢复线索和 audit;下次按幂等键查询并恢复绑定。
447
+ - 单角色创建、回写或 onboarding 失败不得影响其他角色;失败角色单独进入 `blocked` 或 `failed`。
448
+ - 任务界面、`current-task.md`、`init-result.json` 和项目索引必须展示 5 个角色会话入口、`sessionId`、`sessionStatus`、理解进度和阻塞原因。
449
+ - 普通咨询不创建角色会话,不写绑定文件,不创建外部账号,不创建第三个会话。
431
450
 
432
451
  - `current-task.md`、`tasks/<taskId>.md`、`init-result.json` 和 `task-lock.json` 的 `taskId`、`executionId`、`attempt`、状态和时间必须一致。
433
452
  - 任意文件出现不在表内的组合,主会话必须将任务改为 `blocked`,写入冲突原因并停止继续写入。
@@ -543,6 +562,20 @@ A single-role write failure records `status=blocked` and `blockedReason=write-fa
543
562
  - 幂等键固定为 `{sourceTaskId, roleId, taskKind, targetVersion}` 的 JCS-SHA-256;同键复用同一任务。
544
563
  - 单角色写入失败为 `blocked/write-failed`,部分成功为 `partial`,全失败为 `blocked`;索引更新中断时保留活动任务并按幂等键恢复,不得伪造 `idle`。
545
564
 
565
+ ## v1.8 多会话协作规则
566
+
567
+ 按 v1.8-A/B/C/D 分阶段执行:先完成共享事实、状态源和事务恢复,再路由 Skill,再进行前端审计,最后才允许临时程序员并行写入。
568
+
569
+ `project-facts.json` 的状态字段是 `factStatus`,`change-ledger.json` 是 `changeStatus`,冲突记录是 `conflictStatus`,任务索引是 `taskStatus`,受影响任务是 `refreshStatus`。`changeStatus` 仅允许 `proposed/reserved/in-progress/completed/conflict-pending/blocked/cancelled`,取消只允许 proposed/reserved;临时会话 `queued` 不能写入改动台账。来源缺失、枚举非法或 revision 不一致统一 `taskStatus=blocked`、`blockedReason=status-inconsistent`。
570
+
571
+ 跨文件控制面写入必须使用 `coordinationTransactionId` 和 `.transactions/<id>.json`,经过 `prepared/validated/renamed/revision-updated/committed/recovery-required/blocked` 阶段并逐项校验哈希。
572
+
573
+ Skill 分配使用 `assignmentStatus`,使用记录使用 `usageStatus`。固定映射为 pending+selected、selected+selected/running、running+running、completed+completed、fallback+fallback、blocked+failed/blocked、cancelled+skipped;`usageStatus=failed` 必须转为 assignmentStatus=blocked,并记录 failureReason/nextAction。
574
+
575
+ 前端审计的 `status` 仅属于审计记录,值为 `not-started/assessing/partial/completed/blocked/unknown`;处理决定使用 `audit-only/refactor-now/defer/requires-confirmation/out-of-scope`。audit-only 零 diff,refactor-now 必须绑定计划、确认、允许路径、前后哈希和测试证据。
576
+
577
+ 临时程序员会话最多并行 3 个,状态与 `occupancyStatus` 分离。`occupancyStatus=unknown` 时继续占用额度。同一 changeDomain 不重复写入;unknown 占用不得自动释放,人工释放必须记录 releaseAudit。异常、超时、写回失败和测试失败不得自动重试或伪造完成。
578
+
546
579
  ## 自我学习
547
580
 
548
581
  发现可复用经验时,先记录为候选经验。候选经验必须标注来源、适用范围、可信度、状态和最后验证时间。用户确认后,才能合并进正式规则。
@@ -125,8 +125,33 @@
125
125
  - executionEligible:false
126
126
  - memberId:null
127
127
  - sessionId:null
128
+ - parentSessionId:null
129
+ - provider:codex
130
+ - sessionStatus:pending / creating / created / onboarding / ready / blocked / failed / closed
131
+ - sessionBindingId:
132
+ - sessionBindingPath:xinyun-ai/sessions/role-session-bindings.json
128
133
  - taskIndex:xinyun-ai/tasks/task-index.json
129
134
  - currentTaskIdleStatus:status=idle, taskId=null, title=暂无待执行任务
135
+ - Codex 角色会话:
136
+ - provider:codex
137
+ - parentSessionId:
138
+ - requiredRoleCount:5
139
+ - createdCount:
140
+ - reusedCount:
141
+ - failedCount:
142
+ - blockedCount:
143
+ - localDegradedCount:
144
+ - bindingsPath:xinyun-ai/sessions/role-session-bindings.json
145
+ - sessionStatusEnum:pending / creating / created / onboarding / ready / blocked / failed / closed
146
+ - 角色会话入口:
147
+ - roleId:
148
+ - taskId:
149
+ - sessionId:
150
+ - sessionStatus:
151
+ - understandingStatus:
152
+ - blockedReason:
153
+ - 宿主能力:
154
+ - 降级原因:
130
155
  - 任务归档:
131
156
  - archiveTransactionId:
132
157
  - archivePath:xinyun-ai/tasks/archive/<taskId>/
@@ -252,3 +277,15 @@
252
277
  - status=planned/assessing/partial/blocked/paused/completed
253
278
  - coverage=full/partial/unknown
254
279
  - pauseReason=out-of-scope
280
+
281
+ ## v1.8 协作状态摘要
282
+
283
+ - 共享事实状态源:factStatus / revision:
284
+ - 改动台账状态:changeStatus:
285
+ - 冲突状态:conflictStatus:
286
+ - 受影响任务刷新状态:refreshStatus:
287
+ - coordinationTransactionId / phase:
288
+ - Skill assignmentStatus / usageStatus:
289
+ - 前端审计 decision / audit status / coverage:
290
+ - 临时会话 status / occupancyStatus / changeDomain:
291
+ - 未验证范围与阻塞原因:
@@ -0,0 +1,27 @@
1
+ {
2
+ "auditId": "",
3
+ "repoRoot": "",
4
+ "platform": "wechat-miniprogram|uni-app|html",
5
+ "framework": "",
6
+ "pagePath": "",
7
+ "componentPath": "",
8
+ "couplingType": "template-style|state-view|api-page|route-page|business-page|cross-platform|shared-component|unknown",
9
+ "props": [],
10
+ "events": [],
11
+ "slots": [],
12
+ "stateDependencies": [],
13
+ "apiDependencies": [],
14
+ "routeDependencies": [],
15
+ "businessFlowDependencies": [],
16
+ "baselineHash": "",
17
+ "decision": "audit-only",
18
+ "status": "not-started",
19
+ "coverage": "unknown",
20
+ "unverifiedScope": [],
21
+ "evidence": [],
22
+ "updatedAt": "",
23
+ "statusEnum": ["not-started", "assessing", "partial", "completed", "blocked", "unknown"],
24
+ "decisionEnum": ["audit-only", "refactor-now", "defer", "requires-confirmation", "out-of-scope"],
25
+ "coverageEnum": ["full", "partial", "unknown"],
26
+ "refactorNowRequired": ["planId", "userConfirmationId", "permittedPaths", "beforeHash", "afterHash", "diffEvidence", "testEvidence"]
27
+ }
@@ -7,7 +7,7 @@
7
7
  "mode": "initialization",
8
8
  "status": "pending",
9
9
  "currentVersion": null,
10
- "targetVersion": "1.7.2",
10
+ "targetVersion": "1.8.0",
11
11
  "idempotencyKey": null,
12
12
  "createdFiles": [],
13
13
  "updatedFiles": [],
@@ -31,6 +31,19 @@
31
31
  "archiveTransactionId": null,
32
32
  "archiveStatus": "not-started"
33
33
  },
34
+ "roleSessions": {
35
+ "provider": "codex",
36
+ "parentSessionId": null,
37
+ "requiredRoleCount": 5,
38
+ "createdCount": 0,
39
+ "reusedCount": 0,
40
+ "failedCount": 0,
41
+ "blockedCount": 0,
42
+ "localDegradedCount": 0,
43
+ "bindings": [],
44
+ "hostCapability": "unknown",
45
+ "degradationReason": null
46
+ },
34
47
  "codeGraph": {
35
48
  "codeGraphRecordId": null,
36
49
  "required": true,
@@ -3,13 +3,13 @@
3
3
  "hashAlgorithm": "sha256",
4
4
  "contentEncoding": "utf8-normalized",
5
5
  "managedBy": "@pm_zhousl/xinyun-ai-init",
6
- "lastAppliedVersion": "1.7.2",
6
+ "lastAppliedVersion": "1.8.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.7.2",
12
+ "lastAppliedVersion": "1.8.0",
13
13
  "managedBy": "@pm_zhousl/xinyun-ai-init",
14
14
  "status": "unknown"
15
15
  }