@pm_zhousl/xinyun-ai-init 1.12.0 → 1.13.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 +1 -1
- package/init/xinyun-ai-init/rules/directory-self-completion.md +2 -0
- package/init/xinyun-ai-init/rules/init-rules.md +8 -0
- package/init/xinyun-ai-init/rules/session-workbench.md +12 -0
- package/init/xinyun-ai-init/rules/upgrade-rules.md +8 -0
- package/init/xinyun-ai-init/rules/v1.12.1-provider-session-binding.md +25 -0
- package/init/xinyun-ai-init/rules/v1.13.0-host-adapter.md +43 -0
- package/init/xinyun-ai-init/templates/AGENTS.template.md +2 -0
- package/init/xinyun-ai-init/templates/README.template.md +8 -0
- package/init/xinyun-ai-init/templates/core-rules.template.md +10 -0
- package/init/xinyun-ai-init/templates/current-task.template.md +2 -0
- package/init/xinyun-ai-init/templates/host-preflight.template.json +2 -0
- package/init/xinyun-ai-init/templates/init-result.template.json +50 -2
- package/init/xinyun-ai-init/templates/initialization-change-report.template.json +14 -0
- package/init/xinyun-ai-init/templates/manifest.template.json +58 -4
- package/init/xinyun-ai-init/templates/manual-session-binding.template.json +19 -3
- package/init/xinyun-ai-init/templates/manual-session-recovery.template.json +49 -0
- package/init/xinyun-ai-init/templates/project-check.template.md +9 -0
- package/init/xinyun-ai-init/templates/project-guide.template.md +5 -0
- package/init/xinyun-ai-init/templates/project-index.template.json +44 -1
- package/init/xinyun-ai-init/templates/provider-adapter.template.json +32 -0
- package/init/xinyun-ai-init/templates/provider-session-binding.template.json +77 -0
- package/init/xinyun-ai-init/templates/role-execution.template.md +7 -0
- package/init/xinyun-ai-init/templates/role-session-binding.template.json +25 -3
- package/init/xinyun-ai-init/templates/role-subtask.template.md +8 -0
- package/init/xinyun-ai-init/templates/task-index.template.json +22 -0
- package/init/xinyun-ai-init/templates/team/README.md +1 -0
- package/init/xinyun-ai-init/templates/team/assignments.json +12 -1
- package/init/xinyun-ai-init/version.json +1 -1
- package/package.json +1 -1
- package/scripts/verify-init-package.js +149 -1
- package/scripts/verify-rules-package.js +108 -6
- package/test-scenarios/v1.12.1-behavior-evidence.json +27 -0
- package/test-scenarios/v1.12.1-scenarios.md +42 -0
- package/test-scenarios/v1.13.0-behavior-evidence.json +650 -0
- package/test-scenarios/v1.13.0-scenarios.md +94 -0
|
@@ -61,6 +61,8 @@ When takeover initialization is authorized, create `host-preflight.json`, `index
|
|
|
61
61
|
- `manifest.json`、`project-index.json` 和 `task-index.json` 必须登记 `roleSessions`、`roleSessionBindingIds`、`roleSessionBindings`、`provider=codex` 和 `sessionStatus` 枚举。
|
|
62
62
|
- 绑定目录只保存 Codex 宿主返回的真实 `sessionId` 摘要、onboarding 状态、失败原因和 audit,不保存伪造 sessionId。
|
|
63
63
|
- 宿主不支持创建子会话时,仍可补齐本地目录和降级记录,状态使用 `local-degraded-no-fake-session-id`。
|
|
64
|
+
- v1.12.1 provider 绑定记录固定写入 `xinyun-ai/sessions/provider-session-bindings.json`,模板来源为 `xinyun-ai-init/templates/provider-session-binding.template.json`。只有宿主 canonical `providerSessionId`、身份/交互证据和独占占用均通过时才可绑定;未知或普通线程 ID 保持 blocked/pending。
|
|
65
|
+
- v1.13.0 按需补齐 `provider-adapter.json`、`manual-session-recovery.json` 和 `index/initialization-change-report.json`;宿主预检失败时只生成恢复引导和阻断记录,不先执行大规模 CodeGraph 扫描。
|
|
64
66
|
|
|
65
67
|
## v1.8 按需目录
|
|
66
68
|
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# 初始化规则
|
|
2
2
|
|
|
3
|
+
## v1.12.1 provider session binding
|
|
4
|
+
|
|
5
|
+
Use the provider-specific binding contract before role-session work. `providerSessionId` must be a provider canonical session value, not a normal thread ID. Identity and interaction evidence are required for binding; missing evidence remains pending or blocked.
|
|
6
|
+
|
|
7
|
+
v1.13.0 preflight is a hard early gate. Check all adapter operations before large CodeGraph analysis; on host failure preserve tasks, emit manual recovery prompts, and record `codeGraphDeferred=true`.
|
|
8
|
+
|
|
9
|
+
After an automatic role-session failure, the user decision gate offers `manual-create`, `defer`, and `redetect` exactly once. No decision means blocked state with no fake binding and no repeated prompt. Manual recovery requires the explicit confirmation `已创建,继续绑定`; defer preserves all task, snapshot, CodeGraph and recovery IDs; redetect runs only host preflight. Ready requires all five real role bindings and onboarding.
|
|
10
|
+
|
|
3
11
|
- 首次只创建最小 `xinyun-ai/` 骨架和极简 `AGENTS.md`。
|
|
4
12
|
- 首次不创建大量规则、模板、脚本和业务沉淀目录。
|
|
5
13
|
- 首次不执行语言级语法检查、lint、typecheck、测试或构建命令。
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# 会话工作台规则
|
|
2
2
|
|
|
3
|
+
## v1.12.1 provider-specific session binding
|
|
4
|
+
|
|
5
|
+
Read `v1.12.1-provider-session-binding.md` before role-session work. `providerSessionId` must come from the provider's canonical session API; a normal thread ID, task ID, title, history summary, or user statement is not a binding. Verify project identity, roleId, taskId, title, cwd, occupancy, and real send/receive evidence before binding. Missing evidence stays `bindingStatus=pending/blocked` and `executionEligible=false`.
|
|
6
|
+
|
|
7
|
+
Recovery reuses taskId and roleTaskId, increments attempt, and enters `recovery-required` after a writeback failure without creating duplicates. Unsupported hosts use `local-degraded` with `providerSessionId=null`; never fabricate a session ID.
|
|
8
|
+
|
|
9
|
+
## v1.13.0 host adapter preflight
|
|
10
|
+
|
|
11
|
+
Automatic session failure enters a one-time user decision gate: `manual-create`, `defer`, or `redetect`. Manual creation outputs all five role prompts and binds only after `已创建,继续绑定` plus canonical provider ID and identity/interaction evidence. Defer preserves task and snapshot IDs; redetect does host preflight only. Until all five role sessions complete onboarding, keep the project blocked.
|
|
12
|
+
|
|
13
|
+
Run the provider adapter preflight for create/reuse/send/receive/query-status/recover/close/control-file access before broad CodeGraph work. Any required unknown, unavailable, permission-denied, failed, not-verified, or dependency-gated capability blocks the role-session stage and defers the expensive scan. Unsupported hosts emit the five-role manual recovery guide and preserve original task IDs.
|
|
14
|
+
|
|
3
15
|
首次初始化不创建会话工作台。复杂任务中可按需创建:
|
|
4
16
|
|
|
5
17
|
```md
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# 升级规则
|
|
2
2
|
|
|
3
|
+
## v1.12.1 provider session binding
|
|
4
|
+
|
|
5
|
+
Validate provider canonical session identity, project identity, role/task, title/cwd, interaction evidence, and exclusive occupancy before reuse. Unknown or missing evidence is blocked; ordinary thread IDs cannot be reused. Writeback recovery reuses the original task IDs, increments attempt, and cannot create duplicate sessions.
|
|
6
|
+
|
|
7
|
+
v1.13.0 upgrades must compare initialization and pre-existing user changes by before/after hashes. Never replace an unverified old session or roll back pre-existing admin, supplier, uniapp, SQL, configuration, or business files.
|
|
8
|
+
|
|
9
|
+
If automatic role-session creation fails, write `decisionStatus=awaiting-user` and offer `manual-create`, `defer`, or `redetect` once. `manual-create` waits for `已创建,继续绑定` before canonical provider binding; `defer` reuses the original task, snapshot, CodeGraph and recovery records; `redetect` performs host preflight only. Missing decisions and missing role bindings remain blocked and never become ready.
|
|
10
|
+
|
|
3
11
|
如果项目已存在 `xinyun-ai/`,不要重复初始化,应进入升级检查模式。
|
|
4
12
|
|
|
5
13
|
升级流程:
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# v1.12.1 provider-specific session binding
|
|
2
|
+
|
|
3
|
+
## Canonical provider identity
|
|
4
|
+
|
|
5
|
+
`providerSessionId` is valid only when it is returned by the declared provider's supported session API as a canonical session identifier. A normal Codex thread ID, task ID, local filename, random value, title, history summary, or user statement is not sufficient evidence and must never be copied into `providerSessionId`.
|
|
6
|
+
|
|
7
|
+
Every binding records `provider`, `providerSessionId`, `roleId`, `taskId`, `projectRootHash`, `workspaceScope`, `repositoryScopeHash`, `workstream`, `title`, `cwd`, `createdAt`, `identityEvidence`, `interactionEvidence`, `bindingMode`, `bindingStatus`, `boundBy`, and `boundAt`.
|
|
8
|
+
|
|
9
|
+
`identityEvidence` must verify the provider session ID, project identity, role, task, title, cwd, evidence source, verification time, and evidence hash. `interactionEvidence` must contain a real send receipt, receive receipt, transcript hash, message count, recorded time, and evidence hash. Sensitive prompt or response content is redacted before persistence.
|
|
10
|
+
|
|
11
|
+
## Binding gate and states
|
|
12
|
+
|
|
13
|
+
`bindingMode` is one of `auto-created`, `auto-reused`, `manual`, `recovery`, or `local-degraded`. `bindingStatus` is one of `pending`, `validating`, `bound`, `blocked`, `rejected`, `released`, `conflict`, or `recovery-required`.
|
|
14
|
+
|
|
15
|
+
Only `bindingStatus=bound` with both evidence groups verified and exclusive occupancy may produce a project `sessionId` or `executionEligible=true`. Manual binding without evidence remains `pending` or `blocked`. Host unsupported, identity mismatch, role/task mismatch, invalid title/cwd, missing interaction evidence, occupied session, or writeback failure must not become ready.
|
|
16
|
+
|
|
17
|
+
## Reuse and recovery
|
|
18
|
+
|
|
19
|
+
Candidate reuse first validates the provider session and all project identity fields. The v1.9 eight-field JCS-SHA-256 key remains the candidate reuse key. v1.7.3 four-field data is compatibility lookup only and never selects or binds a candidate. Recovery reuses the original task and role-task IDs, increments `attempt`, preserves audit, and never creates duplicate tasks or sessions.
|
|
20
|
+
|
|
21
|
+
If the host cannot provide a canonical provider session ID, keep `providerSessionId=null`, record `bindingStatus=blocked`, `blockedReason=host-session-capability-unavailable`, and a concrete `nextAction`. Do not fabricate an ID.
|
|
22
|
+
|
|
23
|
+
## Boundaries
|
|
24
|
+
|
|
25
|
+
Do not install or log in to a provider, change business files, connect to a database, execute SQL, write Git, install dependencies, or publish npm packages as part of binding.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# v1.13.0 host adapter and manual recovery
|
|
2
|
+
|
|
3
|
+
## Session identity contract
|
|
4
|
+
|
|
5
|
+
The host identity fields are not interchangeable. `hostThreadId` identifies a host UI thread, `hostSessionId` identifies a host-side session record, `providerSessionId` is the only canonical provider session identity, `projectSessionId` is the local project binding identity, `sessionId` is a compatibility alias, and `orchestratorSessionId` identifies the parent orchestrator session. A host thread, task ID, filename, title, history summary or user statement must never be copied into `providerSessionId`.
|
|
6
|
+
|
|
7
|
+
For one role binding, `sessionId` and `projectSessionId` remain null until a provider canonical ID has been verified. They may then be written only according to the binding record's mapping rule, with `sessionId=providerSessionId`. The same `roleId`, `taskId`, project identity, provider ID, attempt and status must agree in role-session-binding, provider-session-binding, assignments, the role task, task-index and init-result. A project identity mismatch, a second verified binding for the same role/task, or an occupied provider session blocks the binding and records an audit entry.
|
|
8
|
+
|
|
9
|
+
Binding requires independently recorded evidence for all six provider operations: create-or-reuse, send, receive, query-status, recover and close. Missing evidence keeps the binding pending/blocked and `executionEligible=false`.
|
|
10
|
+
|
|
11
|
+
## Task-first session confirmation
|
|
12
|
+
|
|
13
|
+
Initialization first creates the named main task and five role-execution tasks. It must not create, reuse, or complete a provider session before the user chooses `create-and-onboard`. The initial control files record `sessionCreationDecision.status=awaiting-confirmation`, keep every `sessionId` and `providerSessionId` null, and remain `projectStatus=blocked` with `executionEligible=false`.
|
|
14
|
+
|
|
15
|
+
The user may choose `create-and-onboard` to enter provider create/reuse and read-only onboarding, or `defer` to preserve the task tree, snapshot, CodeGraph record and recovery record for later. A deferred run reuses the original task IDs and does not rescan or create duplicates. A missing decision does not auto-select either branch and does not repeatedly prompt.
|
|
16
|
+
|
|
17
|
+
## Preflight first
|
|
18
|
+
|
|
19
|
+
Before CodeGraph or broad project analysis, check the provider adapter for create, reuse, send, receive, query status, recover, close, and local control-file read/write. If a required host capability is unavailable, unknown, permission-denied, failed, not-verified, or dependency-gated, stop at preflight, keep project initialization blocked, and do not start a large CodeGraph scan.
|
|
20
|
+
|
|
21
|
+
## Adapter identity
|
|
22
|
+
|
|
23
|
+
The adapter must return the provider canonical `providerSessionId` through a supported provider API. Ordinary `threadId`, `taskId`, filename, title, history summary, or user statement cannot be used as a provider session ID. Automatic create/reuse validates projectRootHash, workspaceScope, roleId, taskId, title, cwd, identityEvidence, interactionEvidence, occupancy, and the original idempotency key.
|
|
24
|
+
|
|
25
|
+
## Manual recovery
|
|
26
|
+
|
|
27
|
+
When the host is unsupported, create only the local manual recovery guide for the five named roles. The guide contains the Chinese session title, responsibility, cwd and first read-only task prompt. After the user creates sessions, record the provider canonical ID and evidence; missing or unverifiable evidence remains pending/unknown/blocked. Recovery reuses taskId and roleTaskId, increments attempt, preserves the old binding, and never creates duplicate tasks or replaces an unverified session.
|
|
28
|
+
|
|
29
|
+
## Change isolation
|
|
30
|
+
|
|
31
|
+
Capture business, control-plane, Git and existing-task/session baselines before initialization. Classify every after-change path as initialization-created, initialization-updated, pre-existing-user-change, or control-plane-only. Never roll back or attribute pre-existing admin, supplier, uniapp, SQL, configuration or other business changes to initialization.
|
|
32
|
+
|
|
33
|
+
No provider login/install, dependency install, database connection, SQL, Git write, business-code change, or npm publish is allowed.
|
|
34
|
+
|
|
35
|
+
## Failure decision and manual recovery
|
|
36
|
+
|
|
37
|
+
When automatic role-session creation fails, record one decision record and present exactly three choices: `manual-create`, `defer`, or `redetect`. Until the user chooses, keep `projectStatus=blocked`, `decisionStatus=awaiting-user`, `executionEligible=false`, and all missing provider IDs null. Do not silently skip, fabricate a binding, or repeat the prompt.
|
|
38
|
+
|
|
39
|
+
`manual-create` emits the five standard role names, responsibilities, working directory and first read-only task prompts. Only the explicit phrase `已创建,继续绑定` starts binding. The host must return a real canonical `providerSessionId`; validate project identity, role, task, cwd, title, occupancy and send/receive evidence before binding. Reuse the original task IDs and increment `attempt`.
|
|
40
|
+
|
|
41
|
+
`defer` preserves the main task, five role tasks, project snapshot, CodeGraph record and recovery record. A later run must reuse them and must not rescan or create duplicate tasks. `redetect` runs host preflight only and does not repeat project initialization. All five roles must be bound and complete read-only onboarding before `projectStatus=ready`.
|
|
42
|
+
|
|
43
|
+
Each decision is one immutable record with `decisionId`, `userDecision`, `actor`, `source`, `decidedAt` and `decisionEvidence` containing `inputHash` and `evidenceHash`. The same decision fields must be equal in manual-session-recovery and init-result. Only one of `manual-create`, `defer`, or `redetect` may be selected; an absent choice remains blocked without a repeated prompt. Record `userDecision`, `requiredRoleCount`, `createdRoleCount`, `remainingRoleIds`, `decisionStatus`, `decidedAt`, `nextAction` and `decisionEvidence` in the recovery record and mirror them in `init-result.json`. Recovery reuses the original task IDs and increments `attempt`.
|
|
@@ -195,6 +195,8 @@ CodeGraph 为必需能力时,只有 `initialized` 或 `healthy` 才能将结
|
|
|
195
195
|
- 真实 `sessionId` 必须来自 Codex 宿主返回值;不得伪造 sessionId。宿主不支持时记录 `local-degraded-no-fake-session-id`,保持 `sessionId=null`。
|
|
196
196
|
- 创建后的角色会话先进入只读 `onboarding`;只有职责理解、职责确认、成员 / 会话绑定、确认门禁和执行资格都满足后才允许 `sessionStatus=ready`。
|
|
197
197
|
- 创建成功不等于业务代码修改授权;普通咨询不创建角色会话,不写绑定文件,不创建外部账号或第三个会话。
|
|
198
|
+
- v1.12.1 起,角色会话必须另外记录 provider canonical `providerSessionId`;普通线程 ID、taskId、标题或历史摘要不得直接绑定。绑定前必须验证项目身份、roleId、taskId、title、cwd、独占占用、`identityEvidence` 和 `interactionEvidence`;证据不全时保持 pending/blocked。
|
|
199
|
+
- v1.13.0 起先执行 provider adapter preflight;宿主必要能力失败或未知时快速 blocked,设置 `codeGraphDeferred=true`,只生成五角色人工恢复引导,不先做大规模 CodeGraph 扫描。初始化变更必须与项目原有 admin、supplier、uniapp、SQL 等改动分开归因,不回滚用户内容。
|
|
198
200
|
|
|
199
201
|
AI 接手本项目时,请先读取:
|
|
200
202
|
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
本目录是当前项目的 AI 协作工作区,采用“欣芸技术开发 Agent 流”。
|
|
4
4
|
|
|
5
|
+
## v1.12.1 provider session binding
|
|
6
|
+
|
|
7
|
+
The canonical external identity of a role session is the provider-returned `providerSessionId`. A normal thread ID, taskId, title, or history summary cannot bind a role. Binding requires project identity, roleId, taskId, title, cwd, exclusive occupancy, and real send/receive evidence; incomplete evidence cannot become ready or executionEligible.
|
|
8
|
+
|
|
9
|
+
## v1.13.0 host adapter and manual recovery
|
|
10
|
+
|
|
11
|
+
Run host adapter preflight before large CodeGraph analysis. Unsupported or unverifiable host capability blocks role sessions and emits a five-role manual recovery guide. Initialization change reports must separate newly created control files from pre-existing user changes.
|
|
12
|
+
|
|
5
13
|
## v1.10 接管门禁
|
|
6
14
|
|
|
7
15
|
当前项目必须先完成 `preflight-report.json` 和 `onboarding-report.json`,再进入业务代码开发。`project-status.json` 只有在项目身份、CodeGraph、基线、团队职责、五个真实角色会话、本地控制面、旧沉淀、宿主能力和敏感扫描全部通过时才可为 `ready`;缺失真实角色会话必须为 `blocked + required-role-session-not-created`。CLI 只创建 `xinyun-ai-init/`,AI 获得授权后才创建项目控制面。
|
|
@@ -606,6 +606,16 @@ Skill 分配使用 `assignmentStatus`,使用记录使用 `usageStatus`。固
|
|
|
606
606
|
|
|
607
607
|
总工维护 `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。
|
|
608
608
|
|
|
609
|
+
## v1.12.1 provider-specific session binding
|
|
610
|
+
|
|
611
|
+
角色会话的外部身份只能是 provider 返回的 canonical `providerSessionId`。普通线程 ID、taskId、标题、历史摘要或用户口述不能直接绑定。绑定前必须验证项目身份、roleId、taskId、title、cwd、独占占用和真实发送/接收交互证据;证据不全保持 `bindingStatus=pending/blocked`,不得 ready 或 executionEligible。创建回写失败复用原 taskId/roleTaskId、递增 attempt,不创建重复会话;宿主不可用时 `providerSessionId=null`,不得伪造。
|
|
612
|
+
|
|
613
|
+
## v1.13.0 host adapter and change isolation
|
|
614
|
+
|
|
615
|
+
宿主 adapter 必须先检测 create/reuse/send/receive/query-status/recover/close/control-file 读写。任一必要能力为 unknown、unavailable、permission-denied、failed、not-verified 或依赖未授权时,先 blocked 并设置 `codeGraphDeferred=true`,不得先做大规模 CodeGraph 扫描。宿主不可用时只生成五角色人工恢复引导。
|
|
616
|
+
|
|
617
|
+
初始化结果必须按 before/after hash 区分 `initialization-created`、`initialization-updated`、`pre-existing-user-change` 和 `control-plane-only`;不得回滚或归因用户已有业务改动。
|
|
618
|
+
|
|
609
619
|
数据库默认 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。
|
|
610
620
|
|
|
611
621
|
## 自我学习
|
|
@@ -148,6 +148,8 @@
|
|
|
148
148
|
- blockedCount:
|
|
149
149
|
- localDegradedCount:
|
|
150
150
|
- bindingsPath:xinyun-ai/sessions/role-session-bindings.json
|
|
151
|
+
- providerBindingsPath:xinyun-ai/sessions/provider-session-bindings.json
|
|
152
|
+
- providerSessionId:null;无宿主 canonical ID 时不得伪造
|
|
151
153
|
- sessionStatusEnum:pending / creating / created / onboarding / ready / blocked / failed / closed
|
|
152
154
|
- 角色会话入口:
|
|
153
155
|
- roleId:
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"reuseExistingSession",
|
|
9
9
|
"sendTask",
|
|
10
10
|
"receiveResult",
|
|
11
|
+
"querySessionStatus",
|
|
11
12
|
"recoverSession",
|
|
12
13
|
"closeSession",
|
|
13
14
|
"controlFileReadWrite"
|
|
@@ -19,6 +20,7 @@
|
|
|
19
20
|
"reuseExistingSession": {"capabilityId": "reuseExistingSession", "detectionMethod": "host-api", "status": "not-checked", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "blocked; query existing binding only", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null},
|
|
20
21
|
"sendTask": {"capabilityId": "sendTask", "detectionMethod": "host-api", "status": "not-checked", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "blocked; preserve task for resume", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null},
|
|
21
22
|
"receiveResult": {"capabilityId": "receiveResult", "detectionMethod": "host-api", "status": "not-checked", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "blocked; preserve task for resume", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null},
|
|
23
|
+
"querySessionStatus": {"capabilityId": "querySessionStatus", "detectionMethod": "host-api", "status": "not-checked", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "blocked; require manual provider verification", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null},
|
|
22
24
|
"recoverSession": {"capabilityId": "recoverSession", "detectionMethod": "host-api", "status": "not-checked", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "manual binding with evidence", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null},
|
|
23
25
|
"closeSession": {"capabilityId": "closeSession", "detectionMethod": "host-api", "status": "not-checked", "evidence": [], "dependencyStatus": "unknown", "fallbackPlan": "manual host close", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null},
|
|
24
26
|
"controlFileReadWrite": {"capabilityId": "controlFileReadWrite", "detectionMethod": "filesystem", "status": "not-checked", "evidence": [], "dependencyStatus": "not-required", "fallbackPlan": "blocked on control-file write failure", "usedTools": [], "unusedTools": [], "unverifiedScope": [], "failureReason": null, "checkedAt": null}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"statusEnum": ["pending", "initializing", "completed", "partial", "blocked", "unknown", "failed", "cancelled"],
|
|
10
10
|
"statusSource": "xinyun-ai/current-task.md",
|
|
11
11
|
"currentVersion": null,
|
|
12
|
-
"targetVersion": "1.
|
|
12
|
+
"targetVersion": "1.13.0",
|
|
13
13
|
"idempotencyKey": null,
|
|
14
14
|
"createdFiles": [],
|
|
15
15
|
"updatedFiles": [],
|
|
@@ -49,11 +49,15 @@
|
|
|
49
49
|
"identityMapping": {
|
|
50
50
|
"hostThreadId": null,
|
|
51
51
|
"hostSessionId": null,
|
|
52
|
+
"providerSessionId": null,
|
|
52
53
|
"projectSessionId": null,
|
|
54
|
+
"sessionId": null,
|
|
53
55
|
"orchestratorSessionId": null,
|
|
54
56
|
"mappingStatus": "pending",
|
|
55
57
|
"identityEvidence": [],
|
|
56
|
-
"creationEvidence": []
|
|
58
|
+
"creationEvidence": [],
|
|
59
|
+
"equivalenceRule": "sessionId equals providerSessionId only after canonical provider evidence is verified",
|
|
60
|
+
"requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"]
|
|
57
61
|
},
|
|
58
62
|
"realAiSessionVerified": false,
|
|
59
63
|
"hostCapability": "unknown",
|
|
@@ -76,6 +80,50 @@
|
|
|
76
80
|
"projectSnapshotReuse": "not-checked",
|
|
77
81
|
"stageTimingRecorded": false
|
|
78
82
|
},
|
|
83
|
+
"v1121": {
|
|
84
|
+
"providerSessionBindingsPath": "xinyun-ai/sessions/provider-session-bindings.json",
|
|
85
|
+
"providerSessionBindingTemplate": "xinyun-ai-init/templates/provider-session-binding.template.json",
|
|
86
|
+
"bindingGateStatus": "blocked",
|
|
87
|
+
"bindingStatusEnum": ["pending", "validating", "bound", "blocked", "rejected", "released", "conflict", "recovery-required"],
|
|
88
|
+
"realProviderSessionRequired": true,
|
|
89
|
+
"fakeProviderSessionIdProhibited": true,
|
|
90
|
+
"unverifiedScope": ["provider-specific host session evidence"]
|
|
91
|
+
},
|
|
92
|
+
"v113": {
|
|
93
|
+
"providerAdapterPath": "xinyun-ai/sessions/provider-adapter.json",
|
|
94
|
+
"manualSessionRecoveryPath": "xinyun-ai/sessions/manual-session-recovery.json",
|
|
95
|
+
"initializationChangeReportPath": "xinyun-ai/index/initialization-change-report.json",
|
|
96
|
+
"preflightStatus": "not-checked",
|
|
97
|
+
"codeGraphDeferred": false,
|
|
98
|
+
"changeOriginStatus": "not-checked",
|
|
99
|
+
"realProviderSessionRequired": true,
|
|
100
|
+
"userDecision": null,
|
|
101
|
+
"decisionId": null,
|
|
102
|
+
"actor": null,
|
|
103
|
+
"source": "user-confirmation",
|
|
104
|
+
"requiredRoleCount": 5,
|
|
105
|
+
"createdRoleCount": 0,
|
|
106
|
+
"remainingRoleIds": ["project-owner", "project-product", "chief-engineer", "programmer", "test-reviewer"],
|
|
107
|
+
"decisionStatus": "not-asked",
|
|
108
|
+
"decidedAt": null,
|
|
109
|
+
"nextAction": "present-choice-once",
|
|
110
|
+
"decisionEvidence": [],
|
|
111
|
+
"decisionEvidenceSchema": ["decisionId", "userDecision", "actor", "source", "decidedAt", "inputHash", "evidenceHash"],
|
|
112
|
+
"sessionCreationDecision": {
|
|
113
|
+
"decision": null,
|
|
114
|
+
"decisionId": null,
|
|
115
|
+
"status": "awaiting-confirmation",
|
|
116
|
+
"statusEnum": ["not-asked", "awaiting-confirmation", "approved", "deferred", "processing", "completed", "blocked"],
|
|
117
|
+
"actor": null,
|
|
118
|
+
"source": "user-confirmation",
|
|
119
|
+
"decidedAt": null,
|
|
120
|
+
"decisionEvidence": [],
|
|
121
|
+
"nextAction": "ask-create-or-defer",
|
|
122
|
+
"mainTaskCreatedBeforeSession": true,
|
|
123
|
+
"roleTasksCreatedBeforeSession": true,
|
|
124
|
+
"sessionIdsRemainNullUntilDecision": true
|
|
125
|
+
}
|
|
126
|
+
},
|
|
79
127
|
"v19": {
|
|
80
128
|
"projectIdentityPath": "xinyun-ai/project-identity.json",
|
|
81
129
|
"technicalLandscapePath": "xinyun-ai/technical-landscape.json",
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"reportId": "initialization-change-report-template",
|
|
4
|
+
"status": "not-checked",
|
|
5
|
+
"changeOriginEnum": ["initialization-created", "initialization-updated", "pre-existing-user-change", "control-plane-only"],
|
|
6
|
+
"baseline": {"businessFilesHash": null, "controlFilesHash": null, "gitStatusHash": null, "capturedAt": null},
|
|
7
|
+
"changes": [],
|
|
8
|
+
"classificationRule": "Compare before and after file hashes; never attribute pre-existing user changes to initialization and never roll them back.",
|
|
9
|
+
"requiredChangeFields": ["path", "origin", "beforeHash", "afterHash", "changedBy", "checkedAt", "evidence"],
|
|
10
|
+
"businessCodeChanged": {"value": "unknown", "evidence": []},
|
|
11
|
+
"sensitiveScan": {"status": "not-checked", "matches": []},
|
|
12
|
+
"createdAt": null,
|
|
13
|
+
"updatedAt": null
|
|
14
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"projectName": "",
|
|
3
|
-
"xinyunAiVersion": "1.
|
|
3
|
+
"xinyunAiVersion": "1.13.0",
|
|
4
4
|
"scriptVersion": "2026.07.23",
|
|
5
5
|
"schemaVersion": "1",
|
|
6
6
|
"initializationMode": "fast",
|
|
@@ -64,6 +64,7 @@
|
|
|
64
64
|
,"hostCapabilityPreflight": true
|
|
65
65
|
,"projectStatusGate": true
|
|
66
66
|
,"takeoverBaseline": true
|
|
67
|
+
,"providerSpecificSessionBinding": true
|
|
67
68
|
},
|
|
68
69
|
"tasking": {
|
|
69
70
|
"currentTask": "xinyun-ai/current-task.md",
|
|
@@ -85,12 +86,17 @@
|
|
|
85
86
|
"roleExecutionTemplate": "xinyun-ai-init/templates/role-execution.template.md",
|
|
86
87
|
"roleSessionBindings": "xinyun-ai/sessions/role-session-bindings.json",
|
|
87
88
|
"roleSessionBindingTemplate": "xinyun-ai-init/templates/role-session-binding.template.json",
|
|
89
|
+
"providerSessionBindingTemplate": "xinyun-ai-init/templates/provider-session-binding.template.json",
|
|
90
|
+
"providerSessionBindings": "xinyun-ai/sessions/provider-session-bindings.json",
|
|
88
91
|
"projectStatus": "xinyun-ai/project-status.json",
|
|
89
92
|
"preflightReport": "xinyun-ai/preflight-report.json",
|
|
90
93
|
"onboardingReport": "xinyun-ai/onboarding-report.json",
|
|
91
94
|
"hostCapabilities": "xinyun-ai/host-capabilities.json",
|
|
92
95
|
"takeoverBaseline": "xinyun-ai/index/takeover-baseline.json",
|
|
93
|
-
"controlPlaneIndex": "xinyun-ai/index/control-plane-index.json"
|
|
96
|
+
"controlPlaneIndex": "xinyun-ai/index/control-plane-index.json",
|
|
97
|
+
"providerAdapter": "xinyun-ai/sessions/provider-adapter.json",
|
|
98
|
+
"manualSessionRecovery": "xinyun-ai/sessions/manual-session-recovery.json",
|
|
99
|
+
"initializationChangeReport": "xinyun-ai/index/initialization-change-report.json"
|
|
94
100
|
},
|
|
95
101
|
"roleSessions": {
|
|
96
102
|
"enabled": true,
|
|
@@ -98,8 +104,10 @@
|
|
|
98
104
|
"directory": "xinyun-ai/sessions/roles/",
|
|
99
105
|
"bindings": "xinyun-ai/sessions/role-session-bindings.json",
|
|
100
106
|
"bindingTemplate": "xinyun-ai-init/templates/role-session-binding.template.json",
|
|
107
|
+
"providerSessionBindingTemplate": "xinyun-ai-init/templates/provider-session-binding.template.json",
|
|
108
|
+
"providerSessionBindings": "xinyun-ai/sessions/provider-session-bindings.json",
|
|
101
109
|
"parentSessionId": null,
|
|
102
|
-
"targetVersion": "1.
|
|
110
|
+
"targetVersion": "1.13.0",
|
|
103
111
|
"requiredRoleCount": 5,
|
|
104
112
|
"statusEnum": [
|
|
105
113
|
"pending",
|
|
@@ -264,12 +272,58 @@
|
|
|
264
272
|
"sharedProjectSnapshot": "xinyun-ai/index/shared-project-snapshot.json",
|
|
265
273
|
"initializationTiming": "xinyun-ai/index/initialization-timing.json",
|
|
266
274
|
"hostCapabilityStatusEnum": ["available", "available-with-dependency", "unavailable", "permission-denied", "unknown", "not-checked", "not-verified", "failed"],
|
|
267
|
-
"preflightRequiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "recoverSession", "closeSession", "controlFileReadWrite"],
|
|
275
|
+
"preflightRequiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "querySessionStatus", "recoverSession", "closeSession", "controlFileReadWrite"],
|
|
268
276
|
"resumeConfirmationPhrases": ["确认执行", "确认继续初始化"],
|
|
269
277
|
"codeGraphReuseStatuses": ["healthy", "initialized"],
|
|
270
278
|
"projectSnapshotReusePolicy": "reuse-until-business-or-codegraph-hash-changes",
|
|
271
279
|
"stageTimingRequiredFields": ["stageId", "attempt", "status", "startedAt", "finishedAt", "durationMs", "cacheHit", "failureReason", "bottleneck", "recoveryAction"]
|
|
272
280
|
},
|
|
281
|
+
"v1121": {
|
|
282
|
+
"status": "implemented-in-package",
|
|
283
|
+
"capability": "providerSpecificSessionBinding",
|
|
284
|
+
"providerBindingTemplate": "xinyun-ai-init/templates/provider-session-binding.template.json",
|
|
285
|
+
"providerBindings": "xinyun-ai/sessions/provider-session-bindings.json",
|
|
286
|
+
"providerEnum": ["codex"],
|
|
287
|
+
"bindingModeEnum": ["auto-created", "auto-reused", "manual", "recovery", "local-degraded"],
|
|
288
|
+
"bindingStatusEnum": ["pending", "validating", "bound", "blocked", "rejected", "released", "conflict", "recovery-required"],
|
|
289
|
+
"identityEvidenceRequired": ["providerSessionId", "projectRootHash", "workspaceScope", "roleId", "taskId", "title", "cwd", "source", "verifiedAt", "evidenceHash"],
|
|
290
|
+
"interactionEvidenceRequired": ["sendReceipt", "receiveReceipt", "transcriptHash", "messageCount", "recordedAt", "evidenceHash"],
|
|
291
|
+
"sessionIdentityFields": ["hostThreadId", "hostSessionId", "providerSessionId", "projectSessionId", "sessionId", "orchestratorSessionId"],
|
|
292
|
+
"canonicalSessionIdentity": "providerSessionId",
|
|
293
|
+
"sessionCompatibilityAlias": "sessionId",
|
|
294
|
+
"sessionIdentityMappingRule": "sessionId equals providerSessionId only after canonical provider evidence is verified; hostThreadId and hostSessionId are evidence only",
|
|
295
|
+
"requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"],
|
|
296
|
+
"crossFileSessionConsistency": "role-session-binding, provider-session-binding, assignments, task, task-index and init-result must agree on roleId, taskId, projectRootHash, providerSessionId, sessionId, attempt and status",
|
|
297
|
+
"bindingGate": "provider canonical ID + identity evidence + interaction evidence + exclusive occupancy",
|
|
298
|
+
"unsupportedHostPolicy": "blocked-without-fake-provider-session-id"
|
|
299
|
+
},
|
|
300
|
+
"v113": {
|
|
301
|
+
"status": "implemented-in-package",
|
|
302
|
+
"capability": "hostAdapterAndManualRecovery",
|
|
303
|
+
"providerAdapter": "xinyun-ai/sessions/provider-adapter.json",
|
|
304
|
+
"manualSessionRecovery": "xinyun-ai/sessions/manual-session-recovery.json",
|
|
305
|
+
"initializationChangeReport": "xinyun-ai/index/initialization-change-report.json",
|
|
306
|
+
"preflightRequiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "querySessionStatus", "recoverSession", "closeSession", "controlFileReadWrite"],
|
|
307
|
+
"fastBlockBeforeCodeGraph": true,
|
|
308
|
+
"sessionIdentityFields": ["hostThreadId", "hostSessionId", "providerSessionId", "projectSessionId", "sessionId", "orchestratorSessionId"],
|
|
309
|
+
"canonicalSessionIdentity": "providerSessionId",
|
|
310
|
+
"sessionCompatibilityAlias": "sessionId",
|
|
311
|
+
"sessionIdentityMappingRule": "sessionId equals providerSessionId only after canonical provider evidence is verified; hostThreadId and hostSessionId are evidence only",
|
|
312
|
+
"requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"],
|
|
313
|
+
"crossFileSessionConsistency": "role-session-binding, provider-session-binding, assignments, task, task-index and init-result must agree on roleId, taskId, projectRootHash, providerSessionId, sessionId, attempt and status",
|
|
314
|
+
"changeOriginEnum": ["initialization-created", "initialization-updated", "pre-existing-user-change", "control-plane-only"],
|
|
315
|
+
"manualRecoveryRoles": ["project-owner", "project-product", "chief-engineer", "programmer", "test-reviewer"],
|
|
316
|
+
"userDecisionEnum": ["manual-create", "defer", "redetect"],
|
|
317
|
+
"decisionStatusEnum": ["not-asked", "awaiting-user", "selected", "processing", "completed", "blocked"],
|
|
318
|
+
"decisionRequiredFields": ["decisionId", "userDecision", "actor", "source", "requiredRoleCount", "createdRoleCount", "remainingRoleIds", "decisionStatus", "decidedAt", "nextAction", "decisionEvidence"],
|
|
319
|
+
"decisionEvidenceFields": ["decisionId", "userDecision", "actor", "source", "decidedAt", "inputHash", "evidenceHash"],
|
|
320
|
+
"sessionCreationDecisionEnum": ["create-and-onboard", "defer"],
|
|
321
|
+
"sessionCreationStatusEnum": ["not-asked", "awaiting-confirmation", "approved", "deferred", "processing", "completed", "blocked"],
|
|
322
|
+
"sessionCreationDecisionRequiredFields": ["decision", "decisionId", "status", "actor", "source", "decidedAt", "decisionEvidence", "nextAction"],
|
|
323
|
+
"taskFirstSessionGate": "create main task and five role tasks first; ask user before creating or completing role sessions",
|
|
324
|
+
"manualBindingConfirmationPhrase": "已创建,继续绑定",
|
|
325
|
+
"noChoicePolicy": "remain-blocked-without-repeat-prompt"
|
|
326
|
+
},
|
|
273
327
|
"v111": {
|
|
274
328
|
"status": "implemented-in-package",
|
|
275
329
|
"capability": "initializationAcceleration",
|
|
@@ -5,16 +5,32 @@
|
|
|
5
5
|
"roleTaskId": null,
|
|
6
6
|
"roleId": null,
|
|
7
7
|
"sessionId": null,
|
|
8
|
-
"
|
|
8
|
+
"providerSessionId": null,
|
|
9
|
+
"projectRootHash": null,
|
|
10
|
+
"workspaceScope": null,
|
|
11
|
+
"title": null,
|
|
12
|
+
"cwd": null,
|
|
13
|
+
"sessionIdType": "legacy-project-compatibility-alias",
|
|
14
|
+
"sessionIdSemantics": "legacy compatibility field; it cannot be bound from hostThreadId, hostSessionId, ordinary threadId, taskId, title or history summary",
|
|
15
|
+
"canonicalSessionIdField": "providerSessionId",
|
|
16
|
+
"canonicalSessionIdSource": "provider-supported-session-api-response",
|
|
17
|
+
"hostIdentityFields": ["hostThreadId", "hostSessionId", "projectSessionId", "orchestratorSessionId"],
|
|
18
|
+
"hostThreadId": null,
|
|
19
|
+
"hostSessionId": null,
|
|
20
|
+
"projectSessionId": null,
|
|
21
|
+
"orchestratorSessionId": null,
|
|
9
22
|
"provider": "codex",
|
|
23
|
+
"bindingMode": "manual",
|
|
10
24
|
"boundBy": null,
|
|
11
25
|
"boundAt": null,
|
|
12
26
|
"evidence": [],
|
|
13
|
-
"evidenceRequiredFields": ["evidenceType", "source", "sessionId", "interactionHash", "beforeSnapshotHash", "afterSnapshotHash", "recordedAt"],
|
|
27
|
+
"evidenceRequiredFields": ["evidenceType", "source", "sessionId", "providerSessionId", "projectRootHash", "workspaceScope", "roleId", "taskId", "title", "cwd", "interactionHash", "beforeSnapshotHash", "afterSnapshotHash", "recordedAt"],
|
|
28
|
+
"requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"],
|
|
29
|
+
"identityMappingRule": "sessionId and projectSessionId remain null until providerSessionId and all requiredHostEvidence are verified; then sessionId=providerSessionId",
|
|
14
30
|
"bindingStatus": "pending",
|
|
15
31
|
"bindingStatusEnum": ["pending", "bound", "rejected", "blocked", "released"],
|
|
16
32
|
"executionEligible": false,
|
|
17
|
-
"eligibilityRule": "bound +
|
|
33
|
+
"eligibilityRule": "bound + verified providerSessionId + all requiredHostEvidence + identity evidence + interaction evidence + role onboarding ready",
|
|
18
34
|
"fakeSessionIdProhibited": true,
|
|
19
35
|
"rejectionReason": null,
|
|
20
36
|
"audit": [],
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"recoveryId": "manual-session-recovery-template",
|
|
4
|
+
"provider": "codex",
|
|
5
|
+
"status": "not-started",
|
|
6
|
+
"statusEnum": ["not-started", "guided", "awaiting-user", "validating", "recovered", "blocked", "failed"],
|
|
7
|
+
"userDecisionEnum": ["manual-create", "defer", "redetect"],
|
|
8
|
+
"decisionStatusEnum": ["not-asked", "awaiting-user", "selected", "processing", "completed", "blocked"],
|
|
9
|
+
"reuseContract": {"reuseTaskId": true, "reuseRoleTaskId": true, "incrementAttempt": true, "createDuplicateTasks": false, "replaceUnverifiedSession": false},
|
|
10
|
+
"taskFirstSessionGate": {
|
|
11
|
+
"mainTaskCreatedBeforeSession": true,
|
|
12
|
+
"roleTasksCreatedBeforeSession": true,
|
|
13
|
+
"sessionIdsRemainNullUntilDecision": true,
|
|
14
|
+
"sessionCreationDecisionEnum": ["create-and-onboard", "defer"],
|
|
15
|
+
"sessionCreationStatusEnum": ["not-asked", "awaiting-confirmation", "approved", "deferred", "processing", "completed", "blocked"],
|
|
16
|
+
"sessionCreationDecision": null,
|
|
17
|
+
"status": "awaiting-confirmation",
|
|
18
|
+
"decisionId": null,
|
|
19
|
+
"actor": null,
|
|
20
|
+
"source": "user-confirmation",
|
|
21
|
+
"decidedAt": null,
|
|
22
|
+
"decisionEvidence": [],
|
|
23
|
+
"nextAction": "ask-create-or-defer"
|
|
24
|
+
},
|
|
25
|
+
"roles": [
|
|
26
|
+
{"roleId":"project-owner","sessionTitle":"项目负责人|项目接管|项目范围与授权","responsibility":"项目范围、授权边界和最终项目确认","firstTaskPrompt":"请只读确认项目身份、接管范围、禁止操作和当前阻断,不修改业务代码。","providerSessionId":null,"bindingStatus":"pending"},
|
|
27
|
+
{"roleId":"project-product","sessionTitle":"产品负责人|项目接管|需求与验收","responsibility":"需求、验收标准和用户目标","firstTaskPrompt":"请只读整理项目目标、需求边界和验收条件,不修改业务代码。","providerSessionId":null,"bindingStatus":"pending"},
|
|
28
|
+
{"roleId":"chief-engineer","sessionTitle":"总工程师|项目接管|技术全景与影响","responsibility":"技术全景、架构影响和风险门禁","firstTaskPrompt":"请只读检查技术栈、架构、CodeGraph 状态和影响范围,不修改业务代码。","providerSessionId":null,"bindingStatus":"pending"},
|
|
29
|
+
{"roleId":"programmer","sessionTitle":"程序员|项目接管|实现准备","responsibility":"实现准备、文件责任和执行边界","firstTaskPrompt":"请只读确认实现范围、预计文件和禁止操作,不修改业务代码。","providerSessionId":null,"bindingStatus":"pending"},
|
|
30
|
+
{"roleId":"test-reviewer","sessionTitle":"测试审查员|项目接管|验证与发布门禁","responsibility":"测试证据、回归范围和发布门禁","firstTaskPrompt":"请只读确认验证命令、行为证据要求和发布阻断,不修改业务代码。","providerSessionId":null,"bindingStatus":"pending"}
|
|
31
|
+
],
|
|
32
|
+
"userDecision": null,
|
|
33
|
+
"decisionId": null,
|
|
34
|
+
"actor": null,
|
|
35
|
+
"source": "user-confirmation",
|
|
36
|
+
"requiredRoleCount": 5,
|
|
37
|
+
"createdRoleCount": 0,
|
|
38
|
+
"remainingRoleIds": ["project-owner", "project-product", "chief-engineer", "programmer", "test-reviewer"],
|
|
39
|
+
"decisionStatus": "not-asked",
|
|
40
|
+
"decidedAt": null,
|
|
41
|
+
"nextAction": "present-choice-once",
|
|
42
|
+
"decisionEvidence": [],
|
|
43
|
+
"noChoicePolicy": "remain-blocked-without-repeat-prompt",
|
|
44
|
+
"bindingRequiredFields": ["provider", "providerSessionId", "projectRootHash", "workspaceScope", "roleId", "taskId", "title", "cwd", "boundBy", "boundAt", "identityEvidence", "interactionEvidence"],
|
|
45
|
+
"decisionEvidenceSchema": ["decisionId", "userDecision", "actor", "source", "decidedAt", "inputHash", "evidenceHash"],
|
|
46
|
+
"fakeProviderSessionIdProhibited": true,
|
|
47
|
+
"createdAt": null,
|
|
48
|
+
"updatedAt": null
|
|
49
|
+
}
|
|
@@ -168,6 +168,15 @@
|
|
|
168
168
|
- 敏感扫描、业务文件 changedFiles 和禁止操作证明是否通过:待填写
|
|
169
169
|
- `projectStatus=ready` 和 `executionEligible=true` 是否仅在全部门禁通过后出现:待填写
|
|
170
170
|
|
|
171
|
+
## v1.12.1 provider session checks
|
|
172
|
+
|
|
173
|
+
- provider binding uses a host canonical `providerSessionId`: pending
|
|
174
|
+
- ordinary thread IDs, task IDs, titles, and summaries are rejected as provider identity: pending
|
|
175
|
+
- project, role, task, title, cwd, and exclusive occupancy evidence: pending
|
|
176
|
+
- redacted send/receive interaction evidence and transcript hash: pending
|
|
177
|
+
- manual binding without evidence remains pending/blocked: pending
|
|
178
|
+
- writeback recovery reuses task IDs, increments attempt, and creates no duplicate session: pending
|
|
179
|
+
|
|
171
180
|
## v1.9 检查
|
|
172
181
|
|
|
173
182
|
- 项目身份是否使用 realpath / lexical-fallback、Unicode NFC、projectRootHash 和 repositoryScopeHash:待填写
|
|
@@ -218,6 +218,11 @@
|
|
|
218
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
|
+
- providerSessionId:待填写;只能来自宿主 canonical session API,普通线程 ID 不得直接绑定
|
|
222
|
+
- provider binding:xinyun-ai/sessions/provider-session-bindings.json;必须有 identityEvidence、interactionEvidence 和 exclusive occupancy
|
|
223
|
+
- v1.13 host adapter:xinyun-ai/sessions/provider-adapter.json;预检失败时先 blocked 并延后 CodeGraph 大扫描
|
|
224
|
+
- manual recovery:xinyun-ai/sessions/manual-session-recovery.json;恢复原 taskId/roleTaskId 并递增 attempt
|
|
225
|
+
- initialization change report:xinyun-ai/index/initialization-change-report.json;区分初始化改动与项目原有改动
|
|
221
226
|
- onboarding:created 后先只读 onboarding,不能直接 ready
|
|
222
227
|
- host unsupported:local-degraded-no-fake-session-id
|
|
223
228
|
- created-but-writeback-failed:待填写恢复线索
|