@pm_zhousl/xinyun-ai-init 1.12.1 → 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.
Files changed (30) hide show
  1. package/init/xinyun-ai-init/README.md +1 -1
  2. package/init/xinyun-ai-init/rules/directory-self-completion.md +1 -0
  3. package/init/xinyun-ai-init/rules/init-rules.md +4 -0
  4. package/init/xinyun-ai-init/rules/session-workbench.md +6 -0
  5. package/init/xinyun-ai-init/rules/upgrade-rules.md +4 -0
  6. package/init/xinyun-ai-init/rules/v1.13.0-host-adapter.md +43 -0
  7. package/init/xinyun-ai-init/templates/AGENTS.template.md +1 -0
  8. package/init/xinyun-ai-init/templates/README.template.md +4 -0
  9. package/init/xinyun-ai-init/templates/core-rules.template.md +6 -0
  10. package/init/xinyun-ai-init/templates/host-preflight.template.json +2 -0
  11. package/init/xinyun-ai-init/templates/init-result.template.json +41 -2
  12. package/init/xinyun-ai-init/templates/initialization-change-report.template.json +14 -0
  13. package/init/xinyun-ai-init/templates/manifest.template.json +40 -4
  14. package/init/xinyun-ai-init/templates/manual-session-binding.template.json +12 -2
  15. package/init/xinyun-ai-init/templates/manual-session-recovery.template.json +49 -0
  16. package/init/xinyun-ai-init/templates/project-guide.template.md +3 -0
  17. package/init/xinyun-ai-init/templates/project-index.template.json +31 -1
  18. package/init/xinyun-ai-init/templates/provider-adapter.template.json +32 -0
  19. package/init/xinyun-ai-init/templates/provider-session-binding.template.json +17 -0
  20. package/init/xinyun-ai-init/templates/role-execution.template.md +6 -0
  21. package/init/xinyun-ai-init/templates/role-session-binding.template.json +8 -3
  22. package/init/xinyun-ai-init/templates/role-subtask.template.md +8 -0
  23. package/init/xinyun-ai-init/templates/task-index.template.json +20 -0
  24. package/init/xinyun-ai-init/templates/team/assignments.json +11 -1
  25. package/init/xinyun-ai-init/version.json +1 -1
  26. package/package.json +1 -1
  27. package/scripts/verify-init-package.js +100 -2
  28. package/scripts/verify-rules-package.js +77 -7
  29. package/test-scenarios/v1.13.0-behavior-evidence.json +650 -0
  30. package/test-scenarios/v1.13.0-scenarios.md +94 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  本目录是“欣芸技术开发 Agent 流”的初始化包,负责把完整 AI 执行要求下发到目标项目。
4
4
 
5
- 当前规则版本:`1.12.1`。
5
+ 当前规则版本:`1.13.0`。
6
6
 
7
7
  ## Codex 一句话入口
8
8
 
@@ -62,6 +62,7 @@ When takeover initialization is authorized, create `host-preflight.json`, `index
62
62
  - 绑定目录只保存 Codex 宿主返回的真实 `sessionId` 摘要、onboarding 状态、失败原因和 audit,不保存伪造 sessionId。
63
63
  - 宿主不支持创建子会话时,仍可补齐本地目录和降级记录,状态使用 `local-degraded-no-fake-session-id`。
64
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 扫描。
65
66
 
66
67
  ## v1.8 按需目录
67
68
 
@@ -4,6 +4,10 @@
4
4
 
5
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
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
+
7
11
  - 首次只创建最小 `xinyun-ai/` 骨架和极简 `AGENTS.md`。
8
12
  - 首次不创建大量规则、模板、脚本和业务沉淀目录。
9
13
  - 首次不执行语言级语法检查、lint、typecheck、测试或构建命令。
@@ -6,6 +6,12 @@ Read `v1.12.1-provider-session-binding.md` before role-session work. `providerSe
6
6
 
7
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
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
+
9
15
  首次初始化不创建会话工作台。复杂任务中可按需创建:
10
16
 
11
17
  ```md
@@ -4,6 +4,10 @@
4
4
 
5
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
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
+
7
11
  如果项目已存在 `xinyun-ai/`,不要重复初始化,应进入升级检查模式。
8
12
 
9
13
  升级流程:
@@ -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`.
@@ -196,6 +196,7 @@ CodeGraph 为必需能力时,只有 `initialized` 或 `healthy` 才能将结
196
196
  - 创建后的角色会话先进入只读 `onboarding`;只有职责理解、职责确认、成员 / 会话绑定、确认门禁和执行资格都满足后才允许 `sessionStatus=ready`。
197
197
  - 创建成功不等于业务代码修改授权;普通咨询不创建角色会话,不写绑定文件,不创建外部账号或第三个会话。
198
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 等改动分开归因,不回滚用户内容。
199
200
 
200
201
  AI 接手本项目时,请先读取:
201
202
 
@@ -6,6 +6,10 @@
6
6
 
7
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
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
+
9
13
  ## v1.10 接管门禁
10
14
 
11
15
  当前项目必须先完成 `preflight-report.json` 和 `onboarding-report.json`,再进入业务代码开发。`project-status.json` 只有在项目身份、CodeGraph、基线、团队职责、五个真实角色会话、本地控制面、旧沉淀、宿主能力和敏感扫描全部通过时才可为 `ready`;缺失真实角色会话必须为 `blocked + required-role-session-not-created`。CLI 只创建 `xinyun-ai-init/`,AI 获得授权后才创建项目控制面。
@@ -610,6 +610,12 @@ Skill 分配使用 `assignmentStatus`,使用记录使用 `usageStatus`。固
610
610
 
611
611
  角色会话的外部身份只能是 provider 返回的 canonical `providerSessionId`。普通线程 ID、taskId、标题、历史摘要或用户口述不能直接绑定。绑定前必须验证项目身份、roleId、taskId、title、cwd、独占占用和真实发送/接收交互证据;证据不全保持 `bindingStatus=pending/blocked`,不得 ready 或 executionEligible。创建回写失败复用原 taskId/roleTaskId、递增 attempt,不创建重复会话;宿主不可用时 `providerSessionId=null`,不得伪造。
612
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
+
613
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。
614
620
 
615
621
  ## 自我学习
@@ -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.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",
@@ -85,6 +89,41 @@
85
89
  "fakeProviderSessionIdProhibited": true,
86
90
  "unverifiedScope": ["provider-specific host session evidence"]
87
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
+ },
88
127
  "v19": {
89
128
  "projectIdentityPath": "xinyun-ai/project-identity.json",
90
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.12.1",
3
+ "xinyunAiVersion": "1.13.0",
4
4
  "scriptVersion": "2026.07.23",
5
5
  "schemaVersion": "1",
6
6
  "initializationMode": "fast",
@@ -93,7 +93,10 @@
93
93
  "onboardingReport": "xinyun-ai/onboarding-report.json",
94
94
  "hostCapabilities": "xinyun-ai/host-capabilities.json",
95
95
  "takeoverBaseline": "xinyun-ai/index/takeover-baseline.json",
96
- "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"
97
100
  },
98
101
  "roleSessions": {
99
102
  "enabled": true,
@@ -104,7 +107,7 @@
104
107
  "providerSessionBindingTemplate": "xinyun-ai-init/templates/provider-session-binding.template.json",
105
108
  "providerSessionBindings": "xinyun-ai/sessions/provider-session-bindings.json",
106
109
  "parentSessionId": null,
107
- "targetVersion": "1.12.1",
110
+ "targetVersion": "1.13.0",
108
111
  "requiredRoleCount": 5,
109
112
  "statusEnum": [
110
113
  "pending",
@@ -269,7 +272,7 @@
269
272
  "sharedProjectSnapshot": "xinyun-ai/index/shared-project-snapshot.json",
270
273
  "initializationTiming": "xinyun-ai/index/initialization-timing.json",
271
274
  "hostCapabilityStatusEnum": ["available", "available-with-dependency", "unavailable", "permission-denied", "unknown", "not-checked", "not-verified", "failed"],
272
- "preflightRequiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "recoverSession", "closeSession", "controlFileReadWrite"],
275
+ "preflightRequiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "querySessionStatus", "recoverSession", "closeSession", "controlFileReadWrite"],
273
276
  "resumeConfirmationPhrases": ["确认执行", "确认继续初始化"],
274
277
  "codeGraphReuseStatuses": ["healthy", "initialized"],
275
278
  "projectSnapshotReusePolicy": "reuse-until-business-or-codegraph-hash-changes",
@@ -285,9 +288,42 @@
285
288
  "bindingStatusEnum": ["pending", "validating", "bound", "blocked", "rejected", "released", "conflict", "recovery-required"],
286
289
  "identityEvidenceRequired": ["providerSessionId", "projectRootHash", "workspaceScope", "roleId", "taskId", "title", "cwd", "source", "verifiedAt", "evidenceHash"],
287
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",
288
297
  "bindingGate": "provider canonical ID + identity evidence + interaction evidence + exclusive occupancy",
289
298
  "unsupportedHostPolicy": "blocked-without-fake-provider-session-id"
290
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
+ },
291
327
  "v111": {
292
328
  "status": "implemented-in-package",
293
329
  "capability": "initializationAcceleration",
@@ -10,17 +10,27 @@
10
10
  "workspaceScope": null,
11
11
  "title": null,
12
12
  "cwd": null,
13
- "sessionIdType": "host-returned-real-session",
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,
14
22
  "provider": "codex",
15
23
  "bindingMode": "manual",
16
24
  "boundBy": null,
17
25
  "boundAt": null,
18
26
  "evidence": [],
19
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",
20
30
  "bindingStatus": "pending",
21
31
  "bindingStatusEnum": ["pending", "bound", "rejected", "blocked", "released"],
22
32
  "executionEligible": false,
23
- "eligibilityRule": "bound + real sessionId + evidence verified + role onboarding ready",
33
+ "eligibilityRule": "bound + verified providerSessionId + all requiredHostEvidence + identity evidence + interaction evidence + role onboarding ready",
24
34
  "fakeSessionIdProhibited": true,
25
35
  "rejectionReason": null,
26
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
+ }
@@ -220,6 +220,9 @@
220
220
  - real sessionId:待填写;不得伪造 sessionId
221
221
  - providerSessionId:待填写;只能来自宿主 canonical session API,普通线程 ID 不得直接绑定
222
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;区分初始化改动与项目原有改动
223
226
  - onboarding:created 后先只读 onboarding,不能直接 ready
224
227
  - host unsupported:local-degraded-no-fake-session-id
225
228
  - created-but-writeback-failed:待填写恢复线索
@@ -286,7 +286,7 @@
286
286
  "sharedProjectSnapshot": "xinyun-ai/index/shared-project-snapshot.json",
287
287
  "initializationTiming": "xinyun-ai/index/initialization-timing.json",
288
288
  "hostCapabilityStatusEnum": ["available", "available-with-dependency", "unavailable", "permission-denied", "unknown", "not-checked", "not-verified", "failed"],
289
- "preflightRequiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "recoverSession", "closeSession", "controlFileReadWrite"],
289
+ "preflightRequiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "querySessionStatus", "recoverSession", "closeSession", "controlFileReadWrite"],
290
290
  "resumeConfirmationPhrases": ["确认执行", "确认继续初始化"],
291
291
  "codeGraphReuseStatuses": ["healthy", "initialized"],
292
292
  "projectSnapshotReusePolicy": "reuse-until-business-or-codegraph-hash-changes",
@@ -300,6 +300,36 @@
300
300
  "bindingModeEnum": ["auto-created", "auto-reused", "manual", "recovery", "local-degraded"],
301
301
  "bindingStatusEnum": ["pending", "validating", "bound", "blocked", "rejected", "released", "conflict", "recovery-required"],
302
302
  "bindingGate": "provider canonical ID + identity evidence + interaction evidence + exclusive occupancy"
303
+ ,"sessionIdentityFields": ["hostThreadId", "hostSessionId", "providerSessionId", "projectSessionId", "sessionId", "orchestratorSessionId"]
304
+ ,"canonicalSessionIdentity": "providerSessionId"
305
+ ,"sessionCompatibilityAlias": "sessionId"
306
+ ,"sessionIdentityMappingRule": "sessionId equals providerSessionId only after canonical provider evidence is verified; hostThreadId and hostSessionId are evidence only"
307
+ ,"requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"]
308
+ },
309
+ "v113": {
310
+ "status": "implemented-in-package",
311
+ "providerAdapter": "xinyun-ai/sessions/provider-adapter.json",
312
+ "manualSessionRecovery": "xinyun-ai/sessions/manual-session-recovery.json",
313
+ "initializationChangeReport": "xinyun-ai/index/initialization-change-report.json",
314
+ "preflightRequiredCapabilities": ["createRealSession", "reuseExistingSession", "sendTask", "receiveResult", "querySessionStatus", "recoverSession", "closeSession", "controlFileReadWrite"],
315
+ "fastBlockBeforeCodeGraph": true,
316
+ "sessionIdentityFields": ["hostThreadId", "hostSessionId", "providerSessionId", "projectSessionId", "sessionId", "orchestratorSessionId"],
317
+ "canonicalSessionIdentity": "providerSessionId",
318
+ "sessionCompatibilityAlias": "sessionId",
319
+ "sessionIdentityMappingRule": "sessionId equals providerSessionId only after canonical provider evidence is verified; hostThreadId and hostSessionId are evidence only",
320
+ "requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"],
321
+ "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",
322
+ "changeOriginEnum": ["initialization-created", "initialization-updated", "pre-existing-user-change", "control-plane-only"],
323
+ "userDecisionEnum": ["manual-create", "defer", "redetect"],
324
+ "decisionStatusEnum": ["not-asked", "awaiting-user", "selected", "processing", "completed", "blocked"],
325
+ "decisionRequiredFields": ["decisionId", "userDecision", "actor", "source", "requiredRoleCount", "createdRoleCount", "remainingRoleIds", "decisionStatus", "decidedAt", "nextAction", "decisionEvidence"],
326
+ "decisionEvidenceFields": ["decisionId", "userDecision", "actor", "source", "decidedAt", "inputHash", "evidenceHash"],
327
+ "sessionCreationDecisionEnum": ["create-and-onboard", "defer"],
328
+ "sessionCreationStatusEnum": ["not-asked", "awaiting-confirmation", "approved", "deferred", "processing", "completed", "blocked"],
329
+ "sessionCreationDecisionRequiredFields": ["decision", "decisionId", "status", "actor", "source", "decidedAt", "decisionEvidence", "nextAction"],
330
+ "taskFirstSessionGate": "create main task and five role tasks first; ask user before creating or completing role sessions",
331
+ "manualBindingConfirmationPhrase": "已创建,继续绑定",
332
+ "noChoicePolicy": "remain-blocked-without-repeat-prompt"
303
333
  },
304
334
  "v111": {
305
335
  "status": "implemented-in-package",
@@ -0,0 +1,32 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "adapterId": "provider-adapter-template",
4
+ "provider": "codex",
5
+ "adapterVersion": "1.13.0",
6
+ "status": "not-checked",
7
+ "statusEnum": ["not-checked", "checking", "available", "available-with-dependency", "unavailable", "permission-denied", "unknown", "failed", "not-verified"],
8
+ "canonicalSessionIdField": "providerSessionId",
9
+ "canonicalSessionIdSource": "provider-supported-session-api-response",
10
+ "operations": {
11
+ "create": {"operationId": "createRealSession", "status": "not-checked", "evidence": [], "failureReason": null},
12
+ "reuse": {"operationId": "reuseExistingSession", "status": "not-checked", "evidence": [], "failureReason": null},
13
+ "send": {"operationId": "sendTask", "status": "not-checked", "evidence": [], "failureReason": null},
14
+ "receive": {"operationId": "receiveResult", "status": "not-checked", "evidence": [], "failureReason": null},
15
+ "queryStatus": {"operationId": "querySessionStatus", "status": "not-checked", "evidence": [], "failureReason": null},
16
+ "recover": {"operationId": "recoverSession", "status": "not-checked", "evidence": [], "failureReason": null},
17
+ "close": {"operationId": "closeSession", "status": "not-checked", "evidence": [], "failureReason": null},
18
+ "controlFileReadWrite": {"operationId": "controlFileReadWrite", "status": "not-checked", "evidence": [], "failureReason": null}
19
+ },
20
+ "identityValidation": ["providerSessionId", "projectRootHash", "workspaceScope", "roleId", "taskId", "title", "cwd", "identityEvidence"],
21
+ "interactionValidation": ["sendReceipt", "receiveReceipt", "transcriptHash", "messageCount", "interactionEvidence"],
22
+ "usedTools": [],
23
+ "unusedTools": [],
24
+ "dependencyStatus": "unknown",
25
+ "fallbackPlan": "blocked; emit manual recovery guide; preserve task IDs",
26
+ "unverifiedScope": ["real provider host adapter behavior"],
27
+ "failureReason": null,
28
+ "checkedAt": null,
29
+ "fakeSessionIdProhibited": true,
30
+ "ordinaryThreadIdProhibited": true,
31
+ "readyGate": "all required operations available and canonical ID plus identity and interaction evidence verified"
32
+ }
@@ -2,6 +2,11 @@
2
2
  "schemaVersion": 1,
3
3
  "bindingId": "provider-session-binding-template",
4
4
  "provider": "codex",
5
+ "hostThreadId": null,
6
+ "hostSessionId": null,
7
+ "projectSessionId": null,
8
+ "sessionId": null,
9
+ "orchestratorSessionId": null,
5
10
  "providerSessionId": null,
6
11
  "providerSessionIdType": "provider-canonical-session",
7
12
  "roleId": null,
@@ -25,6 +30,17 @@
25
30
  "verifiedAt": null,
26
31
  "evidenceHash": null
27
32
  },
33
+ "identityMapping": {
34
+ "hostThreadId": null,
35
+ "hostSessionId": null,
36
+ "providerSessionId": null,
37
+ "projectSessionId": null,
38
+ "sessionId": null,
39
+ "orchestratorSessionId": null,
40
+ "mappingStatus": "pending",
41
+ "equivalenceRule": "sessionId equals providerSessionId only after canonical provider evidence is verified",
42
+ "evidence": []
43
+ },
28
44
  "interactionEvidence": {
29
45
  "sendReceipt": null,
30
46
  "receiveReceipt": null,
@@ -37,6 +53,7 @@
37
53
  "bindingStatus": "pending",
38
54
  "executionEligible": false,
39
55
  "bindingStatusEnum": ["pending", "validating", "bound", "blocked", "rejected", "released", "conflict", "recovery-required"],
56
+ "requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"],
40
57
  "boundBy": null,
41
58
  "boundAt": null,
42
59
  "attempt": 1,
@@ -13,6 +13,11 @@
13
13
  - confirmationStatus:pending
14
14
  - memberId:null
15
15
  - sessionId:null
16
+ - providerSessionId:null
17
+ - hostThreadId:null(宿主线程证据,不可作为角色会话 ID)
18
+ - hostSessionId:null(宿主会话证据,不可作为角色会话 ID)
19
+ - projectSessionId:null
20
+ - orchestratorSessionId:null
16
21
  - parentSessionId:null
17
22
  - provider:codex
18
23
  - sessionStatus:pending
@@ -40,6 +45,7 @@
40
45
  - v1.7.3 中,Codex 主会话在 5 个 `role-execution` 本地任务创建或恢复后,可以为 `project-owner`、`project-product`、`chief-engineer`、`programmer`、`test-reviewer` 固定创建 5 个真实角色子会话。
41
46
  - 真实 `sessionId` 只能来自 Codex 宿主创建子会话后的返回值;不得使用 `taskId`、`roleTaskId`、随机占位字符串或本地模拟值冒充。
42
47
  - 会话绑定字段至少包含 `taskId`、`roleId`、`sessionId`、`parentSessionId`、`provider`、`sessionStatus`、`createdAt`、`updatedAt`。
48
+ - `providerSessionId` 是唯一可绑定的 provider canonical 会话标识;`sessionId` 只有在创建/复用、发送、接收、状态查询、恢复、关闭六类宿主证据全部验证后才能与其相等。
43
49
  - 会话状态固定为 `pending/creating/created/onboarding/ready/blocked/failed/closed`。
44
50
  - 会话创建成功后先进入 `sessionStatus=onboarding`,只读职责范围内资料并生成角色理解记录;不得因会话创建成功直接把任务标为 `ready` 或获得业务代码修改授权。
45
51
  - 只有角色理解完成、职责确认完成、成员/会话绑定满足、确认人关系无冲突且执行门禁满足时,才允许 `sessionStatus=ready` 与 `executionEligible=true`。
@@ -5,6 +5,7 @@
5
5
  "taskId": "role-execution-task-template",
6
6
  "roleId": "project-owner",
7
7
  "sessionId": null,
8
+ "sessionIdSemantics": "project compatibility alias; null until providerSessionId is verified",
8
9
  "providerSessionId": null,
9
10
  "providerSessionIdType": "provider-canonical-session",
10
11
  "parentSessionId": null,
@@ -29,11 +30,15 @@
29
30
  "hostSessionId": null,
30
31
  "projectSessionId": null,
31
32
  "orchestratorSessionId": null,
33
+ "providerSessionId": null,
34
+ "sessionId": null,
32
35
  "mappingStatus": "pending",
36
+ "equivalenceRule": "sessionId equals providerSessionId only after canonical provider evidence is verified",
33
37
  "identityEvidence": [],
34
- "creationEvidence": []
38
+ "creationEvidence": [],
39
+ "requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"]
35
40
  },
36
- "targetVersion": "1.12.1",
41
+ "targetVersion": "1.13.0",
37
42
  "projectRootHash": null,
38
43
  "workspaceScope": {"scopeType": "project-root", "scopePathHashes": [], "scopeRevision": null},
39
44
  "repositoryScopeHash": null,
@@ -83,5 +88,5 @@
83
88
  "roleDisplayName": null,
84
89
  "responsibilityLabel": null,
85
90
  "titleSource": "role-contract",
86
- "titleVersion": "1.12.1"
91
+ "titleVersion": "1.13.0"
87
92
  }