763f4b5b4c
上一笔只用 `:has(.plan-gdd-surface)` 认策划链路,漏了一格:`PlanGddSurface` 在 `planGddState === null` 时整个返回 null,而 `planGddState` 初值就是 null,要靠 `hydrate_game_creator_plan_gdd_state` 这一次独立 IPC 才填上。首帧竞态、以及 hydrate 持续失败(非写锁争用的错误会把 state 留在 null)这两种情形下,策划 run 照跑、 `PlanningLaneRuntimeStrip` 照渲染澄清卡,但容器上的 `:has()` 不命中,#193 那套 `display: block` + 列表 `height: 100%` + `overflow: hidden` 原样回来,卡片又被静默裁到 可视区外。 判据改成 `.plan-gdd-surface` 与 `.planning-lane-runtime-strip` 的并集。两个类都只属于 策划链路,做游戏与做素材仍走 master 的 block 列。窄条在场本身就等价于「有东西要用户 动手」,并进来之后「卡片存在」和「列布局生效」是同一件事,不再依赖另一条异步链路的 时序。 守门加在已有的策划样式测试里(同一处已经钉着 #193 误删的几条规则):断言这条 flex 列 规则的 `:has()` 必须包含窄条类。已验证非空转——把并集改回单一类,这条断言变红。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>