@pm_zhousl/xinyun-ai-init 1.13.0 → 1.13.1

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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  本目录是“欣芸技术开发 Agent 流”的初始化包,负责把完整 AI 执行要求下发到目标项目。
4
4
 
5
- 当前规则版本:`1.13.0`。
5
+ 当前规则版本:`1.13.1`。
6
6
 
7
7
  ## Codex 一句话入口
8
8
 
@@ -1137,7 +1137,7 @@ CodeGraph 唯一状态源为 `xinyun-ai/manifest.json` 的 `codeGraphRequired`
1137
1137
 
1138
1138
  `projectStatus` 固定为 `not-started/initializing/partial/blocked/ready`。只有全部 `requiredGates` 通过且无高风险阻塞时才允许 `executionEligible=true`。缺少真实角色会话时必须 `blocked + blockedReason=required-role-session-not-created`,不得伪造 `sessionId`。
1139
1139
 
1140
- Git none、无测试框架和工具链未检测只登记 `not-available/not-detected`、证据和 `unverifiedScope`,不伪造通过且不自动安装依赖。数据库默认 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`;未明确授权不得连接数据库或执行 SQL,只输出 SQL 计划。所有敏感信息不得写入任务、日志、交接单、JSON、Markdown 或 stdout/stderr。
1140
+ Git none、无测试框架和工具链未检测只登记 `not-available/not-detected`、证据和 `unverifiedScope`,不伪造通过且不自动安装依赖。数据库默认 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`;普通初始化不扫描数据库文件。数据库相关任务只读项目内受限的 SQL/schema/migration/model 文本文件,不连接本地或线上数据库、不查询真实数据、不执行 SQL。所有敏感信息不得写入任务、日志、交接单、JSON、Markdown 或 stdout/stderr。
1141
1141
 
1142
1142
  ## v1.9 项目会话隔离、总工全景与数据库授权
1143
1143
 
@@ -1149,6 +1149,6 @@ Git none、无测试框架和工具链未检测只登记 `not-available/not-dete
1149
1149
 
1150
1150
  总工维护 `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` 并重新确认。
1151
1151
 
1152
- 数据库默认 `databaseAccessMode=sql-only`。未明确授权连接时只输出 SQL,不连接、不读取真实数据、不执行 SQL、不安装驱动。连接、只读查询、结构变更和数据修改权限独立记录;四类授权状态固定为 `not-requested/requested/authorized/denied/expired/failed/unknown`,脱敏状态固定为 `verified/unverified/failed`。执行前校验规范化 SQL、参数、方言、targetEnvironment、授权范围和 `statementHash`。授权过期或输入变化时回到 `executionStatus=needs-confirmation`,受影响授权进入 `expired` 并追加 audit。
1152
+ 数据库正式模式为 `databaseAccessMode=local-files-read-only`,`legacyDatabaseAccessMode=sql-only` 仅为兼容标识;`sqlExecutionMode=generate-only`。只有数据库相关任务才读取项目内 `*.sql`、`*.ddl`、`*.schema`、`*.migration` 以及 `database/`、`migrations/`、`schema/`、`models/` 下的文本文件。严禁连接本地或线上数据库、打开 SQLite/数据库服务、查询真实数据、执行 SQL、migration、seed 或修改数据,也不自动安装驱动。连接、只读查询、结构变更和数据修改权限仍独立记录;四类授权状态固定为 `not-requested/requested/authorized/denied/expired/failed/unknown`,脱敏状态固定为 `verified/unverified/failed`。SQL 只作为 review 计划输出,需校验规范化 SQL、参数、方言、targetEnvironment、授权范围和 `statementHash`;授权过期或输入变化时回到 `executionStatus=needs-confirmation`,受影响授权进入 `expired` 并追加 audit。
1153
1153
 
1154
1154
  v1.9 不自动复用其他项目会话、不自动连接或修改数据库、不扩大 HTML 迁移范围,不执行 Git 写操作或 npm publish。
@@ -111,7 +111,7 @@ Run the seven-capability host preflight before role sessions. Materialize the ma
111
111
  - 接管基线记录业务文件哈希、控制文件哈希、未提交 Git、已有任务/会话和旧 AI 文档。旧沉淀必须分类为 adopted/pending-confirmation/not-adopted,敏感原文不得落盘。
112
112
  - 五个角色和主任务必须有父子任务、状态、下一步和真实 sessionId;缺失角色会话固定 `blockedReason=required-role-session-not-created`,不得伪造 sessionId。
113
113
  - `projectStatus` 只有在所有 requiredGates 通过、敏感扫描通过且无高风险阻塞时才可为 ready;executionEligible 必须同时为 true。
114
- - Git none、无测试框架、工具链未检测只记录 not-available/not-detected 和 unverifiedScope;数据库默认 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`,未经确认不得连接或执行 SQL。
114
+ - Git none、无测试框架、工具链未检测只记录 not-available/not-detected 和 unverifiedScope;数据库默认 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`。普通初始化不扫描数据库文件;数据库相关任务仅只读项目内 SQL/schema/migration/model 文本,不连接本地或线上数据库、不查询真实数据、不执行 SQL。
115
115
 
116
116
  ## v1.9 初始化项目身份与联合门禁
117
117
 
@@ -119,7 +119,7 @@ Run the seven-capability host preflight before role sessions. Materialize the ma
119
119
 
120
120
  会话候选状态固定为 `reusable/renamed/duplicate-not-primary/other-project/unknown/not-reusable/requires-confirmation`,只有 reusable 或有完整改名 audit 的 renamed 才能绑定。其他项目会话不得展示或复用,中文展示名使用项目简称、角色中文名和职责名称。
121
121
 
122
- 技术全景只有 full coverage、空 unverifiedScope 和核心证据完整时才可 ready;partial/unknown 不得 ready。requirementPacket 与 technicalImpactPacket 必须同项目、task、版本和 hash;失效时进入 `packet-stale` 并阻断执行。数据库默认 `sql-only`,连接、查询、结构变更和数据修改分别授权,每条 SQL 必须校验 statementHash 和目标环境。
123
- - v1.9 fields: `sessionMatchStatus`、`selectionEvidence`、`项目简称|角色中文名|职责名称`、`coverageStatus=full`、`databaseAccessMode=sql-only`、`targetEnvironment`。
122
+ 技术全景只有 full coverage、空 unverifiedScope 和核心证据完整时才可 ready;partial/unknown 不得 ready。requirementPacket 与 technicalImpactPacket 必须同项目、task、版本和 hash;失效时进入 `packet-stale` 并阻断执行。数据库正式为 `local-files-read-only`,`sql-only` 仅为兼容标识;只读本地数据库相关文本文件,SQL 仅生成供审阅,连接、查询、结构变更和数据修改均禁止,每条 SQL 必须校验 statementHash 和目标环境。
123
+ - v1.9 fields: `sessionMatchStatus`、`selectionEvidence`、`项目简称|角色中文名|职责名称`、`coverageStatus=full`、`databaseAccessMode=local-files-read-only`、`legacyDatabaseAccessMode=sql-only`、`targetEnvironment`。
124
124
 
125
125
  共享事实和 Skill 文件使用临时文件、完整校验和原子重命名。前端审计默认只读;临时会话只有用户确认的代码任务才可创建。不得修改业务代码、数据库、API、依赖、Git 或发布配置。
@@ -319,5 +319,5 @@ Record all seven host capabilities before role sessions. `available-with-depende
319
319
 
320
320
  总工交接必须引用 technical-landscape、requirementPacket 和 technicalImpactPacket 的 ID、版本、sourceRevision 和 RFC8785 JCS-SHA-256 hash;任一 hash 失效时状态为 blocked、原因 packet-stale。技术全景 partial/unknown 不得写为 ready。
321
321
 
322
- 数据库交接必须记录 `databaseAccessMode=sql-only`、四类授权、授权状态 `not-requested/requested/authorized/denied/expired/failed/unknown`、`statementHash`、targetEnvironment、`executionStatus`、`redactionStatus=verified/unverified/failed` 和完整 audit;授权变化后不得继续执行旧 SQL,执行状态回到 `needs-confirmation`。
322
+ 数据库交接必须记录 `databaseAccessMode=local-files-read-only`、`legacyDatabaseAccessMode=sql-only`、`sqlExecutionMode=generate-only`、四类授权、授权状态 `not-requested/requested/authorized/denied/expired/failed/unknown`、`statementHash`、targetEnvironment、`executionStatus`、`redactionStatus=verified/unverified/failed` 和完整 audit。仅允许按需读取本地 SQL/schema/migration/model 文本文件,严禁连接数据库或执行 SQL;授权变化后不得继续执行旧 SQL,执行状态回到 `needs-confirmation`。
323
323
  - v1.9 fields: `lexical-fallback`、`duplicate-not-primary`、`项目简称|角色中文名|职责名称`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`。
@@ -139,13 +139,13 @@ Before upgrade role-session work, read `xinyun-ai/index/initialization-recovery.
139
139
  - 升级时不得读取未注册的 `codegraph-status.json`;统一从 manifest 的 `codeGraphRequired` 恢复,并校验 project-index、preflight、onboarding、current-task、init-result 的 codeGraphRecordId 和摘要一致。
140
140
  - `available-with-dependency` 必须等待依赖授权;必要能力处于 unknown、unavailable、permission-denied、failed、not-checked、not-verified 或依赖未授权时保持 blocked/partial,不得 ready。
141
141
  - Git none、测试框架未发现和工具链未检测不单独阻塞,但必须写入 status、evidence 和 unverifiedScope;禁止自动安装依赖。
142
- - 数据库状态升级默认保持 `not-requested/needs-confirmation/verified`;没有新授权不得连接、执行 SQL、migration、seed 或修改真实数据。
142
+ - 数据库状态升级默认保持 `not-requested/needs-confirmation/verified`;普通升级不扫描数据库文件,数据库相关任务只读本地 SQL/schema/migration/model 文本。没有新授权不得连接本地或线上数据库、查询真实数据、执行 SQL、migration、seed 或修改数据。
143
143
 
144
144
  ## v1.9 升级兼容与失效处理
145
145
 
146
146
  升级前按当前项目身份的 realpath/lexical-fallback 结果计算 projectRootHash,按排序 repository scope 计算 repositoryScopeHash。只有八字段身份/任务键、权限和 RFC8785 JCS-SHA-256 复用键一致时复用会话;其他项目、重复非主会话和身份未知会话不得复用。保留 v1.7.3 sessionId、旧创建索引、v1.8 共享事实和双会话文件契约。
147
147
 
148
- 技术全景、requirementPacket 或 technicalImpactPacket 的 contentHash、版本、项目身份或 sourceRevision 变化时,相关任务进入 blocked + blockedReason=packet-stale,不得静默使用旧结果。数据库默认仍为 sql-only,授权、目标环境、参数、方言或 statementHash 变化时追加 audit 并回到 needs-confirmation。
149
- - v1.9 fields: `sessionMatchStatus`、`duplicate-not-primary`、`selectionEvidence`、`项目简称|角色中文名|职责名称`、`technical-landscape`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`、`databaseAccessMode=sql-only`、`targetEnvironment`。
148
+ 技术全景、requirementPacket 或 technicalImpactPacket 的 contentHash、版本、项目身份或 sourceRevision 变化时,相关任务进入 blocked + blockedReason=packet-stale,不得静默使用旧结果。数据库默认仍为 local-files-read-only(sql-only 仅为兼容标识),授权、目标环境、参数、方言或 statementHash 变化时追加 audit 并回到 needs-confirmation。
149
+ - v1.9 fields: `sessionMatchStatus`、`duplicate-not-primary`、`selectionEvidence`、`项目简称|角色中文名|职责名称`、`technical-landscape`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`、`databaseAccessMode=local-files-read-only`、`legacyDatabaseAccessMode=sql-only`、`targetEnvironment`。
150
150
 
151
151
  同一 taskId + changeDomain 不得重复创建临时会话;容量不足进入 `queued`,unknown occupancy 保持占用,失败不得自动重试。升级不自动安装 Skill 依赖,不执行业务代码、数据库、API 或 Git 写操作。
@@ -27,4 +27,4 @@ An illegal combination is `blocked`, stops further writes, and creates a recover
27
27
 
28
28
  The project cannot become `ready` until the orchestrator and all five required role sessions have valid identity evidence, authorization, onboarding, and execution eligibility. Missing host capability stays `blocked`; local degradation may document the task but cannot authorize business-code execution or invent a session ID.
29
29
 
30
- Database access remains `sql-only`. Without explicit user authorization, output SQL and a plan only; do not connect, install a driver, or execute a statement.
30
+ Database access is `local-files-read-only`; `sql-only` is a legacy compatibility label. Read only database-related SQL/schema/migration/model text files for database-related tasks. Without explicit user authorization, output SQL and a plan only; never connect to a local or online database, open a database driver, install a driver, query real data, or execute a statement.
@@ -221,7 +221,7 @@ AI 接手本项目时,请先读取:
221
221
  - `projectStatus` 固定为 `not-started/initializing/partial/blocked/ready`;只有身份、CodeGraph、基线、团队、任务、控制面、旧沉淀、宿主能力、敏感扫描和无高风险阻塞全部通过,才允许 `ready` 和 `executionEligible=true`。
222
222
  - 初始化冲突、旧任务、锁异常或用户修改控制文件时必须暂停/阻塞,不覆盖、不强制解锁;所有控制面写入使用临时文件、原子重命名、revision、幂等和恢复记录。
223
223
  - Git none、无测试框架和未检测到工具链只记录 `not-available/not-detected` 及未验证范围,不得伪造通过,也不得自动安装依赖。
224
- - 数据库初始化固定为 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`;未经明确授权不得连接数据库或执行 SQL,只输出 SQL 计划。
224
+ - 数据库初始化固定为 `authorization=not-requested`、`executionStatus=needs-confirmation`、`redactionStatus=verified`;普通初始化不扫描数据库文件。数据库相关任务仅只读项目内 SQL/schema/migration/model 文本,未经明确授权不得连接本地或线上数据库、查询真实数据或执行 SQL,只输出 SQL 计划。
225
225
 
226
226
  ## v1.9 当前项目会话隔离与联合门禁
227
227
 
@@ -230,8 +230,8 @@ AI 接手本项目时,请先读取:
230
230
  - 其他项目会话不得展示完整路径、任务内容或 sessionId;重复会话保留历史,只选择一个主会话。中文标题使用 `项目简称|角色中文名|职责名称`。
231
231
  - 总工维护 `technical-landscape.json`,主会话维护 `requirement-packet.json`,总工输出 `technical-impact-packet.json`。技术全景只有 full coverage、空 unverifiedScope 和完整核心证据才可 ready;partial/unknown 不得 ready。
232
232
  - 两个 packet 必须同 requirementId、taskId、projectRootHash、version,并使用 RFC8785 JCS-SHA-256。关联内容变化后进入 `blockedReason=packet-stale`,程序员不得执行。
233
- - 数据库默认 `sql-only`;连接、查询、结构变更、数据修改分别授权,四类授权状态固定为 `not-requested/requested/authorized/denied/expired/failed/unknown`,`redactionStatus` 固定为 `verified/unverified/failed`。每条 SQL 执行前校验规范化 `statementHash`、targetEnvironment 和权限状态,过期或变化必须进入 `needs-confirmation` 并追加 audit。
234
- - v1.9 fields: `selectionEvidence`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`、`databaseAccessMode=sql-only`。
233
+ - 数据库默认 `databaseAccessMode=local-files-read-only`,`sql-only` 仅为兼容标识,`sqlExecutionMode=generate-only`;连接、查询、结构变更、数据修改分别授权,四类授权状态固定为 `not-requested/requested/authorized/denied/expired/failed/unknown`,`redactionStatus` 固定为 `verified/unverified/failed`。数据库相关任务只读本地 SQL/schema/migration/model 文本,严禁连接数据库、查询真实数据或执行 SQL。每条 SQL 仅作为 review 计划,需校验规范化 `statementHash`、targetEnvironment 和权限状态,过期或变化必须进入 `needs-confirmation` 并追加 audit。
234
+ - v1.9 fields: `selectionEvidence`、`coverageStatus=full`、`RFC 8785 JCS-SHA-256`、`databaseAccessMode=local-files-read-only`、`legacyDatabaseAccessMode=sql-only`。
235
235
  ## v1.7 machine-readable enum anchors
236
236
 
237
237
  - decision=direct-map/rewrite-required/backend-required/unsupported/pending/unknown
@@ -616,7 +616,7 @@ Skill 分配使用 `assignmentStatus`,使用记录使用 `usageStatus`。固
616
616
 
617
617
  初始化结果必须按 before/after hash 区分 `initialization-created`、`initialization-updated`、`pre-existing-user-change` 和 `control-plane-only`;不得回滚或归因用户已有业务改动。
618
618
 
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。
619
+ 数据库正式 databaseAccessMode=local-files-read-only,legacyDatabaseAccessMode=sql-only 仅为兼容标识,sqlExecutionMode=generate-only。普通初始化不读取数据库文件;数据库相关任务仅可读取项目内受限的 SQL/schema/migration/model 文本文件。严禁连接本地或线上数据库、查询真实数据、执行 SQL、migration、seed 或数据修改。连接、只读查询、结构变更、数据修改分别授权,四类授权状态固定为 not-requested/requested/authorized/denied/expired/failed/unknown,redactionStatus 固定为 verified/unverified/failed;SQL 仅用于 review 计划,需校验规范化 SQL、参数、方言、targetEnvironment、授权范围生成的 statementHash。授权或输入变化时回到 needs-confirmation,并追加包含 auditId、action、actorType、actorId、authorizationType、statementHash、targetEnvironment、resultStatus、redactionStatus、evidence、at 的 audit。
620
620
 
621
621
  ## 自我学习
622
622
 
@@ -311,5 +311,5 @@
311
311
  - requirementPacketId / technicalImpactPacketId / 两个 contentHash:待填写
312
312
  - packet 状态:captured / clarifying / proposed / confirmed / in-progress / blocked / completed / cancelled;技术影响:not-started / assessing / ready / partial / blocked
313
313
  - packet 失效原因:packet-stale / 待填写
314
- - databaseAccessMode:sql-only
314
+ - databaseAccessMode:local-files-read-only(legacyDatabaseAccessMode=sql-only;sqlExecutionMode=generate-only)
315
315
  - 数据库连接、查询、结构变更、数据修改授权状态:待填写
@@ -1,7 +1,21 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "databaseAccessMode": "sql-only",
3
+ "databaseAccessMode": "local-files-read-only",
4
+ "databaseAccessModeEnum": ["local-files-read-only", "sql-only"],
5
+ "legacyDatabaseAccessMode": "sql-only",
6
+ "databaseAccessModePolicy": "local database-related source files only; never connect to a local or online database",
7
+ "sqlExecutionMode": "generate-only",
8
+ "sqlExecutionModeEnum": ["generate-only", "forbidden"],
4
9
  "connectionStatus": "not-requested",
10
+ "connected": false,
11
+ "sqlExecuted": false,
12
+ "localFileReadStatus": "not-checked",
13
+ "localFileReadStatusEnum": ["not-checked", "not-needed", "read-only", "blocked", "failed"],
14
+ "localDatabaseFileScope": ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"],
15
+ "localFileReadPolicy": "database-related-task-only",
16
+ "localFilesRead": [],
17
+ "unverifiedScope": [],
18
+ "forbiddenOperations": ["database-connection", "database-query", "sql-execution", "migration-execution", "seed-execution", "data-mutation"],
5
19
  "connectionStatusEnum": ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"],
6
20
  "queryAuthorization": "not-requested",
7
21
  "queryAuthorizationEnum": ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"],
@@ -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.13.0",
12
+ "targetVersion": "1.13.1",
13
13
  "idempotencyKey": null,
14
14
  "createdFiles": [],
15
15
  "updatedFiles": [],
@@ -131,13 +131,25 @@
131
131
  "technicalImpactPacketPath": "xinyun-ai/packets/technical-impact-packet.json",
132
132
  "databaseAuthorizationPath": "xinyun-ai/database/authorization.json",
133
133
  "packetHashAlgorithm": "RFC8785-JCS-SHA-256",
134
- "databaseAccessMode": "sql-only"
134
+ "databaseAccessMode": "local-files-read-only",
135
+ "legacyDatabaseAccessMode": "sql-only",
136
+ "sqlExecutionMode": "generate-only"
135
137
  },
136
138
  "databaseAuthorization": {
137
139
  "authorization": "not-requested",
138
140
  "executionStatus": "needs-confirmation",
139
141
  "redactionStatus": "verified",
142
+ "databaseAccessMode": "local-files-read-only",
143
+ "legacyDatabaseAccessMode": "sql-only",
144
+ "sqlExecutionMode": "generate-only",
140
145
  "connected": false,
146
+ "sqlExecuted": false,
147
+ "localFileReadStatus": "not-checked",
148
+ "localFileReadStatusEnum": ["not-checked", "not-needed", "read-only", "blocked", "failed"],
149
+ "localDatabaseFileScope": ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"],
150
+ "localFileReadPolicy": "database-related-task-only",
151
+ "localFilesRead": [],
152
+ "unverifiedScope": [],
141
153
  "evidence": []
142
154
  },
143
155
  "sensitiveScan": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "projectName": "",
3
- "xinyunAiVersion": "1.13.0",
3
+ "xinyunAiVersion": "1.13.1",
4
4
  "scriptVersion": "2026.07.23",
5
5
  "schemaVersion": "1",
6
6
  "initializationMode": "fast",
@@ -107,7 +107,7 @@
107
107
  "providerSessionBindingTemplate": "xinyun-ai-init/templates/provider-session-binding.template.json",
108
108
  "providerSessionBindings": "xinyun-ai/sessions/provider-session-bindings.json",
109
109
  "parentSessionId": null,
110
- "targetVersion": "1.13.0",
110
+ "targetVersion": "1.13.1",
111
111
  "requiredRoleCount": 5,
112
112
  "statusEnum": [
113
113
  "pending",
@@ -249,7 +249,16 @@
249
249
  "technicalImpactPacket": "xinyun-ai/packets/technical-impact-packet.json",
250
250
  "databaseAuthorization": "xinyun-ai/database/authorization.json",
251
251
  "packetHashAlgorithm": "RFC8785-JCS-SHA-256",
252
- "databaseAccessModeDefault": "sql-only"
252
+ "databaseAccessModeDefault": "local-files-read-only",
253
+ "legacyDatabaseAccessMode": "sql-only",
254
+ "sqlExecutionMode": "generate-only",
255
+ "databaseLocalFilePolicy": {
256
+ "scope": ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"],
257
+ "readOnly": true,
258
+ "taskTriggeredOnly": true,
259
+ "connectionAllowed": false,
260
+ "sqlExecutionAllowed": false
261
+ }
253
262
  },
254
263
  "v110": {
255
264
  "projectStatus": "xinyun-ai/project-status.json",
@@ -20,7 +20,23 @@
20
20
  "team": { "status": "unknown", "roleIds": ["project-owner", "project-product", "chief-engineer", "programmer", "test-reviewer"], "evidence": [] },
21
21
  "tasks": { "status": "unknown", "mainTaskId": null, "roleTaskIds": [], "evidence": [] },
22
22
  "controlPlane": { "status": "unknown", "indexPath": "xinyun-ai/index/control-plane-index.json", "lockPath": "xinyun-ai/task-lock.json", "eventLogPath": "xinyun-ai/events/events.jsonl", "evidence": [] },
23
- "database": { "authorization": "not-requested", "executionStatus": "needs-confirmation", "redactionStatus": "verified", "connected": false, "evidence": [] },
23
+ "database": {
24
+ "authorization": "not-requested",
25
+ "executionStatus": "needs-confirmation",
26
+ "redactionStatus": "verified",
27
+ "databaseAccessMode": "local-files-read-only",
28
+ "legacyDatabaseAccessMode": "sql-only",
29
+ "sqlExecutionMode": "generate-only",
30
+ "connectionStatus": "not-requested",
31
+ "connected": false,
32
+ "sqlExecuted": false,
33
+ "localFileReadStatus": "not-checked",
34
+ "localFileReadPolicy": "database-related-task-only",
35
+ "localDatabaseFileScope": ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"],
36
+ "localFilesRead": [],
37
+ "unverifiedScope": [],
38
+ "evidence": []
39
+ },
24
40
  "sensitiveScan": { "status": "unknown", "matches": [], "scannedOutputs": [] },
25
41
  "blockedReasons": [],
26
42
  "unverifiedScope": [],
@@ -186,6 +186,6 @@
186
186
  - technical-landscape 是否满足 full coverage、unverifiedScope 为空和核心证据完整才 ready:待填写
187
187
  - requirementPacket / technicalImpactPacket 是否同 requirementId、taskId、projectRootHash、version 和 JCS-SHA-256 hash:待填写
188
188
  - packet 变化是否进入 `blockedReason=packet-stale`:待填写
189
- - 数据库默认是否为 `sql-only`:待填写
189
+ - 数据库是否为 `local-files-read-only`(`sql-only` 仅兼容标识,SQL 仅生成):待填写
190
190
  - connectionStatus、queryAuthorization、schemaChangeAuthorization、dataMutationAuthorization 是否独立:待填写
191
191
  - statementHash、targetEnvironment、executionStatus 和 audit 是否完整:待填写
@@ -257,4 +257,4 @@
257
257
  - 会话展示名:`项目简称|角色中文名|职责名称`;主会话:`项目简称|主会话|项目总调度`。
258
258
  - 技术全景:`xinyun-ai/technical-landscape.json`;只有 full coverage、空 unverifiedScope 和核心证据完整才可 ready。
259
259
  - packet:`requirement-packet.json` + `technical-impact-packet.json`;使用 RFC8785 JCS-SHA-256,失效时为 `packet-stale`。
260
- - 数据库默认 `sql-only`;连接、查询、结构变更和数据修改权限独立,执行前校验 statementHash、目标环境和 audit。
260
+ - 数据库默认 `local-files-read-only`,`sql-only` 仅为兼容标识;数据库相关任务只读本地 SQL/schema/migration/model 文本,连接、查询、结构变更和数据修改均禁止,SQL 仅生成供审阅,执行前校验 statementHash、目标环境和 audit。
@@ -263,7 +263,16 @@
263
263
  "technicalImpactPacket": "xinyun-ai/packets/technical-impact-packet.json",
264
264
  "databaseAuthorization": "xinyun-ai/database/authorization.json",
265
265
  "packetHashAlgorithm": "RFC8785-JCS-SHA-256",
266
- "databaseAccessModeDefault": "sql-only"
266
+ "databaseAccessModeDefault": "local-files-read-only",
267
+ "legacyDatabaseAccessMode": "sql-only",
268
+ "sqlExecutionMode": "generate-only",
269
+ "databaseLocalFilePolicy": {
270
+ "scope": ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"],
271
+ "readOnly": true,
272
+ "taskTriggeredOnly": true,
273
+ "connectionAllowed": false,
274
+ "sqlExecutionAllowed": false
275
+ }
267
276
  },
268
277
  "v110": {
269
278
  "projectStatus": "xinyun-ai/project-status.json",
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "adapterId": "provider-adapter-template",
4
4
  "provider": "codex",
5
- "adapterVersion": "1.13.0",
5
+ "adapterVersion": "1.13.1",
6
6
  "status": "not-checked",
7
7
  "statusEnum": ["not-checked", "checking", "available", "available-with-dependency", "unavailable", "permission-denied", "unknown", "failed", "not-verified"],
8
8
  "canonicalSessionIdField": "providerSessionId",
@@ -38,7 +38,7 @@
38
38
  "creationEvidence": [],
39
39
  "requiredHostEvidence": ["create-or-reuse", "send", "receive", "query-status", "recover", "close"]
40
40
  },
41
- "targetVersion": "1.13.0",
41
+ "targetVersion": "1.13.1",
42
42
  "projectRootHash": null,
43
43
  "workspaceScope": {"scopeType": "project-root", "scopePathHashes": [], "scopeRevision": null},
44
44
  "repositoryScopeHash": null,
@@ -88,5 +88,5 @@
88
88
  "roleDisplayName": null,
89
89
  "responsibilityLabel": null,
90
90
  "titleSource": "role-contract",
91
- "titleVersion": "1.13.0"
91
+ "titleVersion": "1.13.1"
92
92
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "packageName": "xinyun-ai-init",
3
3
  "displayName": "欣芸技术开发 Agent 流初始化包",
4
- "version": "1.13.0",
4
+ "version": "1.13.1",
5
5
  "scriptVersion": "2026.07.23",
6
6
  "schemaVersion": "1",
7
7
  "defaultMode": "fast-init",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pm_zhousl/xinyun-ai-init",
3
- "version": "1.13.0",
3
+ "version": "1.13.1",
4
4
  "description": "欣芸技术开发 Agent 流初始化包",
5
5
  "bin": {
6
6
  "xinyun-ai-init": "bin/xinyun-ai-init.js"
@@ -6,7 +6,7 @@ const crypto = require("crypto");
6
6
 
7
7
  const root = path.resolve(__dirname, "..");
8
8
  const initRoot = path.join(root, "init", "xinyun-ai-init");
9
- const CURRENT_VERSION = "1.13.0";
9
+ const CURRENT_VERSION = "1.13.1";
10
10
 
11
11
  const checks = [];
12
12
 
@@ -1675,8 +1675,12 @@ function verifyV19Contracts() {
1675
1675
  addCheck("technical landscape status contract", landscape.status === "not-started" && landscape.coverage.coverageStatus === "unknown" && Array.isArray(landscape.unverifiedScope), "技术全景状态契约不完整");
1676
1676
  addCheck("packet minimum fields", [requirementPacket, impactPacket].every((packet) => ["schemaVersion", "packetId", "requirementId", "taskId", "projectRootHash", "version", "status", "content", "evidence", "sourceRevision", "contentHash", "createdAt", "updatedAt"].every((field) => Object.prototype.hasOwnProperty.call(packet, field))), "packet 最小字段不完整");
1677
1677
  addCheck("packet hash algorithm", manifest.v19 && manifest.v19.packetHashAlgorithm === "RFC8785-JCS-SHA-256", "packet hash 算法不完整");
1678
- addCheck("database sql-only default", database.databaseAccessMode === "sql-only" && database.executionStatus === "needs-confirmation", "数据库默认安全边界不完整");
1678
+ addCheck("database legacy sql-only compatibility", database.legacyDatabaseAccessMode === "sql-only" && database.databaseAccessMode === "local-files-read-only" && database.sqlExecutionMode === "generate-only", "database legacy compatibility marker is incomplete");
1679
1679
  addCheck("database authorization separation", ["connectionStatus", "queryAuthorization", "schemaChangeAuthorization", "dataMutationAuthorization"].every((field) => Object.prototype.hasOwnProperty.call(database, field)), "数据库权限未分离");
1680
+ addCheck("database local-files-read-only default", database.databaseAccessMode === "local-files-read-only" && database.legacyDatabaseAccessMode === "sql-only" && database.sqlExecutionMode === "generate-only" && database.executionStatus === "needs-confirmation" && database.connectionStatus === "not-requested" && database.connected === false && database.sqlExecuted === false, "database local-file read-only default is incomplete");
1681
+ const localDatabaseScope = ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"];
1682
+ addCheck("database local file policy", JSON.stringify(database.localDatabaseFileScope) === JSON.stringify(localDatabaseScope) && database.localFileReadPolicy === "database-related-task-only" && database.forbiddenOperations.includes("database-connection") && database.forbiddenOperations.includes("sql-execution"), "database local file scope or forbidden operations are incomplete");
1683
+ addCheck("database defaults across v19 templates", manifest.v19 && projectIndex.v19 && manifest.v19.databaseAccessModeDefault === "local-files-read-only" && projectIndex.v19.databaseAccessModeDefault === manifest.v19.databaseAccessModeDefault && manifest.v19.legacyDatabaseAccessMode === "sql-only" && projectIndex.v19.legacyDatabaseAccessMode === "sql-only" && manifest.v19.sqlExecutionMode === "generate-only" && projectIndex.v19.sqlExecutionMode === "generate-only", "manifest and project-index database policy is inconsistent");
1680
1684
  const authorizationStates = ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"];
1681
1685
  addCheck("database authorization state enum", database.authorizationStatusEnum && JSON.stringify(database.authorizationStatusEnum) === JSON.stringify(authorizationStates) && ["connectionStatusEnum", "queryAuthorizationEnum", "schemaChangeAuthorizationEnum", "dataMutationAuthorizationEnum"].every((field) => JSON.stringify(database[field]) === JSON.stringify(authorizationStates)), "数据库四类授权状态枚举不完整");
1682
1686
  addCheck("database authorization transitions", database.authorizationTransitionRules && database.authorizationTransitionRules.authorized.includes("expired") && database.invalidatingChanges.includes("statement-hash-changed") && database.invalidatingAction.includes("needs-confirmation"), "数据库授权失效转移不完整");
@@ -1696,7 +1700,8 @@ function verifyV19Contracts() {
1696
1700
  "coverageStatus=full",
1697
1701
  "packet-stale",
1698
1702
  "RFC 8785 JCS-SHA-256",
1699
- "databaseAccessMode=sql-only",
1703
+ "databaseAccessMode=local-files-read-only",
1704
+ "legacyDatabaseAccessMode=sql-only",
1700
1705
  "statementHash",
1701
1706
  "targetEnvironment",
1702
1707
  ];
@@ -1830,6 +1835,8 @@ function verifyV110Contracts() {
1830
1835
  addCheck("v1.11 parallelism schema", parallelism.maxConcurrency === 3 && parallelism.requestedConcurrency === 3 && parallelism.queueOrder.includes("taskId"), "parallel role-session limit");
1831
1836
  addCheck("v1.11 registry paths", manifest.v111 && projectIndex.v111 && manifest.v111.fixedMaterialization === "xinyun-ai/fixed-materialization.json" && projectIndex.v111.initializationStages === "xinyun-ai/initialization-stages.json" && manifest.v111.defaultRoleConcurrency === 3 && manifest.v111.cacheTtlHours === 24, "v1.11 manifest/project-index paths");
1832
1837
  addCheck("v1.10 database defaults across control plane", manifest.v110 && projectIndex.v110 && JSON.stringify(manifest.v110.databaseDefault) === JSON.stringify(projectIndex.v110.databaseDefault) && JSON.stringify(manifest.v110.databaseDefault) === JSON.stringify({ authorization: "not-requested", executionStatus: "needs-confirmation", redactionStatus: "verified" }) && preflight.database && preflight.database.authorization === manifest.v110.databaseDefault.authorization && preflight.database.executionStatus === manifest.v110.databaseDefault.executionStatus && preflight.database.redactionStatus === manifest.v110.databaseDefault.redactionStatus && initResult.databaseAuthorization && initResult.databaseAuthorization.authorization === manifest.v110.databaseDefault.authorization && initResult.databaseAuthorization.executionStatus === manifest.v110.databaseDefault.executionStatus && initResult.databaseAuthorization.redactionStatus === manifest.v110.databaseDefault.redactionStatus, "database defaults agree across manifest/project-index/preflight/init-result");
1838
+ const localDatabaseScope = ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"];
1839
+ addCheck("v1.10 database local-file policy across control plane", preflight.database && initResult.databaseAuthorization && preflight.database.databaseAccessMode === "local-files-read-only" && initResult.databaseAuthorization.databaseAccessMode === "local-files-read-only" && preflight.database.legacyDatabaseAccessMode === "sql-only" && initResult.databaseAuthorization.legacyDatabaseAccessMode === "sql-only" && preflight.database.sqlExecutionMode === "generate-only" && initResult.databaseAuthorization.sqlExecutionMode === "generate-only" && preflight.database.connected === false && initResult.databaseAuthorization.connected === false && preflight.database.sqlExecuted === false && initResult.databaseAuthorization.sqlExecuted === false && JSON.stringify(preflight.database.localDatabaseFileScope) === JSON.stringify(localDatabaseScope) && JSON.stringify(initResult.databaseAuthorization.localDatabaseFileScope) === JSON.stringify(localDatabaseScope), "preflight and init-result database policy is inconsistent");
1833
1840
  verifyV110CodeGraphContract(manifest, projectIndex, preflight, onboarding, initResult, currentTask);
1834
1841
  verifyV110HostCapabilityContract(host, projectStatus);
1835
1842
  const capabilityStatuses = ["available", "available-with-dependency", "unavailable", "permission-denied", "unknown", "not-checked", "not-verified", "failed"];
@@ -5,7 +5,7 @@ const os = require("os");
5
5
  const path = require("path");
6
6
  const { spawnSync } = require("child_process");
7
7
 
8
- const VERSION = "1.13.0";
8
+ const VERSION = "1.13.1";
9
9
  const checks = [];
10
10
 
11
11
  function parseArgs(argv) {
@@ -604,7 +604,10 @@ function validateV19Content(root, target) {
604
604
  addCheck(target, "v1.9.landscape-ready", "schema", landscape.status === "not-started" && landscape.coverage.coverageStatus === "unknown" && Array.isArray(landscape.unverifiedScope) ? "pass" : "fail", "technical-landscape.template.json", "status/coverage", "not-started/unknown", landscape, "Technical landscape gate checked.", "Restore conservative landscape defaults.");
605
605
  const packetFields = ["schemaVersion", "packetId", "requirementId", "taskId", "projectRootHash", "version", "status", "content", "evidence", "sourceRevision", "contentHash", "createdAt", "updatedAt"];
606
606
  addCheck(target, "v1.9.packet-schema", "schema", [requirement, impact].every((packet) => packetFields.every((field) => Object.prototype.hasOwnProperty.call(packet, field))) ? "pass" : "fail", "packet templates", "minimum fields", packetFields, "requirement/impact packet fields", "Packet schema checked.", "Restore packet fields.");
607
- addCheck(target, "v1.9.database-sql-only", "schema", database.databaseAccessMode === "sql-only" && database.executionStatus === "needs-confirmation" ? "pass" : "fail", "database-authorization.template.json", "databaseAccessMode/executionStatus", "sql-only/needs-confirmation", `${database.databaseAccessMode}/${database.executionStatus}`, "Database default checked.", "Restore SQL-only default.");
607
+ addCheck(target, "v1.9.database-local-files-read-only", "schema", database.databaseAccessMode === "local-files-read-only" && database.legacyDatabaseAccessMode === "sql-only" && database.sqlExecutionMode === "generate-only" && database.executionStatus === "needs-confirmation" && database.connectionStatus === "not-requested" && database.connected === false && database.sqlExecuted === false ? "pass" : "fail", "database-authorization.template.json", "databaseAccessMode/executionStatus/connectionStatus", "local-files-read-only/needs-confirmation/not-requested", `${database.databaseAccessMode}/${database.executionStatus}/${database.connectionStatus}`, "Database local-file read-only default checked.", "Restore local-file read-only defaults.");
608
+ const localDatabaseScope = ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"];
609
+ addCheck(target, "v1.9.database-local-file-policy", "schema", JSON.stringify(database.localDatabaseFileScope) === JSON.stringify(localDatabaseScope) && database.localFileReadPolicy === "database-related-task-only" && database.forbiddenOperations.includes("database-connection") && database.forbiddenOperations.includes("sql-execution") ? "pass" : "fail", "database-authorization.template.json", "localDatabaseFileScope/localFileReadPolicy/forbiddenOperations", "database-related local text files only", database, "Database local-file scope and forbidden operations checked.", "Restrict database access to local files and prohibit connections/execution.");
610
+ addCheck(target, "v1.9.database-policy-across-control-plane", "schema", manifest.v19 && projectIndex.v19 && manifest.v19.databaseAccessModeDefault === "local-files-read-only" && projectIndex.v19.databaseAccessModeDefault === manifest.v19.databaseAccessModeDefault && manifest.v19.legacyDatabaseAccessMode === "sql-only" && projectIndex.v19.legacyDatabaseAccessMode === "sql-only" && manifest.v19.sqlExecutionMode === "generate-only" && projectIndex.v19.sqlExecutionMode === "generate-only" ? "pass" : "fail", "manifest/project-index.v19", "database policy", "local-files-read-only/generate-only/sql-only legacy", {manifest: manifest.v19, projectIndex: projectIndex.v19}, "Database policy is consistent across v1.9 registries.", "Synchronize the v1.9 database policy.");
608
611
  addCheck(target, "v1.9.database-permissions", "schema", ["connectionStatus", "queryAuthorization", "schemaChangeAuthorization", "dataMutationAuthorization"].every((field) => Object.prototype.hasOwnProperty.call(database, field)) ? "pass" : "fail", "database-authorization.template.json", "authorization fields", "four independent fields", database, "Database authorization separation checked.", "Separate database permissions.");
609
612
  const authorizationStates = ["not-requested", "requested", "authorized", "denied", "expired", "failed", "unknown"];
610
613
  addCheck(target, "v1.9.database-authorization-state-enum", "schema", database.authorizationStatusEnum && JSON.stringify(database.authorizationStatusEnum) === JSON.stringify(authorizationStates) && ["connectionStatusEnum", "queryAuthorizationEnum", "schemaChangeAuthorizationEnum", "dataMutationAuthorizationEnum"].every((field) => JSON.stringify(database[field]) === JSON.stringify(authorizationStates)) ? "pass" : "fail", "database-authorization.template.json", "authorizationStatusEnum", authorizationStates, database.authorizationStatusEnum, "Database authorization status enum checked.", "Fix authorization status enums.");
@@ -617,7 +620,7 @@ function validateV19Content(root, target) {
617
620
  validateV19SessionReuseText(root, target);
618
621
  addCheck(target, "v1.9.statement-hash", "schema", database.statementHashAlgorithm === "RFC8785-JCS-SHA-256" && database.statementHashCanonicalInput.includes("parameters") && database.statementHashCanonicalInput.includes("targetEnvironment") ? "pass" : "fail", "database-authorization.template.json", "statementHash", "RFC8785-JCS-SHA-256", database.statementHashAlgorithm, "Statement hash checked.", "Restore statement hash canonical input.");
619
622
  requireIncludes(root, target, "test-scenarios/v1.9.0-scenarios.md", ["## 107.", "## 113.", "## 115.", "## 118.", "sql-only", "packet-stale", "行为证据"], "v1.9.content");
620
- requireIncludes(root, target, "init/xinyun-ai-init/README.md", ["v1.9", "lexical-fallback", "sessionMatchStatus", "technical-landscape", "packet-stale", "databaseAccessMode=sql-only", "statementHash"], "v1.9.content");
623
+ requireIncludes(root, target, "init/xinyun-ai-init/README.md", ["v1.9", "lexical-fallback", "sessionMatchStatus", "technical-landscape", "packet-stale", "databaseAccessMode=local-files-read-only", "legacyDatabaseAccessMode=sql-only", "statementHash"], "v1.9.content");
621
624
  }
622
625
 
623
626
  function validateV110Content(root, target) {
@@ -671,6 +674,8 @@ function validateV110Content(root, target) {
671
674
  addCheck(target, "v1.10.database-default", "schema", preflight.database && preflight.database.authorization === "not-requested" && preflight.database.executionStatus === "needs-confirmation" && preflight.database.redactionStatus === "verified" && preflight.database.connected === false ? "pass" : "fail", "preflight-report.template.json", "database", "not-requested/needs-confirmation/verified/not connected", preflight.database, "Database default authorization checked.", "Restore SQL-only database defaults.");
672
675
  addCheck(target, "v1.10.init-result-database-default", "schema", initResult.databaseAuthorization && initResult.databaseAuthorization.authorization === "not-requested" && initResult.databaseAuthorization.executionStatus === "needs-confirmation" && initResult.databaseAuthorization.redactionStatus === "verified" && initResult.databaseAuthorization.connected === false ? "pass" : "fail", "init-result.template.json", "databaseAuthorization", "not-requested/needs-confirmation/verified/not connected", initResult.databaseAuthorization, "Init-result database default checked.", "Restore init-result database defaults.");
673
676
  addCheck(target, "v1.10.database-defaults-across-control-plane", "schema", manifest.v110 && projectIndex.v110 && JSON.stringify(manifest.v110.databaseDefault) === JSON.stringify(projectIndex.v110.databaseDefault) && JSON.stringify(manifest.v110.databaseDefault) === JSON.stringify({ authorization: "not-requested", executionStatus: "needs-confirmation", redactionStatus: "verified" }) && preflight.database && preflight.database.authorization === manifest.v110.databaseDefault.authorization && preflight.database.executionStatus === manifest.v110.databaseDefault.executionStatus && preflight.database.redactionStatus === manifest.v110.databaseDefault.redactionStatus && initResult.databaseAuthorization && initResult.databaseAuthorization.authorization === manifest.v110.databaseDefault.authorization && initResult.databaseAuthorization.executionStatus === manifest.v110.databaseDefault.executionStatus && initResult.databaseAuthorization.redactionStatus === manifest.v110.databaseDefault.redactionStatus ? "pass" : "fail", "manifest/project-index/preflight/init-result", "database defaults", "not-requested/needs-confirmation/verified", { manifest: manifest.v110 && manifest.v110.databaseDefault, projectIndex: projectIndex.v110 && projectIndex.v110.databaseDefault, preflight: preflight.database, initResult: initResult.databaseAuthorization }, "Database defaults are consistent across the control plane.", "Synchronize database defaults across control files.");
677
+ const localDatabaseScope = ["*.sql", "*.ddl", "*.schema", "*.migration", "database/", "migrations/", "schema/", "models/"];
678
+ addCheck(target, "v1.10.database-local-file-policy-across-control-plane", "schema", preflight.database && initResult.databaseAuthorization && preflight.database.databaseAccessMode === "local-files-read-only" && initResult.databaseAuthorization.databaseAccessMode === "local-files-read-only" && preflight.database.legacyDatabaseAccessMode === "sql-only" && initResult.databaseAuthorization.legacyDatabaseAccessMode === "sql-only" && preflight.database.sqlExecutionMode === "generate-only" && initResult.databaseAuthorization.sqlExecutionMode === "generate-only" && preflight.database.connected === false && initResult.databaseAuthorization.connected === false && preflight.database.sqlExecuted === false && initResult.databaseAuthorization.sqlExecuted === false && JSON.stringify(preflight.database.localDatabaseFileScope) === JSON.stringify(localDatabaseScope) && JSON.stringify(initResult.databaseAuthorization.localDatabaseFileScope) === JSON.stringify(localDatabaseScope) ? "pass" : "fail", "preflight/init-result", "database policy", "local-files-read-only/generate-only/not connected", {preflight: preflight.database, initResult: initResult.databaseAuthorization}, "Database policy is consistent across preflight and init-result.", "Synchronize local-file database policy across control files.");
674
679
  validateV110CodeGraphContract(root, target, manifest, projectIndex, preflight, onboarding, initResult, currentTask);
675
680
  validateV110HostCapabilityContract(target, host, projectStatus);
676
681
  const capabilityStatuses = ["available", "available-with-dependency", "unavailable", "permission-denied", "unknown", "not-checked", "not-verified", "failed"];
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "1.13.0",
3
+ "version": "1.13.1",
4
4
  "evidenceType": "not-verified",
5
5
  "executionMode": "host-capability-unavailable",
6
6
  "realAiSessionVerified": false,
@@ -40,7 +40,7 @@
40
40
 
41
41
  ## 116. 数据库默认 SQL-only
42
42
 
43
- 普通数据库需求只输出 sql-only 结果,不连接、不查询真实数据、不执行 SQL、不安装驱动;发现 .env 或驱动不构成授权。
43
+ 普通初始化不读取数据库文件;数据库相关需求只读取本地 SQL/schema/migration/model 文本并输出 `local-files-read-only` 结果(legacy sql-only 仅兼容),SQL 仅生成,不连接本地或线上数据库、不查询真实数据、不执行 SQL、不安装驱动;发现 .env 或驱动不构成授权。
44
44
 
45
45
  ## 117. 数据库权限与 statementHash
46
46