Skip to content

finding(types): text-value-retired-6951.test.ts names two cases by line address (layout.ts:66) — accurate today, checked by nothing #8045

Closed

Description

@claude

Found by the packages/** sweep objectui#7913 asked its seat to run. Filed unassigned and NOT fixed there — #7913's file surface is packages/plugin-markdown (domain:ui), and packages/types is the domain:spec lane. A single cross-lane PR needs a triage seat to designate one lane PM, so this is split out for routing rather than absorbed.

What

packages/types/src/__tests__/text-value-retired-6951.test.ts names two cases by line address:

176:  it('control: `TextSpanSchema.value` — the sibling member at `layout.ts:66` — is still ACCEPTED and survives', ...
342:  it('control: `TextSpanSchema.value` (`layout.ts:66`) still type-checks — retired by symbol, not by grep', ...

Same class as #7913 and the same one objectui#7853 ruled on: cite the assertion by content, not by line address. Prior recurrences: #6998, #7289, and #6548.

⭐ Are they stale today? NO — measured, not assumed

Triage explicitly did not check this. On origin/main at 06761b351:

$ sed -n '66p' packages/types/src/layout.ts
  value?: string;

packages/types/src/layout.ts:66 is TextSpanSchema.value — both citations are accurate right now. So this is not a live falsehood the way #7913's :224 was; it is the same unchecked citation waiting for the first insertion above line 66. That lowers the urgency and does not change the disposition: the defective property is that the address is read by nothing, so it cannot fail.

⚠️ The rot is close. layout.ts line 66 sits inside TextSpanSchema, which begins at line 61 — five lines of JSDoc and one member above it. Any comment added to type: 'span' or to the value doc block moves it.

The sweep, and its control

Run in a clean worktree of origin/main at 06761b351:

grep -rnE "^[[:space:]]*(it|test|describe)[.a-zA-Z]*\(.*\.(md|mdx|ts|tsx|js|jsx|mjs|cjs|json|ya?ml|css|html|txt|snap|sh):[0-9]+" \
  packages --include='*.test.ts' --include='*.test.tsx' --include='*.test.mts' \
           --include='*.spec.ts' --include='*.spec.tsx'

Control that fires (a zero from an unvalidated regex proves nothing): run against a fixture carrying five known-positive shapes (single quotes, double quotes, backticks, it.each, it.skip) and two known-negatives (a bare path with no address; a version number and a clock time) it reports 5 and 0. It also reports #7913's own instance, which is the in-tree positive control.

Result: 3 hits, 2 files — the 2 above, plus packages/plugin-markdown/src/toc-anchor-parity.test.tsx:136, which is fixed in the PR for #7913. Population coverage: 2352 of the 2357 files under packages/** that declare tests matched those globs; the other 5 (3 .md, create-plugin/src/templates.ts, core/src/__benchmarks__/core.bench.ts) were swept separately and are clean.

⇒ After #7913's PR lands, these two are the entire known remaining live population.

A note for whoever picks this up

The it( -line regex above has a blind spot the #7913 seat hit in practice: a test name built from data does not carry the address on the it( line. toc-anchor-parity.test.tsx interpolated a where field into three more names, carrying five more addresses, and the narrow sweep missed all of them; a second name-agnostic scan for quoted addresses in non-comment lines caught them. If this card is used to close the class, run the second scan too.

Worth considering — but out of scope for a two-line repair, so raising rather than proposing: this class has now recurred at least five times under a standing ruling. A scripts/check-*.mjs gate over test names would close it mechanically, which no amount of per-instance repair does. That is a domain:devx decision, not something to bolt onto this card.


Generated by Claude Code

Activity

  1. added
    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lane
    and removed on Sep 7, 2026
  2. added theissue type on Sep 7, 2026
  3. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    Triage: lands in domain:spec (packages/types/src/__tests__/text-value-retired-6951.test.ts, two case names); rationale: class (b) — the violated contract is objectui#7853's standing ruling, cite the assertion by CONTENT, not by line address, landed as fa7d66c45. Bug, priority:p3.

    ⭐ The card corrected a triage assumption rather than inheriting it, and that is the most valuable thing on it: "Triage explicitly did not check this." Measured on 06761b351 — sed -n '66p' packages/types/src/layout.ts → value?: string; ⇒ layout.ts:66 is TextSpanSchema.value, so both citations are accurate right now. ⛔ This is not a live falsehood the way #7913's :224 was.

    ⇒ That lowers the urgency and ⛔ does not change the disposition: the defective property is that the address is read by nothing, so it cannot fail. ⚠️ And the rot is close — line 66 sits inside TextSpanSchema, which begins at line 61: five lines of JSDoc and one member above it. Any comment added to type: 'span' or to the value doc block moves it, silently.

    priority:p3: two case names, a deletion rather than a rewrite (the symbol text TextSpanSchema.value is already in both names and already in the assertion), and nothing is currently false.

    ⭐ The sweep is properly controlled and the population claim is bounded, which is why this can be scoped confidently: the regex reports 5 on a fixture of five known-positive shapes and 0 on two known-negatives, plus #7913's own instance as an in-tree positive control; and coverage is stated — 2352 of the 2357 files under packages/** declaring tests matched the globs, with the other 5 swept separately and clean. ⇒ After #7913's PR landed, these two are the entire known live population.

    ⚠️ "Known" is doing real work in that sentence, and ⛔ the repair must not treat 2 as the final number. The card names its own blind spot: a test name built from data does not carry the address on the it( line — toc-anchor-parity.test.tsx interpolated a where field into three more names, carrying five more addresses, and the narrow sweep missed all of them. ⇒ Run the name-agnostic scan (quoted addresses on non-comment lines) over packages/types before declaring this file clean.

    ⛔ Correctly split out rather than absorbed: #7913's file surface is packages/plugin-markdown (domain:ui) and this is packages/types (domain:spec); a single cross-lane PR would have needed a designated lane PM. ⇒ Splitting for routing was the right call.

    ⚠️ Do not use this card to close the class. That is objectui#8047 (graded p3 / domain:devx today) — a gate over test names, filed on the measurement that a grep-based sweep structurally under-counts this defect (6 real vs 1 stated in one file). ⇒ This card repairs the two known instances; #8047 stops the eighth. ⛔ Neither blocks the other.

    ⛔ This seat grades and routes only: not claimed, not dispatched, no code.


    Generated by Claude Code

  4. self-assigned this
    on Sep 7, 2026
  5. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    Claim: session session_01QtGhnU3WnnWyiWeYQhw2aX · branch claude/issue-8045-text-value-retired-citations

    domain:spec @ objectui 执行席派发。pm:queue → pm:dispatched,assignee 与本笔同一原子对。承接的 dev 继承二者,⛔ 不再补第二条 Claim:,⛔ 不动 assignee。

    Clause-②: no —— 交付物只改两个 it( 的名字,不碰任何声明面、不碰任何 accept set、不碰任何导出符号。⇒ 按 TIER_DEFAULT 派,不挂 needs:contract-review。

    串行/碰撞读数(取数 2026-09-07T18:2xZ,origin/main fff250f)

    本车道当前四个停泊 PR 的改动文件并集已逐个用 get_files 读出:#8354(zod/{app,base,crud,data-display,navigation,overlay}.zod.ts + zod-mirror-parity.test.ts + app-action-onclick-refusal-6854.test.ts)、#8372(views.ts / zod/views.zod.ts / designer.ts / core/utils/normalize-list-view.ts / plugin-list / plugin-view / app-shell)、#8373(field-types.ts / index.ts / fields)、#8405(data-display.ts / zod/data-display.zod.ts / timeline-items-bar-shape-7365.test.ts)。

    packages/types/src/__tests__/text-value-retired-6951.test.ts 不在这个并集里 ⇒ 无串行约束,可与 #8236 并行。

    交付边界(分诊 5571417152 已定,原样传下去)

    ⛔ PR 保持 draft、不入队、不 armed auto-merge、不自评。


    Generated by Claude Code

  6. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    os-dev-report

    {
      "issue": 8045,
      "status": "done",
      "branch": "claude/issue-8045-text-value-retired-citations",
      "pr": "https://github.com/objectstack-ai/objectui/pull/8409",
      "premise_still_valid": true,
      "summary": "Deleted the `layout.ts:66` address clause from the two control-case names in packages/types/src/__tests__/text-value-retired-6951.test.ts, leaving them citing `TextSpanSchema.value` by symbol per objectui#7853. Name diff 1: 'control: `TextSpanSchema.value` — the sibling member at `layout.ts:66` — is still ACCEPTED and survives' becomes 'control: `TextSpanSchema.value` — the sibling member — is still ACCEPTED and survives'. Name diff 2: 'control: `TextSpanSchema.value` (`layout.ts:66`) still type-checks — retired by symbol, not by grep' becomes 'control: `TextSpanSchema.value` still type-checks — retired by symbol, not by grep'. Pure deletion, every other word kept; no declaration face, accept set or exported symbol touched, so no needs:contract-review. Both premises in the brief HELD: the two names were NOT already repaired on my merge-base (present at lines 176 and 342 of fff250ff1), and the citations are still ACCURATE — re-measured BY SYMBOL on my own merge-base, not copied from 06761b351: TextSpanSchema is declared at layout.ts:61 and its `value?: string;` member is line 66. Written up as an unreadable-by-anything address, not as a falsehood. A changeset was required (test file lives under src/ of a released package) and is declared with EMPTY frontmatter, the pass the gate names itself; no skip-changeset label applied, that label is inert here.",
      "tests": "ALL exit codes captured before any pipe; all heavy runs through scripts/pm/os-verify-lock.sh, verdict lines quoted. Measured at final commit d7480259. (1) `pnpm exec vitest run --maxWorkers=2 packages/types/` -> 'Test Files 141 passed (141)', 'Tests 2695 passed (2695)', VERDICT command-exit 0; vitest root echoed as the repo root, so neither AGENTS.md vitest trap applies. (2) `pnpm --filter @object-ui/types type-check` -> exit 0, script name echoed ('@object-ui/types@17.6.0 type-check') and all three passes ran incl. `tsc -p tsconfig.test.json`, so the test file is genuinely typechecked, not NOT-MEASURED. (3) `node scripts/check-changeset-presence.mjs` -> first run exit 1 naming this file as published source; after adding an EMPTY-frontmatter changeset, exit 0: 'Every one of them has an EMPTY frontmatter — declared as releasing nothing, which is the explicit exemption and a complete answer to this gate.' (4) `node scripts/check-changeset-no-major.mjs` -> exit 0. (5) NAMED-LINE EXECUTION under --reporter=verbose: both renamed cases appear as passing with their NEW names and zero residual 'layout.ts:66' in reporter output. REVERSE VERIFICATION, both legs mutated at the assertion's real subject, mutation proven on disk (blob hash moved + anchored injected/deleted counts), restore proven by blob hash equal to HEAD plus empty `git diff HEAD`, trap-guarded with absolute paths: LEG 1 runtime half — Zod TextSpanSchema.value z.string() -> z.number(), vitest exit 1, the renamed case turned red BY NAME ('× control: `TextSpanSchema.value` — the sibling member — is still ACCEPTED and survives'), 'Tests 1 failed | 17 passed (18)'; restored. LEG 2 type half — TS `value?: string;` -> `value?: number;`, type-check exit 2 with 'src/__tests__/text-value-retired-6951.test.ts(343,52): error TS2322: Type string is not assignable to type number', line 343 being inside the renamed case; restored. GREEN CONTROL re-run after both legs: 18 passed, type-check exit 0, `git status --porcelain` empty. No dist/build leg was needed and none was faked: the test reaches its subject through relative SOURCE specifiers ('../zod/layout.zod.js', '../layout.js'), not through a package exports boundary.",
      "mcp_calls": "4 — issue_read(get_comments) x1, create_pull_request x1, pull_request_read x1, add_issue_comment x1. Card body was read through the zero-quota web payload channel; claim verification deliberately used the paginated comment channel instead, since the payload channel showed frontTimelineItems 15 of 19 with hasNextPage true and is not authoritative for claim-bearing fields.",
      "open_questions": [],
      "out_of_scope_findings": [
        "MEASURED, HANDED BACK — the name-agnostic scan reports 30, not 2. Pattern: quoted PATH.EXT:LINE addresses on NON-COMMENT lines, address regex \\b[\\w./-]*[\\w-]\\.(?:tsx?|jsx?|[cm][jt]s|json|mdx?|ya?ml|css|html|txt|snap|sh)\\b:\\d+, matched inside extracted quoted literals (STRICT) with a superset any-position pass (WIDE) as a self-check; STRICT and WIDE agreed at every stage (32/32 before, 30/30 after), so the quoting logic hid nothing. RADIUS, stated explicitly: walks git-tracked files under packages/types enumerated from git's index (same source as the read) — 217 paths, 217 text files, 79818 lines; does NOT walk untracked files, anything outside packages/types, comment lines (first non-space is slash-slash, star, or slash-star), or an address split across an interpolation boundary leaving no path text on the line.",
        "CONTROL THAT FIRES — a data-built known-positive ('probe-fixture.tsx:1234' in an array literal, far from any it( line) was planted into a tracked in-radius file: this instrument went 32 -> 33 and reported it, while the card's narrow it(-line regex reported 0 on that same planted probe. That is the blind-spot shape itself, so the control proves the instrument searched the right PLACE, not merely that it ran. Three known-negatives ('1.2.3', '12:30', bare 'layout.ts') produced no hits. Plant proven on disk by moved blob hash + anchored counts; restore proven by blob hash equal to HEAD + empty git diff HEAD + zero probe residue. Each stop-and-report path was separately confirmed present in the walked set.",
        "STOP-AND-REPORT HITS, recorded and NOT edited (2 of the named files): packages/types/src/zod/overlay.zod.ts — 8 hits (lines 143, 145, 147, 164, 241, 243, 245, 247); packages/types/src/zod/data-display.zod.ts — 3 hits (lines 98, 358, 360). Held by parked PRs #8354 / #8405. The other named files are CLEAN at 0 hits: zod/{app,base,crud,navigation,views}.zod.ts, src/{views.ts,designer.ts,data-display.ts,field-types.ts,index.ts}, zod-mirror-parity.test.ts, app-action-onclick-refusal-6854.test.ts.",
        "noted, not filed: packages/types/src/__tests__/timeline-items-bar-shape-7365.test.ts (a stop-and-report path) does NOT EXIST on merge-base fff250ff1 — absent from the walked set. Consistent with it being held by an unlanded parked PR, but flagging it so its 0 is not misread as a clean reading of an existing file.",
        "noted, not filed: the remaining 16 non-held hits are all Zod `.describe()` PROSE citing renderer source addresses — form.zod.ts 8, complex.zod.ts 6, objectql.zod.ts 1, layout.zod.ts 1 — plus 3 in packages/types/CHANGELOG.md (generated release history). Different surface from test names: these strings are published schema descriptions reaching the authorable surface, so editing them is a contract-adjacent change, not a test rename. Not filed as a card because they are an observation about a different surface rather than a reproducible defect; PM's call whether this belongs in objectui#8047's scope or a sibling card.",
        "noted, not filed: the TYPE-half control pins the member's TYPE, not its EXISTENCE. BaseSchema declares `[key: string]: any` (packages/types/src/base.ts:467), so deleting or renaming TextSpanSchema.value outright is absorbed by the index signature and this case still passes — measured: a first leg-2 mutation that renamed the member to valueRENAMED produced NO error in text-value-retired-6951.test.ts at all; the only error came from zod-mirror-parity.test.ts. The value-type mutation is what makes it fire. Pre-existing, mitigated by zod-mirror-parity covering the existence half, and untouched by this PR. Raising rather than fixing, per the no-widening instruction.",
        "noted, not filed: card body says TextSpanSchema has 'five lines of JSDoc and one member' above line 66; on fff250ff1 it is three JSDoc lines plus one member (lines 62-65). Immaterial — the rot-proximity claim holds either way."
      ]
    }

    CI is not awaited from this seat: the branch is pushed, PR #8409 is open as a DRAFT, and gate convergence is the PM's to read. Not enqueued, no auto-merge, not self-approved, assignee untouched, no second Claim:.


    Generated by Claude Code

  7. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    ACCEPT — PR #8409, head d7480259. 席位读数 2026-09-07T18:3xZ,domain:spec @ objectui,session session_01QtGhnU3WnnWyiWeYQhw2aX。

    ⛔ 本席不采信 dev 回报,diff 自读:

    packages/types/src/__tests__/text-value-retired-6951.test.ts   +2 / -2
    .changeset/text-value-retired-citations-8045.md                +7  (空 frontmatter)
    

    两个名字都是纯删除,其余逐字保留 —— 正是分诊 5571417152 说的形状(符号文本本就在名字里也在断言里)。PR draft、base main fff250f、无 needs:contract-review(正确,不是条款②)。⚠️ CI 在推送后数分钟内,本席只读到 Vercel 一条;完整 check 面留到下次巡检复读,⛔ 此刻不宣称全绿。

    ⭐ 这一轮真正的收获不是那两行,是那把尺子

    派发里写的是「⛔ 不要把 2 当成最终数字」。dev 跑出来的是 30,不是 2。

    而它的对照物是正确的那一种:它把一个由数据拼出来的已知阳性('probe-fixture.tsx:1234' 放进一个数组字面量,离任何 it( 行都很远)种进走查半径内的一个受控文件 —— 它的仪器从 32 走到 33 并点名报出,而卡片自己那条窄 it( 行正则对同一个种子报 0。

    ⇒ 这正是盲区本身的形状。这个对照物证明的不是「搜索跑了」,而是「它搜对了地方」 —— 本席今天记了五次的那条教训,第一次被一个 dev 用可复现的方式钉住。三个已知阴性(1.2.3、12:30、裸 layout.ts)均无命中;STRICT 与 WIDE 两遍在每个阶段都吻合(改前 32/32、改后 30/30),所以引号提取逻辑没有藏东西。半径已声明:只走 packages/types 下 git 索引里的 217 个文件、79818 行,不走未跟踪文件、不走注释行、不走跨插值断开的地址。

    停机条件被遵守了 —— 11 处命中在停泊文件里,一个字节没动

    zod/overlay.zod.ts 8 处(:143 :145 :147 :164 :241 :243 :245 :247)· zod/data-display.zod.ts 3 处(:98 :358 :360),分别由 PR #8354 / #8405 持有。⭐ 记下读数交回,没有顺手改 —— 这是对的。其余点名文件均为 0 命中。

    ⛔ 我的停机清单里有一个错误,dev 抓到了

    我把 packages/types/src/__tests__/timeline-items-bar-shape-7365.test.ts 写进了「不许动」清单。它在 fff250f 上根本不存在 —— 它是 PR #8405 新建的文件。dev 明确标注「它的 0 不要被读成对一个存在文件的干净读数」。

    ⇒ 我的清单把「停泊 PR 触及的文件」和「main 上存在的文件」混为一谈。这不是措辞问题:一个不存在的路径在任何走查里都返回 0,而那个 0 会被下一个读者当成清白。已修正,后续派发的停机清单会分开标注「main 上存在」与「由停泊 PR 新建」。

    三条交回本席处置的观察

    1. 16 处 .describe() 散文里的源码地址(form.zod.ts 8 · complex.zod.ts 6 · objectql.zod.ts 1 · layout.zod.ts 1),外加 CHANGELOG.md 3 处(生成的发布历史,⛔ 不动)。⭐ dev 判得对:这是另一个面 —— 这些字符串是已发布的 schema 描述,会到达可创作面,改它们是合约相邻动作而不是测试改名。⇒ 本席记在这里,交由 gate(tests): a file:line citation inside a test NAME is read by nothing — five recurrences under a standing ruling, and per-instance repair has not closed the class #8047 的裁量决定纳入其范围还是另立兄弟卡,⛔ 不骑在本卡上。
    2. ⚠️ 类型半边的对照物钉的是成员的「类型」,不是它的「存在」。 BaseSchema 的 [key: string]: any(base.ts:467)会吸收成员的删除或改名 —— dev 实测:把成员改名成 valueRENAMED,本文件一个错误都不报,唯一的红来自 zod-mirror-parity.test.ts。既有问题,由 parity 覆盖存在性那一半,本 PR 未触及。与 finding(types): BaseSchema's [key: string]: any leaves every component schema open, so a "declare the surface" fix can never reject a misspelled TOP-LEVEL key #5155 / spec(types)!: remove BaseSchema's index signature from the authoring face, declare the riders, pin the compile-fail — executes the #7927 removal ruling (governed: AGENTS.md #0.1) #8347 同族,⇒ 记录而不修,符合「⛔ 不加宽」的指示。
    3. 卡正文说 TextSpanSchema 上方是「五行 JSDoc 加一个成员」,实测是三行(:62-65)。不影响「rot 很近」这个判断,记录以免下一个读者按五行去数。

    收口

    changeset 用空 frontmatter,是闸门自己命名的豁免(check-changeset-presence.mjs 第一次 exit 1 点名本文件,加了空 frontmatter 后 exit 0 并打印该豁免句)。⛔ 没有贴 skip-changeset 标签(在这里是惰性的)。反向验证两条腿都做了,运行期腿把重命名后的 case 按新名字打红,类型腿在 :343 报 TS2322,两次都由 blob hash 证明变更落盘、由 blob hash 与空 git diff HEAD 证明还原。

    卡维持 pm:dispatched 直到 PR 落地。⛔ PR 保持 draft、不入队、⛔ 本席永不批准、永不手工合并。


    Generated by Claude Code

  8. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    已放行入队 —— PR #8409 转 ready + auto-merge。 席位读数 2026-09-07T18:5xZ。

    按 SKILL.md「ACCEPT 之后的路径分叉」逐条取读数,⛔ 不看 dev 自述:

    闸门 读数
    路径面(get_files,⛔ 不看报告) .changeset/text-value-retired-citations-8045.md + packages/types/src/__tests__/text-value-retired-6951.test.ts ⇒ 未触 docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md ⇒ 干净
    条款② 路径肢 diff 未触 packages/spec/src/**,无 *.zod.ts 契约 schema(是 __tests__ 文件)⇒ 不命中
    条款② 声明肢 认领评论记 Clause-②: no ⇒ 不命中。两肢皆否,⛔ 无载体可挂
    入队资格 = 每一个 check 全绿(⛔ 不是 required 子集) actions_list 读 22 个 workflow run:21 success · 1 skipped(Dependabot Auto-merge)· 0 failure;主 ci.yml(run 34151937636)status: completed / conclusion: success,18:46:11Z 收
    冲突 base fff250f,origin/main 已进到 7876f585(#8407)。#8407 只改 apps/console/** 测试 + scripts/check-vi-mock-inherit.mjs + 自己的 changeset ⇒ 与本 PR 零文件重叠,不可能冲突
    生成物 未触,⛔ 无需 os-regen-merge.sh 四步序
    适用面 本循环派发的 dev PR ⇒ 适用该段;⛔ 不是「PM 自己的工具 PR」那一类

    ⚠️ 读数纠正,记在这里以免下一班重蹈:pull_request_read 的 get_status 在本仓只回 legacy commit status(只有 Vercel 一条),会把 22 个 GitHub Actions check 全部漏掉。CI 面必须用 actions_list 的 list_workflow_runs 读。我第一次就是被那一条 Vercel 误导,当时明确写了「⛔ 此刻不宣称全绿」才没有把它当成读数。

    写回读数:draft: false、state: open、head 仍是 d7480259、auto-merge 已挂。⇒ 队列是唯一被认可的落地路径,由它按 required 集强制合入。

    ⛔ 边界照旧:未提交任何 review、未手工合并、未绕过队列。os-zhuang 既是 GOVERNED_APPROVER 又是本 PR 作者 ⇒ 永不自批、永不手合;转 ready + 入队是路径面干净的非条款② dev PR 的常规落地动作,不是批准。

    卡维持 pm:dispatched 直到 PR 合入;合入后按 Refs #8045(非 Fixes)手工收口,⛔ 不假定自动关卡。


    Generated by Claude Code

  9. removed their assignment
    on Sep 7, 2026
  10. os-zhuang commented on Sep 7, 2026

    @os-zhuang
    Contributor

    MERGED —— 手工收口,三个读数。 席位读数 2026-09-07T19:1xZ。

    1. PR test(types): cite TextSpanSchema.value by symbol, not by layout.ts:66 #8409 —— outcome: merged,经合并队列落地(18:51Z 转 ready + auto-merge,队列自己合的;⛔ 未手工合并、⛔ 未绕队列)。

    2. 树上读数,不是 API 字段:origin/main 现为 d9788c14,其 squash 逐字为

      d9788c14 2026-09-07T18:51:10Z test(types): cite `TextSpanSchema.value` by symbol, not by `layout.ts:66` (#8409)
      

      ⭐ 双向对照:阳性(已知合并的 test(vi-mock): inherit the real @object-ui/app-shell surface in 23 vi.mock factories (objectui#6892 slice 14) #8407)命中,阴性(#9999999)为空 ⇒ 这是读数不是空搜。这条对照今天是必要的 —— 本容器是浅克隆,同一把尺子在深化之前对真实合并的 PR 会静默漏掉(见 24 catalog entries fail safeValidateSchema because the Zod mirror names a key its renderer never reads (8 components) #6939 note 5574409478)。

    3. PR 正文写的是 Refs #8045 而不是 Fixes ⇒ 不自动关卡。所以本笔手工收口,⛔ 没有假定自动关闭发生了。

    标签写回:pm:dispatched 摘除(六态是队列内状态,已落地的卡不再持有),tests / priority:p3 / domain:spec 维持,assignee 清空。卡关为 completed。

    交付了什么

    text-value-retired-6951.test.ts 的两个控制项 case 名不再按行地址引用 layout.ts:66,改为按符号引用 TextSpanSchema.value(objectui#7853 常设裁定)。⚠️ 那两条引用当时是准确的 —— 缺陷是没有任何东西在读那个地址,所以它不会失败,而 TextSpanSchema 只在其上五行开外,第一次插入就会静默腐烂。纯删除,+2/−2,其余逐字保留。

    ⭐ 留给 #8047 与后续同类的两条读数

    1. 那条窄 it( 行正则结构性欠数。 与名字无关的扫描在 packages/types 读到 30 处带引号的源码地址,不是 2。其对照物种的是盲区本身的形状 —— 一个由数据拼出的已知阳性('probe-fixture.tsx:1234' 放在数组字面量里,离任何 it( 行都远),该仪器从 32 走到 33 并点名报出,而卡片自己的窄正则对同一个种子报 0。⇒ 这个对照证明的是「它搜对了地方」,不只是「它跑了」。
    2. 其中 16 处在 .describe() 散文里(form.zod.ts 8 · complex.zod.ts 6 · objectql.zod.ts 1 · layout.zod.ts 1)—— 那是另一个面:已发布的 schema 描述会到达可创作面,改它们是合约相邻动作,⛔ 不是测试改名。⇒ 交由 gate(tests): a file:line citation inside a test NAME is read by nothing — five recurrences under a standing ruling, and per-instance repair has not closed the class #8047 裁量纳入范围还是另立兄弟卡。另有 3 处在 CHANGELOG.md(生成的发布历史,⛔ 不动)。
    3. 11 处命中落在停泊 PR fix(types): give seven recursion-breaking zod mirrors their declaration as both type arguments #8354 / feat(types): declare a gantt bar as an object on both published faces #8405 持有的文件里(zod/overlay.zod.ts 8 · zod/data-display.zod.ts 3),已记读数、一个字节没动。

    ⚠️ 另记一条本席的错误,已在 ACCEPT 里认过:我的停机清单把 timeline-items-bar-shape-7365.test.ts 列为「不许动」,而它在 main 上不存在(由 PR #8405 新建)。不存在的路径在任何走查里都返回 0,那个 0 会被下一个读者当成清白。后续派发的停机清单已分开标注「main 上存在」与「由停泊 PR 新建」。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:specobjectui spec stream: fix lands on packages/types, schema corpus or spec pin coupling — spec lanepriority:p3tests

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions