31 lines
3.8 KiB
Markdown
31 lines
3.8 KiB
Markdown
# P2-alpha-B修订1解析前置独立补审
|
||
|
||
日期:2026-09-28。审查者:ZCode会话。独立性声明:未参与修订1编写;**诚实披露:原方案审查Q2中"先原严格Json一次、仅token.Type==Null走工厂"的可达性判断同样依赖了"共用Json可返回Null"这一错误假设,本审查者当时未核:163的返回前拒绝——本轮据源码逐项复核修订的正确性**。本轮只读+hash重算+源码核查。
|
||
|
||
## 受审hash核对
|
||
|
||
`P2AlphaNullCompatibility/revision1-review-hashes.json`:**1301/1301重算全部一致**。
|
||
|
||
## 总判定
|
||
|
||
**接受。批准按修订1恢复B2~B4。** 无P1/P2;P3两条(其一为实施精确性提醒)。
|
||
|
||
## 四项逐条
|
||
|
||
**1. 原阻塞成立、StrictJsonSyntax支持修订:确认。** 本审查核实`PlayerKVSaveSchema.cs`共用Json在:163执行`if (reader.Read() || result.Type == JTokenType.Null) throw`——**根null在返回前即被拒**,原方案§3.1分支确实不可达。同时核实`StrictJsonSyntax.Validate`(:1093)=`Value(0); Space(); if(position!=text.Length) throw`:①`Value`对`'n'`走`Literal("null")`(:1121)——null字面量可验证;②末尾全量耗尽检查——`"null x"`/`"null,null"`等多余token拒绝;③`Space()`恰只跳过`' ','\t','\r','\n'`四种JSON空白;④无注释语法——`/*null*/`拒绝。修订的技术基础完整成立,且**不是复制解析器**(复用既有类)。
|
||
|
||
**2. 修订顺序满足三态/严格负例/Raw合同:成立。** 候选识别(四种JSON空白修剪后==字面量null)→`StrictJsonSyntax.Validate`(原字符串)→`ExplicitNull()`;其他一切输入仍走原`Object(Json(text))`。共用Json/StrictJsonSyntax/Raw复制零修改(其他26+模块不受影响);C# null/空串/"null"字符串(带非JSON垃圾)/对象字段null与根null的分离保持;Raw原字节(含空白变体)由既有复制保留。
|
||
|
||
**3. 新增负例断言充分:是。** 非JSON空白(\v/\f等)、注释、额外token、尾逗号、注入字符串、`Json("null")`经共用helper仍拒的隔离断言、三态与对象字段null分离——覆盖了修订引入的全部新边界。**M22判断准确**:DecodeBargain的父对象经`Object(Json(...))`正常解析、嵌套`obj["selections"]`的token.Type判null在JObject层面进行——不依赖共用Json返回Null,嵌套null检测不受:163影响,原方案M22合同无需任何改动。
|
||
|
||
**4. 白名单与红测边界:保持。** `B2-red-code-scope.json`确认4生产文件+Editor host未动、仅2个已批离线测试文件修改;红测77组/1717断言中**3组失败均为目标兼容断言**(M22-null-empty-list/M15-root-null/M15-explicit-null-aggregate)——预期失败非编译/apphost问题(apphost教训已按约定用精确DLL执行);停点纪律正确(发现矛盾→停→补审,不越矛盾编码)。可按修订1恢复B2~B4。
|
||
|
||
## P3清单
|
||
|
||
- **P3-1(实施精确性)**:候选修剪必须**逐字符只用`' ','\t','\r','\n'`**——禁止`string.Trim()`或`char.IsWhiteSpace`(两者接受`\v`、`\f`、`\u0085`、`\u00a0`等非JSON空白,会把非法输入误判为候选并经Validate……实际会被Validate拒绝,但候选集扩大徒增审计噪音且偏离"四种JSON空白"合同字面)。建议T1同步断言`\v`/`\f`/`\u00a0`包裹的null被拒。
|
||
- **P3-2**:修订落码时建议在DecodeChallenge内加一行注释说明"Json(:163)返回前拒绝根null,故null识别前置于Object调用"——为后续维护者保留不可达分支的教训。
|
||
|
||
## 结论
|
||
|
||
**接受修订1。** 主会话核hash(已代验1301/1301)裁决后按修订§3.1/T1增量恢复B2(生产四文件编码+新负例)→B3→B4→B5独立实施复核。原八项/三P3裁决合同继续有效;本补审不改白名单、不涉及真实账号写入。
|