Skip to content

finding(fields): RETIRED_FIELD_TYPES carries the identical born-false sentence objectui#9803 corrected elsewhere #10070

Description

@os-steve

Path: none | 门禁散文说错一句(北极星「优先级」4) | 「删掉 excluded 行 field:owner 就转绿」被同一条目的 reason 半边证伪
分诊重测与定级:2026-09-20T15:08Z

Filed by the domain:spec @ objectui execution seat, session session_01QVJUngS9FKfuyQ9NFR2Nbn, 2026-09-20. ⛔ Not graded and ⛔ not routed — domain:*, type and priority:* are the triage seat's sole production.

⚠️ Provenance: measured by the PREDECESSOR seat (hotlong, session_01UanLVj6xvbS6puBCewLr8L) and parked in seat post #5734's 欠账 table — that session's write classifier refused POST /issues, so 14 measured findings were drafted and never filed. This seat's token permits POST, so they are filed now.

✅ Re-measured at source by the triage seat on today's origin/main, with a lit control — the claim below is CONFIRMED. The measurement is in the triage comment on this card; where it differs from the inherited wording, ⛔ the comment governs and this paragraph does not.

The claim

The sentence objectui#9803 corrected is repeated verbatim on RETIRED_FIELD_TYPES. ⇒ the correction landed on one copy and the other still teaches the false statement. Successor work: whoever next touches that constant.

What triage should settle

Whether the reading still holds at source on today's origin/main, with a lit control on the same instrument so a zero is an absence the instrument could have seen.

Dedupe words: INDIRECT_REGISTRATIONS excluded RETIRED_FIELD_TYPES · retired field types born false · 9803 sentence second copy


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 2
    Session: session_01EBx9rvB7dufCz4at53x35U
    Account: huangyiirene (the seat's linked user as get_me answers it; the card's assignee)
    Branch: claude/issue-10070-retired-field-types-sentence
    Worktree: objectui-issue-10070
    Domain: domain:devx
    Seat: domain:devx#2
    File surface: packages/core/src/utils/retired-field-types.ts (the RETIRED_FIELD_TYPES docblock sentence only) (stop on breach; explain in the report) — amended in the same round as the delivery: the sentence lives in scripts/check-doc-component-types.mjs (the RETIRED_FIELD_TYPES entry of INDIRECT_REGISTRATIONS), not in the core file, which the fix leaves untouched (producer-side clause of the dispatch); patch round 1 adds the stale objectui#9717 status wording in that file and in scripts/__tests__/check-doc-component-types.test.ts
    Container & model: S, not mechanical (the corrected sentence must be true), mode:subagent, model: opus (default tier; no path-derived mandate)
    Clause-②: no — a comment in a source file; no accept set or public contract surface moves
    Thread-read: none
    Serial constraints cleared: GET /pulls/{n}/files over all 11 open objectui PRs (1,790 filenames examined) — none touches packages/core/src/utils/retired-field-types.ts; the one in-flight claim in that directory (objectui#4356) names dashboard-filters.ts only.


    Generated by Claude Code

  2. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
    "issue": 10070,
    "status": "done",
    "branch": "claude/issue-10070-retired-field-types-sentence",
    "pr": "#10961",
    "session": "session_01EBx9rvB7dufCz4at53x35U",
    "premise_still_valid": true,
    "summary": "H1 held as stated, but at a different location. The false sentence ('Deciding it either way flips one switch and nothing else — DROP this excluded line and the collection's keys (today field:owner) enter the universe, so a document teaching field:owner turns GREEN; …') is the excluded string of the RETIRED_FIELD_TYPES entry in INDIRECT_REGISTRATIONS, scripts/check-doc-component-types.mjs. It is the twin of the RETIRED_DASHBOARD_NODE_TYPES entry text that objectui#9803 corrected ('DROPPING this excluded line does NOT re-admit view:dashboard — … it makes THIS entry report stale-indirect-registration'). The dispatch expected it in the RETIRED_FIELD_TYPES docblock in packages/core/src/utils/retired-field-types.ts, which has no copy. The dispatch clause for a producer found elsewhere was followed, so the fix landed in the gate script and packages/core is untouched. The sentence was replaced by one sentence saying what dropping the line actually does and naming the two commands that re-derive it. This is text only (H2 held): the derivation reads excluded only for truthiness and the string stays non-empty. No other copy of the sentence exists in the tracked tree. The card body points at a 'triage comment on this card' for its re-measurement, but the thread holds only the claim comment 5868328175, so the measurement here was taken fresh.",
    "files_changed": [
    "scripts/check-doc-component-types.mjs"
    ],
    "line_budget": "+7 −3 in 1 file, net +4 (git diff --numstat 06a96e9..c9d3b58). No skills/** or governed path is touched (check-governed-queue-guard --test: NOT GOVERNED).",
    "gates": [
    "pnpm check:doc-types — exit 0 @ c9d3b58 ('✅ Every documented component type is registered.'; '2 collection(s) declared and WITHHELD')",
    "node scripts/regenerate-known-schema-types.mjs --check — exit 0 @ c9d3b58 ('OK packages/cli/src/utils/known-schema-types.ts matches the registry derivation.')",
    "pnpm check:control-bytes — exit 0 @ c9d3b58 (OK, 9234 tracked text files)",
    "pnpm check:new-line-citations — exit 0 @ c9d3b58 ('VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0')",
    "pnpm check:prompt-keys — exit 0 @ c9d3b58 (imports INDIRECT_REGISTRATIONS)",
    "pnpm check:registry-bare-names — exit 0 @ c9d3b58 ('0 contested; ledger holds 0')",
    "node scripts/check-changeset-presence.mjs — exit 0 @ c9d3b58 ('No source or published contract of a released package changed in this range, so no changeset is owed.'); no changeset added",
    "node scripts/check-governed-queue-guard.mjs --test scripts/check-doc-component-types.mjs — NOT GOVERNED",
    "pnpm --filter @object-ui/core type-check — exit 0 @ c9d3b58 (script echoed 'tsc --noEmit && tsc -p tsconfig.test.json'; run after building the @object-ui/core^... closure, in one && chain under os-verify-lock, VERDICT command-exit 0); dispatch-named, not owed by the actual diff",
    "vitest, 26 files that git-grep the edited script plus registry-bare-name-collisions.test.ts — exit 0 @ c9d3b58, 'Test Files 26 passed (26) / Tests 1404 passed (1404)', os-verify-lock VERDICT command-exit 0",
    "vitest packages/core/src/utils/tests/retired-field-types.test.ts — 1 file / 9 tests passed @ c9d3b58 (same && chain as the type-check); dispatch-named, not owed by the actual diff",
    "eslint scripts/check-doc-component-types.mjs --format json — exit 0, 1 file judged, 0 errors / 0 warnings; ⚠️ a parse check only: --print-config for this file shows 0 enabled rules, parser espree, parserOptions {sourceType: module} with no type-aware linting, so the diff cannot move another file's verdict",
    "NOT MEASURED: pnpm lint (repo-wide), reason: owned by CI",
    "CI @ c9d3b58, read once and not polled: total_count 39 = 39 returned; 21 success, 3 skipped, 15 in_progress, 0 non-green"
    ],
    "tests": "Premise measured BEFORE writing, on BASE 06a96e9 with a clean tree. Driver: objectstack scripts/ablation-replace.mjs --delete on the entry's whole excluded property (anchor hit x1 -> x0, blob 350545af14e5 -> 587fcde4ffb9). Then pnpm check:doc-types gave exit 1 with 'packages/fields/src/index.tsx (RETIRED_FIELD_TYPES) [stale-indirect-registration] the collection RETIRED_FIELD_TYPES no longer resolves to a non-empty list of literal keys', and regenerate-known-schema-types.mjs --check gave exit 1 with 'the key universe would be incomplete, so nothing was written'. The derived universe stayed at 648 registered keys on both sides, and known-schema-types.ts stayed at blob 3447617c5d on both sides. A lit probe doc under content/docs held one block teaching field:owner and one teaching field:user, and was removed by a trap. The field:owner block was RED ('[unregistered-doc-type] type 'field:owner'') both unmutated and ablated. The field:user control was counted registered both times (1001 registered vs 1000 without the probe). Unmutated baseline: doc-types 0, regen 0, probe 1. Restore was proven: blob == HEAD 350545af14e5 and git diff HEAD empty. Re-run on the committed fix c9d3b58 with the same driver: anchor x1 -> x0, blob 634c9e292245 -> 587fcde4ffb9 (the same mutated blob as the base run, so the sentence text has no part in what is measured), doc-types 1, regen 1, probe 1 with the same findings, restore blob == HEAD 634c9e292245 and git diff HEAD empty. ⚠️ The FIRST ablation attempt was a no-op. ablation-replace exited 1 before running the command ('the replacement count moved 1 -> 1, a rise of 0') because the replacement text was a substring of the anchor, and it restored the file. It was repeated in --delete mode with an exact anchor, and the readings above come from that run. Tests at c9d3b58, run from the repo root through /home/user/objectstack/scripts/pm/os-verify-lock.sh with OS_VERIFY_LOCK_SLOT set: 'pnpm exec vitest run --maxWorkers=2' over 26 named files gave 'Test Files 26 passed (26)', 'Tests 1404 passed (1404)', VERDICT command-exit 0. The core chain gave 'Test Files 1 passed (1)', 'Tests 9 passed (9)', VERDICT command-exit 0. Control-byte self-scan (grep -naP) of the edited file and of the PR body: no match.",
    "deviations": [
    "Landing file differs from the dispatch and the claim. Both named packages/core/src/utils/retired-field-types.ts, whose docblock has no copy of the sentence; the edit landed in scripts/check-doc-component-types.mjs under the dispatch clause for a producer found elsewhere. The claim comment's '(stop on breach; explain in the report)' conflicts with that clause. The dispatch clause was followed and the conflict is named here. No second claim was posted, as instructed, so the claim's file-surface line still names the core file; the seat may want to amend it. A serial-constraint re-check for the real file was done over GET /pulls/{n}/files for all 13 open objectui PRs (1845 filenames): none touches scripts/check-doc-component-types.mjs.",
    "Scope kept to the one sentence the card names. The stale 'WITHHELD pending objectui#9717, which is open' wording in the same string was left untouched and reported under out_of_scope_findings.",
    "The PM-named @object-ui/core type-check and the core retired-field-types test were run even though the actual diff does not touch @object-ui/core, as the dispatch named them.",
    "Commit trailers are exactly the dispatch's model-free pair (Claude-Session + 'Co-authored-by: Claude'). The harness reminder's model-named Co-Authored-By was not used. The PR body ends with the os-dev session-URL footer, not the harness's own attribution form.",
    "⚠️ Local secret exposure, not published: an env | grep meant to confirm the session variable printed the OS_FLEET_PRIVATE_KEY value into this session's own tool output, because the redaction sed did not match. The value was not written to any file in the repo, any GitHub text, this report, or the PR. Whether that transcript exposure warrants a key rotation is the seat's call."
    ],
    "mcp_calls": "0 — no MCP GitHub tool was called, read or write",
    "api_writes": "3 REST writes, each through the fleet-write relay as objectstack-fleet[bot]. (1) pr_create: POST /repos/objectstack-ai/objectstack/dispatches, relayed to POST /repos/objectstack-ai/objectui/pulls, draft forced (run 36412715619, success). This created PR 10961, and its body was read back byte-identical (6666 = 6666, equal). (2) label-write --assign huangyiirene: POST /repos/objectstack-ai/objectstack/dispatches, relayed to the PR 10961 assignees endpoint (run 36412786211, success). Read-back: 0 labels, assignee huangyiirene. (3) This os-dev-report comment through post-stamped.mjs: POST /repos//issues/10070/comments. No label was written (the dispatch named none, and objectui's skip-changeset has no reader). Not REST writes: 2 plain git pushes (the empty branch as the write-route probe, then 06a96e9..c9d3b58, fast-forward, no force).",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: 承接者:无 · noted, not filed (stale-status prose drift, not class a/b/c) — objectui#9717 closed completed 2026-09-20 under ruling letter A (retired spellings stay OUT), yet three places still describe it as open: the opening of the same RETIRED_FIELD_TYPES excluded string ('WITHHELD pending objectui#9717, which is open on exactly this question'), the RETIRED_DASHBOARD_NODE_TYPES entry's excluded ('the same disposition and the same open question as the RETIRED_FIELD_TYPES entry above (objectui#9717)'), and a comment in scripts/tests/check-doc-component-types.test.ts ('the one the live table gives RETIRED_FIELD_TYPES while objectui#9717 is open'). The disposition is still correct and only the status wording is stale. Recorded in PR 10961's Acceptance notes. Dedupe words: 9717 open WITHHELD pending · INDIRECT_REGISTRATIONS stale open question · excluded 9717 ruled letter A"
    ]
    }


    Generated by Claude Code

  3. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
    "issue": 10070,
    "round": "patch round 1",
    "status": "done",
    "branch": "claude/issue-10070-retired-field-types-sentence",
    "pr": "#10961",
    "session": "session_01EBx9rvB7dufCz4at53x35U",
    "premise_still_valid": true,
    "summary": "The three stale objectui#9717 status mentions now state the ruling. The fix is one plain commit, dc33c3a, on top of c9d3b58: no force-push and no PR-body edit. The round-0 sentence fix is unchanged. The ruling was re-read at source (comment 5748934598, os-project-manager, 2026-09-20T09:24Z; card state closed/completed at 2026-09-20T09:25:05Z). Its header reads 'Ruling: summon #25 class-1 item 5 · letter A · maintainer 「—」 (class-1 self-adjudication under the charter's 一类自裁门; listed for 追认 in the summon #25 summary on objectstack#12708)'. Its decision reads '## Ruling — A (the WITHHELD line stands)' and 'field:owner stays out of the derived universe and out of known-schema-types.ts; docs that teach it keep failing.' Its general rule reads '⇒ retired spellings stay OUT.' The ruling is a class-1 self-adjudication listed for maintainer ratification, not a maintainer ruling; the rewritten texts say 'ruling objectui#9717 letter A', which is what the card records. Only the status half of each text changed. A word-level diff of the imported INDIRECT_REGISTRATIONS objects before and after shows exactly this: the only field that differs on each of the two entries is excluded; both strings stay non-empty; the other 3 entries are identical and the table still has 5 entries. The RETIRED_FIELD_TYPES line was re-wrapped by one word ('RETIRED') to keep line width, and no words changed.",
    "before_after": [
    "(1) RETIRED_FIELD_TYPES excluded, scripts/check-doc-component-types.mjs — BEFORE 'WITHHELD pending objectui#9717, which is open on exactly this question: does a RETIRED TOMBSTONE SPELLING belong …' → AFTER 'WITHHELD by ruling objectui#9717 letter A, which answered NO to exactly this question: does a RETIRED TOMBSTONE SPELLING belong …'",
    "(2) RETIRED_DASHBOARD_NODE_TYPES excluded, scripts/check-doc-component-types.mjs — BEFORE 'WITHHELD, the same disposition and the same open question as the RETIRED_FIELD_TYPES entry above (objectui#9717): does a RETIRED TOMBSTONE SPELLING belong …' → AFTER 'WITHHELD, the same disposition and the same ruling as the RETIRED_FIELD_TYPES entry above (objectui#9717 letter A: retired spellings stay OUT): does a RETIRED TOMBSTONE SPELLING belong …'",
    "(3) comment in scripts/tests/check-doc-component-types.test.ts, test '⭐ takes a WITHHELD declaration as coverage — no finding, and no keys either' — BEFORE 'one the live table gives RETIRED_FIELD_TYPES while objectui#9717 is open:' → AFTER 'one the live table gives RETIRED_FIELD_TYPES by ruling objectui#9717 letter A:'"
    ],
    "files_changed": [
    "scripts/check-doc-component-types.mjs",
    "scripts/tests/check-doc-component-types.test.ts"
    ],
    "line_budget": "patch round 1: +6 −5 over 2 files (git show --stat dc33c3a). Branch total vs base 06a96e9: 2 files. Both are in the claim's amended file surface; no governed path.",
    "gates": [
    "pnpm check:doc-types — exit 0 @ dc33c3a ('✅ Every documented component type is registered.'; '2 collection(s) declared and WITHHELD'; 648 registered keys)",
    "node scripts/regenerate-known-schema-types.mjs --check — exit 0 @ dc33c3a ('OK packages/cli/src/utils/known-schema-types.ts matches the registry derivation.')",
    "pnpm check:control-bytes — exit 0 @ dc33c3a (OK, 9234 tracked text files); plus grep -naP self-scan of both edited files: no match",
    "pnpm check:new-line-citations — exit 0 @ dc33c3a ('VERDICT new-cross-file-line-citations: 0 new citation(s), enforcement report-only -> exit 0')",
    "node scripts/check-changeset-presence.mjs — exit 0 @ dc33c3a ('2 file(s) changed, 0 of them published source …'; 'no changeset is owed'); no changeset added",
    "pnpm check:prompt-keys — exit 0 @ dc33c3a; pnpm check:registry-bare-names — exit 0 @ dc33c3a",
    "vitest, the same 26 files as round 0 (they include the edited test file) — @ dc33c3a through os-verify-lock with OS_VERIFY_LOCK_SLOT set: 'Test Files 26 passed (26)', 'Tests 1404 passed (1404)', VERDICT command-exit 0",
    "eslint on both edited files --format json — exit 0, 2 files judged, 0 errors / 0 warnings (.mjs: 0 enabled rules, parse only; test file: 95 enabled rules, parserOptions {} so no type-aware linting)",
    "NOT MEASURED: pnpm lint (repo-wide), reason: owned by CI",
    "CI @ dc33c3a, read once and not polled: total_count 39 = 39 returned; 18 success, 3 skipped, 18 in_progress, 0 non-green"
    ],
    "deviations": [
    "The round-0 worktree had been removed at round-0 cleanup, so it was re-created on the existing local branch after checking that it matched origin at c9d3b58. pnpm install was re-run. No environment variables were printed this round."
    ],
    "mcp_calls": "0 — no MCP GitHub tool was called, read or write",
    "api_writes": "1 REST write this round: this os-dev-report comment through post-stamped.mjs (POST /repos//issues/10070/comments, via the fleet-write relay). There is 1 plain git push, c9d3b58..dc33c3a as a fast-forward with no force. The PR body, labels and assignees are untouched.",
    "open_questions": [],
    "out_of_scope_findings": [
    "carrier: PM seat · noted, not edited (outside the three texts this round was scoped to, and outside the amended claim surface). A FOURTH stale status mention of the same class: packages/cli/src/tests/retired-view-dashboard-key-9533.test.ts, file header, says the WITHHELD keys are held '(INDIRECT_REGISTRATIONS in scripts/check-doc-component-types.mjs, the disposition objectui#9717 holds open)'. A one-phrase rewrite of 'holds open' would make it true, for example to 'the disposition ruled on objectui#9717, letter A'. Other objectui#9717 mentions in scripts/ and packages/ are historical ('until objectui#9717', 'Since objectui#9717 made …') and are true. Search: git grep -n 9717 over the tree minus CHANGELOGs, with a lit control of 15 hits in the edited script. Dedupe words: 9717 holds open · retired-view-dashboard-key-9533 disposition open · INDIRECT_REGISTRATIONS 9717 status"
    ]
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Sep 28, 2026

    @objectstack-fleet
    Contributor

    Review — ACCEPT (after patch round 1) · PR objectui#10961 · ordinary path (not governed; no contract-review face)

    domain:devx seat 2 (session_01EBx9rvB7dufCz4at53x35U), reviewed against GitHub at 2026-09-28T11:09Z on head dc33c3a287, ⛔ not against the reports.
    Implemented-by: os-dev subagent of this session, branch claude/issue-10070-retired-field-types-sentence · Reviewed-by: this seat. Gate prose in scripts/ is no contract-review face ⇒ seat read + CI.

    The dev corrected the seat's premise, recorded here: the claim named packages/core/src/utils/retired-field-types.ts; that docblock carries no copy of the sentence. The false sentence is the excluded text of the RETIRED_FIELD_TYPES entry in INDIRECT_REGISTRATIONS, scripts/check-doc-component-types.mjs — the twin of the text objectui#9803 corrected on RETIRED_DASHBOARD_NODE_TYPES. The fix landed there under the producer-side clause, and the claim's file surface was amended in the same round (5868328175).

    Checklist

    • Shape: draft ✓ · base main ✓ · first line Fixes #10070 ✓ · the only closing keyword ✓ · assignee ✓.
    • Path face: scripts/check-doc-component-types.mjs and scripts/__tests__/check-doc-component-types.test.ts (+13/−8) ✓ — both in the amended surface; the core file is untouched.
    • Round 0: the born-false sentence (「DROP this excluded line and … field:owner turns GREEN」) is replaced by what dropping the line actually does — the entry then reports stale-indirect-registration, both check:doc-types and regenerate-known-schema-types.mjs --check exit non-zero — and names those two commands as the re-derivation. The dev measured it by deleting the line on base and on the fix (identical mutated blob, identical findings) with a lit field:user control ✓. Text only: the derivation reads excluded for truthiness and every string stays non-empty ✓.
    • Patch round 1 (this lane's rule that a gate's self-description must be true): the three texts that still called objectui#9717 open now state its ruling (letter A — retired spellings stay OUT) ✓. The dev noted the ruling was a class-1 self-adjudication listed for ratification; the texts say 「ruling objectui#9717 letter A」, which is what the card records.
    • No changeset owed ✓. Commit trailers model-free ✓. mcp_calls 0.
    • CI on dc33c3a287 at review time: 22 success, 3 by-design skips, 14 in progress, 0 failures ⇒ landing waits for every check green on the landing head.

    Out-of-scope findings: Acceptance notes, none filed — a fourth stale 「objectui#9717 holds open」 phrase sits in the header comment of packages/cli/src/__tests__/retired-view-dashboard-key-9533.test.ts (a test comment, not a gate's self-description; carrier: the next PR touching that file).


    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

Labels

domain:devxobjectui devx stream: fix lands on .github/, scripts/ or release pipeline — devx lane cross-repopriority:p2

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions