# ECR-041 **Title:** OpsCMS · Banner 薄写面(Write-Wave 首刀) **Status:** **Closed**(2026-08-13 · Write-Wave Continuous Loop) **Date:** 2026-08-13 **Change Level:** L2 **Parent:** WAVE0-FROZEN · **Write-Wave:** `docs/WAVE0/WRITE_WAVE_AUTHORIZATION.md` **Predecessor:** ECR-024 Closed **Coding:** Done · Migration `000051_ops_banner_write` ## Change 1. Active Spec:`.ai/product/feature-spec/ops-banner-write.md` 2. Admin:`POST/PUT /admin/cms/banners*` + 权限 `admin.cms.write` + 审计 3. C 端:`GET /home/banners`;user-h5 首页推荐区 API 优先、静态 `homeFeeds` 回退 4. admin-h5 CMS Banner 编辑(**不**做 FeedSlot 写) 5. OpenAPI · contract_diff · migration(编码时锁 `Max Migration+1`) ## Motivation 只读 Banner 目录无法运营;首页推荐区仍静态。Write-Wave 首刀用最低风险写面验证闭环;支付仍最后。 ## Scope ### Allowed - 上列 Spec / Banner 写读闭环 / 加法权限码 / 审计 / 首页投影 ### Forbidden(Non-goals) - **FeedSlot 写**(后续独立 ECR)· ScheduledPublication 写 - UGC · soft-delete · 真支付 - Crisis / Handoff / ContentSafety 高风险写 - 合并 Banner+FeedSlot · 扩大为本 ECR 多 Capability - 新权限模型(子系统)· 改 ESS/Loop/Adapter ## Acceptance 见 Spec §8 AC-F/S/A/C/O;实现后 TEST_REPORT 映射。 ## Trace Spec `ops-banner-write` · BD-2026-041 · PRODUCT_SPEC/ECR-041 · CONTRACT_DIFF(实现时)· WRITE_WAVE_AUTHORIZATION ## Coding gate Closed via Write-Wave Continuous Loop · Evidence: `docs/TEST_REPORT/ECR-041.md` · `docs/CODE_REVIEW/ECR-041.md`