@pm_zhousl/xinyun-ai-init 1.8.0 → 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.
- package/init/xinyun-ai-init/README.md +18 -4
- package/init/xinyun-ai-init/rules/directory-self-completion.md +12 -0
- package/init/xinyun-ai-init/rules/init-rules.md +10 -1
- package/init/xinyun-ai-init/rules/session-workbench.md +10 -1
- package/init/xinyun-ai-init/rules/upgrade-rules.md +8 -1
- package/init/xinyun-ai-init/templates/AGENTS.template.md +12 -2
- package/init/xinyun-ai-init/templates/core-rules.template.md +15 -3
- package/init/xinyun-ai-init/templates/current-task.template.md +12 -0
- package/init/xinyun-ai-init/templates/database-authorization.template.json +39 -0
- package/init/xinyun-ai-init/templates/init-result.template.json +10 -1
- package/init/xinyun-ai-init/templates/managed-baseline.template.json +2 -2
- package/init/xinyun-ai-init/templates/manifest.template.json +24 -4
- package/init/xinyun-ai-init/templates/project-check.template.md +14 -1
- package/init/xinyun-ai-init/templates/project-guide.template.md +11 -1
- package/init/xinyun-ai-init/templates/project-identity.template.json +23 -0
- package/init/xinyun-ai-init/templates/project-index.template.json +34 -0
- package/init/xinyun-ai-init/templates/requirement-packet.template.json +23 -0
- package/init/xinyun-ai-init/templates/role-execution.template.md +1 -1
- package/init/xinyun-ai-init/templates/role-session-binding.template.json +18 -2
- package/init/xinyun-ai-init/templates/session-candidates.template.json +19 -0
- package/init/xinyun-ai-init/templates/task-index.template.json +5 -3
- package/init/xinyun-ai-init/templates/technical-impact-packet.template.json +31 -0
- package/init/xinyun-ai-init/templates/technical-landscape.template.json +41 -0
- package/init/xinyun-ai-init/version.json +1 -1
- package/package.json +1 -1
- package/scripts/verify-init-package.js +245 -31
- package/scripts/verify-rules-package.js +140 -12
- package/test-scenarios/README.md +11 -5
- package/test-scenarios/fixtures/v1.9.0-behavior-fixture/README.md +9 -0
- package/test-scenarios/review-template.md +1 -1
- package/test-scenarios/scenarios.md +53 -2
- package/test-scenarios/v1.9.0-behavior-evidence.json +269 -0
- package/test-scenarios/v1.9.0-scenarios.md +55 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
本目录是“欣芸技术开发 Agent 流”的初始化包,负责把完整 AI 执行要求下发到目标项目。
|
|
4
4
|
|
|
5
|
-
当前规则版本:`1.
|
|
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
|
|
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
|
|
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
|
-
|
|
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,17 @@ 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.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。
|
|
@@ -64,3 +64,15 @@
|
|
|
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.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 和任务引用;只登记当前项目身份,不复制其他项目会话。
|
|
@@ -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
|
-
-
|
|
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,13 @@
|
|
|
79
79
|
|
|
80
80
|
需要多会话协作时,按 A-D 顺序补齐 `xinyun-ai/coordination/`、`xinyun-ai/skills/`、`xinyun-ai/frontend-audits/` 和 `xinyun-ai/sessions/temporary/` 的最小模板。普通咨询和首次极速初始化不强制创建这些业务记录目录。
|
|
81
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
|
+
|
|
82
91
|
共享事实和 Skill 文件使用临时文件、完整校验和原子重命名。前端审计默认只读;临时会话只有用户确认的代码任务才可创建。不得修改业务代码、数据库、API、依赖、Git 或发布配置。
|
|
@@ -269,7 +269,7 @@ 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`
|
|
@@ -284,3 +284,12 @@ 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.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`。
|
|
@@ -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
|
|
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,11 @@
|
|
|
116
116
|
|
|
117
117
|
升级先校验共享事实、状态源和 coordination transaction;再校验 Skill registry、`assignmentStatus`/`usageStatus` 映射;然后处理前端 audit-only 或已确认的单页面试点;最后才创建临时程序员会话。已有用户修改的控制文件不得静默覆盖,冲突或哈希不一致进入 `blocked`/`recovery-required`。
|
|
118
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
|
+
|
|
119
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
|
-
-
|
|
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,17 @@ 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
|
|
@@ -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
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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,18 @@ Skill 分配使用 `assignmentStatus`,使用记录使用 `usageStatus`。固
|
|
|
576
576
|
|
|
577
577
|
临时程序员会话最多并行 3 个,状态与 `occupancyStatus` 分离。`occupancyStatus=unknown` 时继续占用额度。同一 changeDomain 不重复写入;unknown 占用不得自动释放,人工释放必须记录 releaseAudit。异常、超时、写回失败和测试失败不得自动重试或伪造完成。
|
|
578
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
|
+
|
|
579
591
|
## 自我学习
|
|
580
592
|
|
|
581
593
|
发现可复用经验时,先记录为候选经验。候选经验必须标注来源、适用范围、可信度、状态和最后验证时间。用户确认后,才能合并进正式规则。
|
|
@@ -289,3 +289,15 @@
|
|
|
289
289
|
- 前端审计 decision / audit status / coverage:
|
|
290
290
|
- 临时会话 status / occupancyStatus / changeDomain:
|
|
291
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
|
+
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"mode": "initialization",
|
|
8
8
|
"status": "pending",
|
|
9
9
|
"currentVersion": null,
|
|
10
|
-
"targetVersion": "1.
|
|
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.
|
|
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.
|
|
12
|
+
"lastAppliedVersion": "1.9.0",
|
|
13
13
|
"managedBy": "@pm_zhousl/xinyun-ai-init",
|
|
14
14
|
"status": "unknown"
|
|
15
15
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"projectName": "",
|
|
3
|
-
"xinyunAiVersion": "1.
|
|
3
|
+
"xinyunAiVersion": "1.9.0",
|
|
4
4
|
"scriptVersion": "2026.07.23",
|
|
5
5
|
"schemaVersion": "1",
|
|
6
6
|
"initializationMode": "fast",
|
|
@@ -51,6 +51,10 @@
|
|
|
51
51
|
"skillRouting": true,
|
|
52
52
|
"frontendCouplingAudit": true,
|
|
53
53
|
"temporaryProgrammerSessions": true
|
|
54
|
+
,"projectSessionIsolation": true
|
|
55
|
+
,"roleDisplayNaming": true
|
|
56
|
+
,"technicalLandscapeCoordination": true
|
|
57
|
+
,"databaseSqlOnlyAuthorization": true
|
|
54
58
|
},
|
|
55
59
|
"tasking": {
|
|
56
60
|
"currentTask": "xinyun-ai/current-task.md",
|
|
@@ -80,7 +84,7 @@
|
|
|
80
84
|
"bindings": "xinyun-ai/sessions/role-session-bindings.json",
|
|
81
85
|
"bindingTemplate": "xinyun-ai-init/templates/role-session-binding.template.json",
|
|
82
86
|
"parentSessionId": null,
|
|
83
|
-
"targetVersion": "1.
|
|
87
|
+
"targetVersion": "1.9.0",
|
|
84
88
|
"requiredRoleCount": 5,
|
|
85
89
|
"statusEnum": [
|
|
86
90
|
"pending",
|
|
@@ -94,13 +98,19 @@
|
|
|
94
98
|
],
|
|
95
99
|
"idempotency": {
|
|
96
100
|
"keyFields": [
|
|
101
|
+
"projectRootHash",
|
|
102
|
+
"workspaceScope",
|
|
103
|
+
"repositoryScopeHash",
|
|
104
|
+
"workstream",
|
|
97
105
|
"taskId",
|
|
98
106
|
"roleId",
|
|
99
107
|
"provider",
|
|
100
108
|
"targetVersion"
|
|
101
109
|
],
|
|
102
|
-
"algorithm": "JCS-SHA-256",
|
|
103
|
-
"duplicatePolicy": "reuse"
|
|
110
|
+
"algorithm": "RFC8785-JCS-SHA-256",
|
|
111
|
+
"duplicatePolicy": "reuse-one-primary-preserve-history",
|
|
112
|
+
"legacyCreationIndexFields": ["taskId", "roleId", "provider", "targetVersion"],
|
|
113
|
+
"legacyCreationIndexPolicy": "compatibility lookup only; never used for candidate selection or cross-project reuse"
|
|
104
114
|
},
|
|
105
115
|
"hostUnsupportedPolicy": "local-degraded-no-fake-session-id",
|
|
106
116
|
"readyPolicy": "created session enters onboarding first; ready requires role understanding, responsibility confirmation, and execution eligibility gates."
|
|
@@ -203,5 +213,15 @@
|
|
|
203
213
|
"pilotPlan": "xinyun-ai/migrations/html-to-client/pilot-plan.md",
|
|
204
214
|
"openIssues": "xinyun-ai/migrations/html-to-client/open-issues.md",
|
|
205
215
|
"recordJson": "xinyun-ai/migrations/html-to-client/migration-record.json"
|
|
216
|
+
},
|
|
217
|
+
"v19": {
|
|
218
|
+
"projectIdentity": "xinyun-ai/project-identity.json",
|
|
219
|
+
"sessionCandidates": "xinyun-ai/sessions/session-candidates.json",
|
|
220
|
+
"technicalLandscape": "xinyun-ai/technical-landscape.json",
|
|
221
|
+
"requirementPacket": "xinyun-ai/packets/requirement-packet.json",
|
|
222
|
+
"technicalImpactPacket": "xinyun-ai/packets/technical-impact-packet.json",
|
|
223
|
+
"databaseAuthorization": "xinyun-ai/database/authorization.json",
|
|
224
|
+
"packetHashAlgorithm": "RFC8785-JCS-SHA-256",
|
|
225
|
+
"databaseAccessModeDefault": "sql-only"
|
|
206
226
|
}
|
|
207
227
|
}
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
- `xinyun-ai/sessions/role-session-bindings.json` 是否可解析:待填写
|
|
132
132
|
- `xinyun-ai/sessions/roles/` 是否登记五个角色入口:待填写
|
|
133
133
|
- `sessionStatus` 是否只使用 pending / creating / created / onboarding / ready / blocked / failed / closed:待填写
|
|
134
|
-
- `roleSessionIdempotency` 是否为
|
|
134
|
+
- `roleSessionIdempotency` 是否为 v1.9 八字段 projectRootHash、workspaceScope、repositoryScopeHash、workstream、taskId、roleId、provider、targetVersion 的 RFC8785-JCS-SHA-256:待填写;旧四字段仅作创建兼容索引,不得参与候选选择或复用
|
|
135
135
|
- 真实 `sessionId` 是否来自宿主返回值:待填写
|
|
136
136
|
- 是否不存在伪造 sessionId:待填写
|
|
137
137
|
- 创建后是否先进入只读 onboarding,未直接 ready:待填写
|
|
@@ -154,3 +154,16 @@
|
|
|
154
154
|
- 前端 audit-only 是否零 diff,refactor-now 是否有确认、哈希、diff 和测试证据。
|
|
155
155
|
- 临时会话是否遵守单变更域、并发上限 3、unknown occupancy 和 releaseAudit。
|
|
156
156
|
- 是否未执行自动安装依赖、业务代码修改、数据库/API改动或 Git 写操作。
|
|
157
|
+
|
|
158
|
+
## v1.9 检查
|
|
159
|
+
|
|
160
|
+
- 项目身份是否使用 realpath / lexical-fallback、Unicode NFC、projectRootHash 和 repositoryScopeHash:待填写
|
|
161
|
+
- 会话候选是否使用固定 sessionMatchStatus,且只有 reusable / renamed 可绑定:待填写
|
|
162
|
+
- 是否记录 hostRecoveryAvailable、hostRecoveryEvidence、selectionEvidence 和改名 audit:待填写
|
|
163
|
+
- 中文职责化名称是否稳定且未暴露内部资格检查文案:待填写
|
|
164
|
+
- technical-landscape 是否满足 full coverage、unverifiedScope 为空和核心证据完整才 ready:待填写
|
|
165
|
+
- requirementPacket / technicalImpactPacket 是否同 requirementId、taskId、projectRootHash、version 和 JCS-SHA-256 hash:待填写
|
|
166
|
+
- packet 变化是否进入 `blockedReason=packet-stale`:待填写
|
|
167
|
+
- 数据库默认是否为 `sql-only`:待填写
|
|
168
|
+
- connectionStatus、queryAuthorization、schemaChangeAuthorization、dataMutationAuthorization 是否独立:待填写
|
|
169
|
+
- statementHash、targetEnvironment、executionStatus 和 audit 是否完整:待填写
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
- role session bindings:xinyun-ai/sessions/role-session-bindings.json
|
|
216
216
|
- role session directory:xinyun-ai/sessions/roles/
|
|
217
217
|
- sessionStatus:pending / creating / created / onboarding / ready / blocked / failed / closed
|
|
218
|
-
- roleSessionIdempotency:JCS-SHA-256(taskId, roleId, provider, targetVersion)
|
|
218
|
+
- roleSessionIdempotency:RFC8785-JCS-SHA-256(projectRootHash, workspaceScope, repositoryScopeHash, workstream, taskId, roleId, provider, targetVersion);v1.7.3 四字段仅作创建兼容索引,不参与候选选择、复用或跨项目身份判定
|
|
219
219
|
- parentSessionId:待填写
|
|
220
220
|
- real sessionId:待填写;不得伪造 sessionId
|
|
221
221
|
- onboarding:created 后先只读 onboarding,不能直接 ready
|
|
@@ -235,3 +235,13 @@
|
|
|
235
235
|
- Skill 路由:`xinyun-ai/skills/`;正式字段为 `assignmentStatus` 与 `usageStatus`。
|
|
236
236
|
- 前端耦合审计:`xinyun-ai/frontend-audits/`;audit-only 零 diff。
|
|
237
237
|
- 临时程序员会话:最多 3 个并行运行额度;unknown occupancy 不自动释放。
|
|
238
|
+
|
|
239
|
+
## v1.9 项目身份、会话复用与技术联合门禁
|
|
240
|
+
|
|
241
|
+
- 项目身份文件:`xinyun-ai/project-identity.json`。
|
|
242
|
+
- 项目根解析:realpath / lexical-fallback;projectRootHash:SHA-256;repositoryScopeHash:RFC8785 JCS-SHA-256。
|
|
243
|
+
- 会话候选:`reusable/renamed/duplicate-not-primary/other-project/unknown/not-reusable/requires-confirmation`;只有 reusable 或完整改名审计的 renamed 可绑定。
|
|
244
|
+
- 会话展示名:`项目简称|角色中文名|职责名称`;主会话:`项目简称|主会话|项目总调度`。
|
|
245
|
+
- 技术全景:`xinyun-ai/technical-landscape.json`;只有 full coverage、空 unverifiedScope 和核心证据完整才可 ready。
|
|
246
|
+
- packet:`requirement-packet.json` + `technical-impact-packet.json`;使用 RFC8785 JCS-SHA-256,失效时为 `packet-stale`。
|
|
247
|
+
- 数据库默认 `sql-only`;连接、查询、结构变更和数据修改权限独立,执行前校验 statementHash、目标环境和 audit。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"projectRootHash": null,
|
|
4
|
+
"workspaceScope": {
|
|
5
|
+
"scopeType": "project-root",
|
|
6
|
+
"scopePathHashes": [],
|
|
7
|
+
"scopeRevision": null
|
|
8
|
+
},
|
|
9
|
+
"repositoryScopeHash": null,
|
|
10
|
+
"workstream": null,
|
|
11
|
+
"identityEvidence": [],
|
|
12
|
+
"normalization": {
|
|
13
|
+
"resolutionMode": "unknown",
|
|
14
|
+
"pathSeparators": "/",
|
|
15
|
+
"unicodeNormalization": "NFC",
|
|
16
|
+
"windowsDriveCase": "upper",
|
|
17
|
+
"windowsCaseSensitivity": "insensitive",
|
|
18
|
+
"unixCaseSensitivity": "sensitive",
|
|
19
|
+
"excludedFields": ["mtime", "inode", "temporaryPath"]
|
|
20
|
+
},
|
|
21
|
+
"createdAt": "2026-07-24T00:00:00.000Z",
|
|
22
|
+
"updatedAt": "2026-07-24T00:00:00.000Z"
|
|
23
|
+
}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"projectSummary": "",
|
|
3
|
+
"projectIdentity": {
|
|
4
|
+
"path": "xinyun-ai/project-identity.json",
|
|
5
|
+
"projectRootHash": null,
|
|
6
|
+
"workspaceScope": {"scopeType": "project-root", "scopePathHashes": [], "scopeRevision": null},
|
|
7
|
+
"repositoryScopeHash": null,
|
|
8
|
+
"identityEvidence": [],
|
|
9
|
+
"resolutionMode": "unknown"
|
|
10
|
+
},
|
|
3
11
|
"understanding": {
|
|
4
12
|
"overall": "quick",
|
|
5
13
|
"workstreams": {},
|
|
@@ -150,6 +158,22 @@
|
|
|
150
158
|
"failed",
|
|
151
159
|
"closed"
|
|
152
160
|
],
|
|
161
|
+
"idempotency": {
|
|
162
|
+
"keyFields": [
|
|
163
|
+
"projectRootHash",
|
|
164
|
+
"workspaceScope",
|
|
165
|
+
"repositoryScopeHash",
|
|
166
|
+
"workstream",
|
|
167
|
+
"taskId",
|
|
168
|
+
"roleId",
|
|
169
|
+
"provider",
|
|
170
|
+
"targetVersion"
|
|
171
|
+
],
|
|
172
|
+
"algorithm": "RFC8785-JCS-SHA-256",
|
|
173
|
+
"duplicatePolicy": "reuse-one-primary-preserve-history",
|
|
174
|
+
"legacyCreationIndexFields": ["taskId", "roleId", "provider", "targetVersion"],
|
|
175
|
+
"legacyCreationIndexPolicy": "compatibility lookup only; never used for candidate selection or cross-project reuse"
|
|
176
|
+
},
|
|
153
177
|
"records": []
|
|
154
178
|
},
|
|
155
179
|
"coordination": {
|
|
@@ -224,6 +248,16 @@
|
|
|
224
248
|
"indexFile": "xinyun-ai/global-review/index.json",
|
|
225
249
|
"createOnFastInit": false
|
|
226
250
|
},
|
|
251
|
+
"v19": {
|
|
252
|
+
"projectIdentity": "xinyun-ai/project-identity.json",
|
|
253
|
+
"sessionCandidates": "xinyun-ai/sessions/session-candidates.json",
|
|
254
|
+
"technicalLandscape": "xinyun-ai/technical-landscape.json",
|
|
255
|
+
"requirementPacket": "xinyun-ai/packets/requirement-packet.json",
|
|
256
|
+
"technicalImpactPacket": "xinyun-ai/packets/technical-impact-packet.json",
|
|
257
|
+
"databaseAuthorization": "xinyun-ai/database/authorization.json",
|
|
258
|
+
"packetHashAlgorithm": "RFC8785-JCS-SHA-256",
|
|
259
|
+
"databaseAccessModeDefault": "sql-only"
|
|
260
|
+
},
|
|
227
261
|
"requirementParsing": {
|
|
228
262
|
"enabled": true,
|
|
229
263
|
"trigger": "ambiguous_or_change_or_high_risk",
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"packetId": "requirement-packet-template",
|
|
4
|
+
"requirementId": null,
|
|
5
|
+
"taskId": null,
|
|
6
|
+
"projectRootHash": null,
|
|
7
|
+
"version": "1.9.0",
|
|
8
|
+
"status": "captured",
|
|
9
|
+
"content": {
|
|
10
|
+
"userQuote": null,
|
|
11
|
+
"goal": null,
|
|
12
|
+
"acceptanceCriteria": [],
|
|
13
|
+
"priority": null,
|
|
14
|
+
"allowedScope": [],
|
|
15
|
+
"forbiddenScope": [],
|
|
16
|
+
"pendingQuestions": []
|
|
17
|
+
},
|
|
18
|
+
"evidence": [],
|
|
19
|
+
"sourceRevision": null,
|
|
20
|
+
"contentHash": null,
|
|
21
|
+
"createdAt": "2026-07-24T00:00:00.000Z",
|
|
22
|
+
"updatedAt": "2026-07-24T00:00:00.000Z"
|
|
23
|
+
}
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
|
|
50
50
|
- `idempotencyKey` 是对 `{sourceTaskId, roleId, taskKind, targetVersion}` 使用 v1.6 JCS 规范化 JSON 后计算的 SHA-256。
|
|
51
51
|
- 同一幂等键只允许对应一个角色后续任务;重复升级必须复用任务并补齐索引。
|
|
52
|
-
- `sessionIdempotencyKey`
|
|
52
|
+
- `sessionIdempotencyKey` 必须按 v1.9 `{projectRootHash, workspaceScope, repositoryScopeHash, workstream, taskId, roleId, provider, targetVersion}` 使用 RFC8785-JCS-SHA-256 计算;v1.7.3 四字段仅作创建兼容索引,不得参与候选选择、复用或跨项目身份判定。
|
|
53
53
|
- 同一 `sessionIdempotencyKey` 只允许绑定一个有效真实角色会话;会话已创建但本地回写失败时,下次升级必须按该键查询并补齐绑定,不得创建第二个会话。
|
|
@@ -6,7 +6,16 @@
|
|
|
6
6
|
"sessionId": null,
|
|
7
7
|
"parentSessionId": null,
|
|
8
8
|
"provider": "codex",
|
|
9
|
-
"targetVersion": "1.
|
|
9
|
+
"targetVersion": "1.9.0",
|
|
10
|
+
"projectRootHash": null,
|
|
11
|
+
"workspaceScope": {"scopeType": "project-root", "scopePathHashes": [], "scopeRevision": null},
|
|
12
|
+
"repositoryScopeHash": null,
|
|
13
|
+
"workstream": null,
|
|
14
|
+
"permissionScope": [],
|
|
15
|
+
"sessionMatchStatus": "unknown",
|
|
16
|
+
"hostRecoveryAvailable": false,
|
|
17
|
+
"hostRecoveryEvidence": [],
|
|
18
|
+
"selectionEvidence": null,
|
|
10
19
|
"sessionStatus": "pending",
|
|
11
20
|
"understandingStatus": "pending",
|
|
12
21
|
"confirmationStatus": "pending",
|
|
@@ -39,5 +48,12 @@
|
|
|
39
48
|
"reason": null,
|
|
40
49
|
"fakeSessionIdProhibited": true
|
|
41
50
|
},
|
|
42
|
-
"audit": []
|
|
51
|
+
"audit": [],
|
|
52
|
+
"renameAudit": null,
|
|
53
|
+
"displayName": null,
|
|
54
|
+
"projectDisplayName": null,
|
|
55
|
+
"roleDisplayName": null,
|
|
56
|
+
"responsibilityLabel": null,
|
|
57
|
+
"titleSource": "role-contract",
|
|
58
|
+
"titleVersion": "1.9.0"
|
|
43
59
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"candidates": [],
|
|
4
|
+
"sessionMatchStatusEnum": ["reusable", "renamed", "duplicate-not-primary", "other-project", "unknown", "not-reusable", "requires-confirmation"],
|
|
5
|
+
"reusableSessionStatusEnum": ["created", "onboarding", "ready"],
|
|
6
|
+
"selectionEvidence": {
|
|
7
|
+
"selectedSessionId": null,
|
|
8
|
+
"candidateSessionIds": [],
|
|
9
|
+
"ruleOrder": ["valid-binding", "reusable", "identity-complete", "ready", "updatedAt-desc", "sessionId-unicode-asc"],
|
|
10
|
+
"reason": null,
|
|
11
|
+
"checkedAt": null
|
|
12
|
+
},
|
|
13
|
+
"candidateRequiredFields": ["sessionId", "provider", "projectRootHash", "workspaceScope", "repositoryScopeHash", "workstream", "roleId", "taskId", "sessionStatus", "permissionScope", "updatedAt", "identityEvidence", "hostRecoveryAvailable", "hostRecoveryEvidence", "sessionMatchStatus"],
|
|
14
|
+
"reuseIdempotency": {
|
|
15
|
+
"keyFields": ["projectRootHash", "workspaceScope", "repositoryScopeHash", "workstream", "taskId", "roleId", "provider", "targetVersion"],
|
|
16
|
+
"algorithm": "RFC8785-JCS-SHA-256",
|
|
17
|
+
"duplicatePolicy": "reuse-one-primary-preserve-history"
|
|
18
|
+
}
|
|
19
|
+
}
|