已开启
docs(sdd): add ROM optimization SDD baseline (spec/design/plan v2.2) #5024
docs(sdd): add ROM optimization SDD baseline (spec/design/plan v2.2) #5024
已开启
岳港创建于 28 天前
岳港
岳港
28 天前

概述

新增通知子系统 ROM 优化的 SDD(Spec-Driven Development)文档基线(v2.2),将根目录 proposal.md(2026-07-28 评审通过)与 PR #4940 扩展分析整合为结构化交付件链:proposal → spec → design → execution-plan → review,机器一致性校验全过(ohos-sdd validate --level all:33 checks / 0 broken / 0 warn)。

变更内容

目标:ROM 7,963KB → ≤6,769KB(-1,194KB / 15%,合同底线);可实施潜力 3,287-7,129KB(41.2%-89.5%)。

交付件(.codespec/changes/draft-20260828-rom-optimization/)

文件 内容
proposal.md 需求基线 v2.2:P1-P6 统一阶段模型;InnerAPI JSON 接口族变更(ToJson→ToJsonString,PR #4940 用户决策已接受);16 项代码级核验修订;范围暂缓决策
spec.md 10 条 AC(WHEN/THEN)+ 12 条规则:JSON 接口变更受控(白名单+迁移指引)、nlohmann 符号消除(维护 24 .so)、ToJsonString 输出与旧 ToJson().dump() 逐字节等价、IPC Parcelable 零变化三重兼容守护
design.md 11 个 ADR + 缺口矩阵 G1-G19;P4(nlohmann::json 提取,最大单项 1,365-4,113KB)承载于 frameworks/ans(ans_innerkits src/json 源组)——本地核验发现原 PR #4940 的 libans_base 选址与既有 ans_base → ans_innerkits 依赖构成 GN 循环,已修正
execution-plan.md 9 个自包含 Task 卡(P1-P6 阶段映射;AC-1~10 全覆盖;含验证命令与停止条件)
review.md GA/GB 门禁记录 + 16 项现状核验审计轨迹(P1 已落地 643KB、0 extern template、非维护模块零调用等)
annex/extended-optimization-design.PR4940.md PR #4940 扩展设计存档(1,253 行;PR 已 closed,防 fork 分支丢失)

关键决策记录

  1. v2.1 载体修正:P4 JSON 集中实例化承载库 libans_base → frameworks/ans(ans_innerkits)(依赖 DAG 实测,规避 GN 循环依赖)
  2. v2.2 范围暂缓:annex 优化方向二(Feature-gate 源文件裁剪深化)与小 .so 合并本轮不实施(Owner 决策)
  3. 基线口径:P1"643KB"仓内无实测工件降级参考值,TASK-1 起以本仓环境重建 Debug+Release 双口径基线

说明

  • 本 PR 仅含文档(.codespec/),零生产代码变更
  • 后续实现按 execution-plan TASK-1~9 逐任务推进,每阶段独立可回滚
  • 不绑定 issue

Co-Authored-By: Agent

likedislike
合并受阻
afwk_helper成员
28 天前 评论:

开始进行AI检视!

AI review has been started, please wait...

likedislike
afwk_helper成员
28 天前 评论:
check type result report
start ai_review pass -
likedislike
openharmony_ciopenharmony_ci成员
28 天前 添加了label:waiting_on_author
openharmony_ci
openharmony_ci成员
28 天前 评论:

感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。


Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.

likedislike
openharmony_ciopenharmony_ci成员
28 天前 添加了label:dco检查成功
afwk_helper成员
28 天前 评论:

⚠️ 🤖 AI 代码检视报告 ⚠️

总体评估: NEEDS_ATTENTION

问题统计:

  • 总问题数: 3
  • 严重问题: 0
  • 高危问题: 1

摘要:
本PR为ROM优化SDD文档基线,设计思路清晰且考虑了GN循环依赖规避,但在execution-plan.md和design.md中存在与v2.1载体修正不一致的严重路径错误和自相矛盾,需修正以避免实施阶段引入反向依赖。

📊 详细报告
查看完整的审查详情,包括具体的问题描述、建议和代码位置:
🔗 查看详细报告


此评论由 OpenHarmony Insight 代码审查系统自动生成

likedislike
afwk_helper成员28 天前进行代码检视1
.codespec/changes/draft-20260828-rom-optimization/execution-plan.md
@@ -0,0 +275,4 @@
275+ 
276+| 操作 | 文件 | 说明 |
277+|------|------|------|
278+| Create | `services/infrastructure/src/json/` 其余 15 个 *_json.cpp(request ~950 行/content ~600/capsule ~350/conversational ~400/live_view ~500/misc ~800 等,annex §8.7 全量) | 实现迁入 |
afwk_helper28 天前评论:

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟠 TASK-3 新建文件路径与 v2.1 载体修正矛盾,将引入反向依赖

位置: L278-L280 | 严重程度: High

❓ 问题描述

在 execution-plan.md 的 TASK-3 中,新建 15 个 *_json.cpp 文件的路径被指定为 services/infrastructure/src/json/,而 frameworks/ans 下的 34 个原文件将被删除 ToJson/FromJson 函数族。这直接违背了 design.md ADR-2 中 v2.1 载体修正的决定(将实现收拢到 frameworks/ans)。如果在 services/infrastructure 下新建 JSON 实现文件,将导致 frameworks/ans 反向依赖 services/infrastructure(由于 Parcelable 声明在 inner_api/interfaces 下,实现在 frameworks/ans,若实现移到 services,则 frameworks 必须依赖 services 才能链接通过),这构成了严重的 GN 循环依赖。

💡 修复建议

修改建议:将 TASK-3 中所有新建 *_json.cpp 文件的路径从 services/infrastructure/src/json/ 统一修正为 frameworks/ans/src/json/,与 TASK-2 及 design.md ADR-2 保持一致。

278: | Create | frameworks/ans/src/json/ 其余 15 个 *_json.cpp(request ~950 行/content ~600/capsule ~350/conversational ~400/live_view ~500/misc ~800 等,annex §8.7 全量) | 实现迁入 |
279: | Modify | frameworks/ans/src/notification_*.cpp 34 文件 | ToJson/FromJson 族删除(Marshalling 保留) |
280: | Modify | frameworks/ans/BUILD.gn | sources 重组(src/json 源组;v2.1 无新增 deps) |


likedislike
afwk_helper成员28 天前进行代码检视1
.codespec/changes/draft-20260828-rom-optimization/design.md
@@ -0,0 +173,4 @@
173+ 
174+| API 签名 | 类型 | Kit | d.ts 位置 | 权限要求 | SysCap |
175+|----------|------|-----|-----------|----------|--------|
176+| `class AnsJson`(PIMPL;Parse/Accept/Dump/IsXxx/At/GetXxx/Set/Append/Size/ForEachObject 等,annex §8.5.1 完整签名) | InnerApi | Notification Kit(内部) | N/A(C++ inner_api 路径:services/infrastructure/interfaces/ans_json.h) | - | - |
afwk_helper28 天前评论:

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟡 AnsJson 头文件路径在 API 表中与 ADR-2 矛盾

位置: L176-L178 | 严重程度: Medium

❓ 问题描述

在 design.md 的 ADR-2 中明确指出:AnsJson PIMPL 封装的头文件应置于 frameworks/ans/src/json/ 经 public_configs 导出。然而在「API 签名、Kit 与权限」的「新增 API」表中,AnsJson 的 d.ts 位置(C++ inner_api 路径)却写为 services/infrastructure/interfaces/ans_json.h。这种文档内部的不一致会给后续 TASK-2 的执行者带来混淆,且 services/infrastructure 路径在 ADR-2 中已被否决。

💡 修复建议

修改建议:将新增 API 表中 AnsJson 的路径修正为 frameworks/ans/src/json/ans_json.h,与 ADR-2 的设计决策对齐。

176: | API 签名 | 类型 | Kit | d.ts 位置 | 权限要求 | SysCap |
177: |----------|------|-----|-----------|----------|--------|
178: | class AnsJson(PIMPL;Parse/Accept/Dump/IsXxx/At/GetXxx/Set/Append/Size/ForEachObject 等,annex §8.5.1 完整签名) | InnerApi | Notification Kit(内部) | N/A(C++ inner_api 路径:frameworks/ans/src/json/ans_json.h) | - | - |


likedislike
afwk_helper成员28 天前进行代码检视1
.codespec/changes/draft-20260828-rom-optimization/annex/extended-optimization-design.PR4940.md
@@ -0,0 +829,4 @@
829+ static AnsJson Array();
830+ static AnsJson Object();
831+ // 序列化
832+ std::string Dump() const;
afwk_helper28 天前评论:

🤖 AI 代码检视意见(回复本评论可解决检视意见,点击被检视代码行左侧的小头像可收起检视意见)


🟡 AnsJson::Dump 默认行为与异常安全(-fno-exceptions)的潜在冲突

位置: L832-L834 | 严重程度: Medium

❓ 问题描述

在启用 -fno-exceptions(P2/A8)后,若 AnsJson::Dump() 默认调用 nlohmann::json::dump() 而未显式传入 error_handler_t::replace,当序列化包含非法 UTF-8 的字符串时,nlohmann 内部会抛出 type_error 异常。在禁用异常的环境下,此异常将直接导致进程 abort()。文档中虽然在其他处提及了 replace 锚点,但 AnsJson 接口的 Dump() 签名声明为 std::string Dump() const; 和 std::string Dump(int indent) const;,未在接口契约层面强制使用 replace 策略,存在运行时崩溃风险。

💡 修复建议

修改建议:在 AnsJson::Dump 实现中强制内部使用 nlohmann::json::error_handler_t::replace,并在接口注释中明确此安全语义。

832: // 序列化(内部强制 error_handler_t::replace 以保证 -fno-exceptions 下的异常安全)
833: std::string Dump() const;
834: std::string Dump(int indent) const;


likedislike
openharmony_dcp
openharmony_dcp成员
2 天前 评论:

您好, @cheerful_ricky 该PR需要您响应,已过去25天未响应,请根据检视意见进行修改,如5天内未响应检视意见,此PR会被自动关闭。关闭后的PR,如有需要,您可以自行打开该PR。

likedislike