Skip to content

finding: live-e2e allowlist 的 spec 名单被手抄在两处文档里,每次晋级都会失同步 #3488

Description

@yinlianghui

发现于 #3472 / PR #3487(把 saved-view-filter.spec.ts 晋级进 test:e2e:live:ci)。只记录,不在该 PR 里修 —— 两处都在那单的 file fence 之外,其中 .github/workflows/ 明确禁改。

现象

allowlist 的真身是 package.json 的一行:

"test:e2e:live:ci": "playwright test --config=playwright.live.config.ts screen-flow.spec.ts action-modal.spec.ts master-detail.spec.ts saved-view-filter.spec.ts"

但这份名单被按 spec 名逐个手抄在另外两个文件里,二者都不会随 package.json 更新:

  1. .github/workflows/live-e2e.yml:3-4(头部注释)

    # What runs: an allowlist of e2e/live specs (screen-flow, action-modal,
    # master-detail — `pnpm test:e2e:live:ci`) against `objectstack dev` booted
    
  2. content/docs/guide/ci-cd-pipeline.md:233-234

    What it does: runs the allowlisted live specs (`pnpm test:e2e:live:ci` — screen-flow,
    action-modal, master-detail) against a real `objectstack dev` backend booted from **published**
    

PR #3487 合并后,这两处都会漏掉 saved-view-filter,即"三个 spec"变成事实上的四个。

为什么值得记一笔

live-e2e.yml 自己的政策就是"a few at a time"地长这份名单(见其头部 "Growing the allowlist" 段),也就是说这份名单被设计为会反复变更。把它逐名手抄在两处,等于给每次晋级都埋一次静默漂移;而 workflow 头部注释恰恰是下一个 agent 读来判断"这条 lane 到底跑了什么"的第一手材料 —— 它错了,判断就跟着错。目前 lane 是 continue-on-error: true 的非门禁 lane,漂移不会咬到用户,所以按 observation-class 归档。

可能的处理方向(留给 triage 定夺,未做取舍)

  • 最省事:两处都去掉逐名枚举,改成"名单以 package.json 的 test:e2e:live:ci 为准"的指路,漂移源就消失了。
  • 或者:保留枚举,但加一个 check 脚本对齐 package.json 与两处文档 —— 为一条非门禁 lane 的注释新增一道门禁,成本可能不划算。

备注

filing 前按流程搜过 open issues(关键词:allowlist / live-e2e / ci-cd-pipeline.md / live-e2e.yml / 文档 spec 列表),均 0 命中;期间 GitHub search API 间歇性返回 API rate limit already exceeded,所以搜索覆盖面不敢称完备,若已有重复请直接关掉这条。

Activity

  1. self-assigned this
    on Aug 7, 2026
  2. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    认领(PM 分诊晋级)— 会话 session_01GTRjn8xBqp75dk7kFupVRt,分支 claude/issue-3488-allowlist-pointer。

    分诊结论:按 issue 里的"最省事"方向办 —— 两处手抄名单改为指路(名单以 package.json 的 test:e2e:live:ci 为准),不加对齐脚本(为非门禁 lane 的注释加门禁不划算)。PR #3487 已合并,两处文档现在漏 saved-view-filter,是活的事实性错误。

    文件面:.github/workflows/live-e2e.yml(仅头部注释)、content/docs/guide/ci-cd-pipeline.md(§live-e2e 段)。越界即停。


    Generated by Claude Code

  3. yinlianghui commented on Aug 7, 2026

    @yinlianghui
    CollaboratorAuthor

    验收:ACCEPT — PR #3508。

    核过 GitHub 实物:两文件恰如派单文件面 —— live-e2e.yml 仅头部注释(yaml.safe_load 前后 jobs/steps/env 不变,dev 报告已附),ci-cd-pipeline.md 改为"名单以 package.json 的 test:e2e:live:ci 为准 + 本页刻意不重复"的指路写法,并把"为什么不重复"讲清楚(每次晋级都会漂,已经漂过一次,即本单)。加分项:PR 自己的 Live E2E run 实证了前提(playwright 实跑 4 个 spec 文件,而文档说 3)。

    三点 PM 裁定随验收记录:

    1. 第三处手抄(.changeset/live-e2e-lane.md:29)按 dev 建议不动:changeset 是按 PR 的历史记录,"Allowlist start" 措辞是 lane 引入时刻的状态,非事实性过期 —— 背书,不另立单。
    2. 逆向验证的如实呈现背书:纯注释/prose diff 没有可翻向的测试,dev 直接测了"过期文本同样全绿"来证实"没有任何 CI 读这份枚举"—— 这恰是漂移成因,也反证了不加对齐门禁的分诊决定。
    3. Type Check 红为 main 的 Type Check job 全红:#3489 与 #3498 的语义冲突,check-doc-links.test.ts 的 @ts-expect-error 在 allowJs 下变成 TS2578 #3504 既有断裂(TS2578 同一坐标,本 PR 零 .ts 改动),fix(scripts): 删除 check-doc-links 测试中已失效的 @ts-expect-error(修复净 main 上的 TS2578) #3505 落地后 update branch 重跑即绿。

    PR 转 ready + auto-merge(配额恢复后执行;若与 PR #3506 的 ci-cd-pipeline.md 相邻 hunk 在队列里撞出 dirty,按 #3458 先例续接解决并重挂 auto-merge)。


    Generated by Claude Code

  4. added 2 commits that reference this issue on Aug 10, 2026
    654d421
    60f3aff
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions