@pm_zhousl/xinyun-ai-init 1.7.3 → 1.9.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 (48) hide show
  1. package/README.md +1 -1
  2. package/init/xinyun-ai-init/README.md +30 -4
  3. package/init/xinyun-ai-init/rules/coordination.md +33 -0
  4. package/init/xinyun-ai-init/rules/directory-self-completion.md +19 -0
  5. package/init/xinyun-ai-init/rules/frontend-audit.md +9 -0
  6. package/init/xinyun-ai-init/rules/init-rules.md +16 -1
  7. package/init/xinyun-ai-init/rules/session-workbench.md +18 -1
  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 +14 -1
  11. package/init/xinyun-ai-init/templates/AGENTS.template.md +18 -2
  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 +29 -3
  18. package/init/xinyun-ai-init/templates/current-task.template.md +24 -0
  19. package/init/xinyun-ai-init/templates/database-authorization.template.json +39 -0
  20. package/init/xinyun-ai-init/templates/frontend-audit.template.json +27 -0
  21. package/init/xinyun-ai-init/templates/init-result.template.json +10 -1
  22. package/init/xinyun-ai-init/templates/managed-baseline.template.json +2 -2
  23. package/init/xinyun-ai-init/templates/manifest.template.json +69 -6
  24. package/init/xinyun-ai-init/templates/project-check.template.md +22 -1
  25. package/init/xinyun-ai-init/templates/project-guide.template.md +18 -1
  26. package/init/xinyun-ai-init/templates/project-identity.template.json +23 -0
  27. package/init/xinyun-ai-init/templates/project-index.template.json +73 -0
  28. package/init/xinyun-ai-init/templates/requirement-packet.template.json +23 -0
  29. package/init/xinyun-ai-init/templates/role-execution.template.md +1 -1
  30. package/init/xinyun-ai-init/templates/role-session-binding.template.json +18 -2
  31. package/init/xinyun-ai-init/templates/session-candidates.template.json +19 -0
  32. package/init/xinyun-ai-init/templates/skills-assignments.template.json +19 -0
  33. package/init/xinyun-ai-init/templates/skills-registry.template.json +10 -0
  34. package/init/xinyun-ai-init/templates/task-index.template.json +5 -3
  35. package/init/xinyun-ai-init/templates/technical-impact-packet.template.json +31 -0
  36. package/init/xinyun-ai-init/templates/technical-landscape.template.json +41 -0
  37. package/init/xinyun-ai-init/templates/temporary-session.template.json +32 -0
  38. package/init/xinyun-ai-init/version.json +2 -2
  39. package/package.json +1 -1
  40. package/scripts/verify-init-package.js +309 -30
  41. package/scripts/verify-rules-package.js +197 -12
  42. package/test-scenarios/README.md +16 -4
  43. package/test-scenarios/fixtures/v1.9.0-behavior-fixture/README.md +9 -0
  44. package/test-scenarios/review-template.md +12 -0
  45. package/test-scenarios/scenarios.md +90 -3
  46. package/test-scenarios/v1.8.0-scenarios.md +39 -0
  47. package/test-scenarios/v1.9.0-behavior-evidence.json +269 -0
  48. 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.7.3.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.3`。
5
+ 当前规则版本:`1.9.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.9.0 project-isolated reuse is authoritative.
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` 即可。
@@ -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,6 +1099,32 @@ 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
+
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`。
1117
+
1118
+ ## v1.9 项目会话隔离、总工全景与数据库授权
1119
+
1120
+ 项目身份写入 `xinyun-ai/project-identity.json`。项目根优先使用 realpath,失败时使用 lexical-fallback 并记录 `identityEvidence`;路径统一 `/`、Unicode NFC,Windows 盘符大写且按不区分大小写规范化,Unix 保持大小写敏感。`projectRootHash` 和 `repositoryScopeHash` 不包含原始绝对路径,后者对稳定排序的 repository scope 使用 RFC 8785 JCS-SHA-256。
1121
+
1122
+ 会话候选必须同时匹配项目身份、仓库范围、workstream、角色、任务幂等键和权限范围。`sessionMatchStatus` 固定为 `reusable/renamed/duplicate-not-primary/other-project/unknown/not-reusable/requires-confirmation`,只有 `reusable` 或含完整改名 audit 的 `renamed` 才能绑定;其他项目不得展示完整路径、任务内容或 sessionId。候选排序和 `selectionEvidence` 必须可追溯,重复候选保留历史且不自动删除或合并。
1123
+
1124
+ 角色展示名使用 `项目简称|角色中文名|职责名称`,主会话使用 `项目简称|主会话|项目总调度`。改名只更新宿主展示名和本地摘要,历史 sessionId、旧标题、绑定 ID 和 audit 必须保留。
1125
+
1126
+ 总工维护 `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` 并重新确认。
1127
+
1128
+ 数据库默认 `databaseAccessMode=sql-only`。未明确授权连接时只输出 SQL,不连接、不读取真实数据、不执行 SQL、不安装驱动。连接、只读查询、结构变更和数据修改权限独立记录;四类授权状态固定为 `not-requested/requested/authorized/denied/expired/failed/unknown`,脱敏状态固定为 `verified/unverified/failed`。执行前校验规范化 SQL、参数、方言、targetEnvironment、授权范围和 `statementHash`。授权过期或输入变化时回到 `executionStatus=needs-confirmation`,受影响授权进入 `expired` 并追加 audit。
1129
+
1130
+ v1.9 不自动复用其他项目会话、不自动连接或修改数据库、不扩大 HTML 迁移范围,不执行 Git 写操作或 npm publish。
@@ -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、批量修复、接口兼容改动或自动合并。
@@ -57,3 +57,22 @@
57
57
  - `manifest.json`、`project-index.json` 和 `task-index.json` 必须登记 `roleSessions`、`roleSessionBindingIds`、`roleSessionBindings`、`provider=codex` 和 `sessionStatus` 枚举。
58
58
  - 绑定目录只保存 Codex 宿主返回的真实 `sessionId` 摘要、onboarding 状态、失败原因和 audit,不保存伪造 sessionId。
59
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 控制面,不修改业务代码。
67
+ - 普通咨询、首次极速初始化和不涉及这些能力的任务不创建空目录。目录补齐只修改 AI 控制面,不修改业务代码。
68
+
69
+ ## v1.9 按需目录
70
+
71
+ - `xinyun-ai/project-identity.json`
72
+ - `xinyun-ai/sessions/session-candidates.json`
73
+ - `xinyun-ai/technical-landscape.json`
74
+ - `xinyun-ai/packets/requirement-packet.json`
75
+ - `xinyun-ai/packets/technical-impact-packet.json`
76
+ - `xinyun-ai/database/authorization.json`
77
+
78
+ 小改和普通咨询不强制创建技术全景或 packet。创建后同步 manifest、project-index、current-task 和任务引用;只登记当前项目身份,不复制其他项目会话。
@@ -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` 和未验证范围,不能宣称完整审计。
@@ -71,6 +71,21 @@
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
+
78
+ ## v1.8 控制面按需初始化
79
+
80
+ 需要多会话协作时,按 A-D 顺序补齐 `xinyun-ai/coordination/`、`xinyun-ai/skills/`、`xinyun-ai/frontend-audits/` 和 `xinyun-ai/sessions/temporary/` 的最小模板。普通咨询和首次极速初始化不强制创建这些业务记录目录。
81
+
82
+ ## v1.9 初始化项目身份与联合门禁
83
+
84
+ 按需创建 `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,禁止保存原始绝对路径。
85
+
86
+ 会话候选状态固定为 `reusable/renamed/duplicate-not-primary/other-project/unknown/not-reusable/requires-confirmation`,只有 reusable 或有完整改名 audit 的 renamed 才能绑定。其他项目会话不得展示或复用,中文展示名使用项目简称、角色中文名和职责名称。
87
+
88
+ 技术全景只有 full coverage、空 unverifiedScope 和核心证据完整时才可 ready;partial/unknown 不得 ready。requirementPacket 与 technicalImpactPacket 必须同项目、task、版本和 hash;失效时进入 `packet-stale` 并阻断执行。数据库默认 `sql-only`,连接、查询、结构变更和数据修改分别授权,每条 SQL 必须校验 statementHash 和目标环境。
89
+ - v1.9 fields: `sessionMatchStatus`、`selectionEvidence`、`项目简称|角色中文名|职责名称`、`coverageStatus=full`、`databaseAccessMode=sql-only`、`targetEnvironment`。
90
+
91
+ 共享事实和 Skill 文件使用临时文件、完整校验和原子重命名。前端审计默认只读;临时会话只有用户确认的代码任务才可创建。不得修改业务代码、数据库、API、依赖、Git 或发布配置。
@@ -269,10 +269,27 @@ 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
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
273
  - `hostCapability`:available / unavailable / permission-denied / unknown / failed
274
274
  - `degradationReason`:local-degraded-no-fake-session-id / none
275
275
  - `onboardingStatus`
276
276
  - `created-but-writeback-failed` 恢复线索
277
277
 
278
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
+ 任何跨会话冲突、状态源缺失、预算超限、权限失败或敏感信息无法确认时暂停或阻塞,不自动重试、合并、覆盖或释放。
287
+
288
+ ## v1.9 会话与技术交接字段
289
+
290
+ 会话交接记录 `projectRootHash`、`workspaceScope`、`repositoryScopeHash`、`workstream`、`roleId`、`taskId`、`permissionScope`、`sessionMatchStatus`、`hostRecoveryAvailable`、`hostRecoveryEvidence` 和 `selectionEvidence`。只有 reusable 或完成改名 audit 的 renamed 可绑定当前项目。
291
+
292
+ 总工交接必须引用 technical-landscape、requirementPacket 和 technicalImpactPacket 的 ID、版本、sourceRevision 和 RFC8785 JCS-SHA-256 hash;任一 hash 失效时状态为 blocked、原因 packet-stale。技术全景 partial/unknown 不得写为 ready。
293
+
294
+ 数据库交接必须记录 `databaseAccessMode=sql-only`、四类授权、授权状态 `not-requested/requested/authorized/denied/expired/failed/unknown`、`statementHash`、targetEnvironment、`executionStatus`、`redactionStatus=verified/unverified/failed` 和完整 audit;授权变化后不得继续执行旧 SQL,执行状态回到 `needs-confirmation`。
295
+ - v1.9 fields: `lexical-fallback`、`duplicate-not-primary`、`项目简称|角色中文名|职责名称`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`。
@@ -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` 后才能自动关闭;异常、冲突或测试失败保持阻塞。
@@ -106,8 +106,21 @@
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。
113
113
  - 创建成功后的角色会话为只读 `onboarding`,不得直接获得业务代码、数据库、API、配置、依赖、Git 写操作或发布授权。
114
+
115
+ ## v1.8 升级顺序
116
+
117
+ 升级先校验共享事实、状态源和 coordination transaction;再校验 Skill registry、`assignmentStatus`/`usageStatus` 映射;然后处理前端 audit-only 或已确认的单页面试点;最后才创建临时程序员会话。已有用户修改的控制文件不得静默覆盖,冲突或哈希不一致进入 `blocked`/`recovery-required`。
118
+
119
+ ## v1.9 升级兼容与失效处理
120
+
121
+ 升级前按当前项目身份的 realpath/lexical-fallback 结果计算 projectRootHash,按排序 repository scope 计算 repositoryScopeHash。只有八字段身份/任务键、权限和 RFC8785 JCS-SHA-256 复用键一致时复用会话;其他项目、重复非主会话和身份未知会话不得复用。保留 v1.7.3 sessionId、旧创建索引、v1.8 共享事实和双会话文件契约。
122
+
123
+ 技术全景、requirementPacket 或 technicalImpactPacket 的 contentHash、版本、项目身份或 sourceRevision 变化时,相关任务进入 blocked + blockedReason=packet-stale,不得静默使用旧结果。数据库默认仍为 sql-only,授权、目标环境、参数、方言或 statementHash 变化时追加 audit 并回到 needs-confirmation。
124
+ - v1.9 fields: `sessionMatchStatus`、`duplicate-not-primary`、`selectionEvidence`、`项目简称|角色中文名|职责名称`、`technical-landscape`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`、`databaseAccessMode=sql-only`、`targetEnvironment`。
125
+
126
+ 同一 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,9 +204,25 @@ 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.9 当前项目会话隔离与联合门禁
210
+
211
+ - 项目身份使用 `xinyun-ai/project-identity.json`;优先 realpath,失败使用 lexical-fallback,记录 `identityEvidence`,路径使用 `/` 和 Unicode NFC,`projectRootHash` 不保存原始绝对路径。
212
+ - 会话候选必须包含 `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 可绑定。
213
+ - 其他项目会话不得展示完整路径、任务内容或 sessionId;重复会话保留历史,只选择一个主会话。中文标题使用 `项目简称|角色中文名|职责名称`。
214
+ - 总工维护 `technical-landscape.json`,主会话维护 `requirement-packet.json`,总工输出 `technical-impact-packet.json`。技术全景只有 full coverage、空 unverifiedScope 和完整核心证据才可 ready;partial/unknown 不得 ready。
215
+ - 两个 packet 必须同 requirementId、taskId、projectRootHash、version,并使用 RFC8785 JCS-SHA-256。关联内容变化后进入 `blockedReason=packet-stale`,程序员不得执行。
216
+ - 数据库默认 `sql-only`;连接、查询、结构变更、数据修改分别授权,四类授权状态固定为 `not-requested/requested/authorized/denied/expired/failed/unknown`,`redactionStatus` 固定为 `verified/unverified/failed`。每条 SQL 执行前校验规范化 `statementHash`、targetEnvironment 和权限状态,过期或变化必须进入 `needs-confirmation` 并追加 audit。
217
+ - v1.9 fields: `selectionEvidence`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`、`databaseAccessMode=sql-only`。
208
218
  ## v1.7 machine-readable enum anchors
209
219
 
210
220
  - decision=direct-map/rewrite-required/backend-required/unsupported/pending/unknown
211
221
  - status=planned/assessing/partial/blocked/paused/completed
212
222
  - coverage=full/partial/unknown
223
+
224
+ ## v1.8 多会话执行边界
225
+
226
+ 共享事实、改动台账和冲突记录必须使用 `factStatus`、`changeStatus`、`conflictStatus` 分域状态;Skill 分配必须使用 `assignmentStatus`,使用结果必须使用 `usageStatus`。不得把 `assignments.json.status` 当作正式字段,也不得把临时会话 `queued` 写进改动状态。
227
+
228
+ 前端 `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
+ }
@@ -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,9 +559,35 @@ 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
+ ## 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
+
579
+ ## v1.9 项目会话隔离、总工全景与数据库授权
580
+
581
+ 项目身份落盘于 `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。
582
+
583
+ 会话候选至少有 `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。
584
+
585
+ 角色展示名固定为 `项目简称|角色中文名|职责名称`,主会话为 `项目简称|主会话|项目总调度`。改名只更新宿主展示名和 displayName,历史 sessionId、旧标题、绑定 ID 和 audit 必须保留。
586
+
587
+ 总工维护 `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。
588
+
589
+ 数据库默认 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。
590
+
565
591
  ## 自我学习
566
592
 
567
593
  发现可复用经验时,先记录为候选经验。候选经验必须标注来源、适用范围、可信度、状态和最后验证时间。用户确认后,才能合并进正式规则。
@@ -277,3 +277,27 @@
277
277
  - status=planned/assessing/partial/blocked/paused/completed
278
278
  - coverage=full/partial/unknown
279
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
+ - 未验证范围与阻塞原因:
292
+
293
+ ## v1.9 当前项目与技术联合状态摘要
294
+
295
+ - projectIdentity:`xinyun-ai/project-identity.json`
296
+ - projectRootHash / repositoryScopeHash:待填写
297
+ - 当前会话候选与 selectionEvidence:待填写
298
+ - 技术全景状态 / coverageStatus / unverifiedScope:待填写
299
+ - requirementPacketId / technicalImpactPacketId / 两个 contentHash:待填写
300
+ - packet 状态:captured / clarifying / proposed / confirmed / in-progress / blocked / completed / cancelled;技术影响:not-started / assessing / ready / partial / blocked
301
+ - packet 失效原因:packet-stale / 待填写
302
+ - databaseAccessMode:sql-only
303
+ - 数据库连接、查询、结构变更、数据修改授权状态:待填写
@@ -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": "not-run",
32
+ "executionStatusEnum": ["not-run", "needs-confirmation", "authorized", "executed", "failed", "unknown"],
33
+ "redactionStatus": "unverified",
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,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.3",
10
+ "targetVersion": "1.9.0",
11
11
  "idempotencyKey": null,
12
12
  "createdFiles": [],
13
13
  "updatedFiles": [],
@@ -44,6 +44,15 @@
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
+ },
47
56
  "codeGraph": {
48
57
  "codeGraphRecordId": null,
49
58
  "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.3",
6
+ "lastAppliedVersion": "1.9.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.3",
12
+ "lastAppliedVersion": "1.9.0",
13
13
  "managedBy": "@pm_zhousl/xinyun-ai-init",
14
14
  "status": "unknown"
15
15
  }