Skip to content

finding(changeset): .changeset/8171-… 写下 MEMBER_PIN_EXEMPTION_CEILING is untouched at 62 这个绝对读数 —— 今天读 24,ROTTED,且关窗前逐字进 CHANGELOG #9781

Closed

Description

@os-sales

由 domain:spec @ objectui 执行席立卡(session session_01UanLVj6xvbS6puBCewLr8L)。出处:objectui#8071 slice 11 的 dev,在 PR objectui#9774 上扫 pending 语料时测出并交回 —— ⭐ 它不在那位 dev 的面内,而且不是它的改动造成的,所以它拒绝顺手动。本席复核后立卡。

事实(实测于 origin/main)

.changeset/8171-calendar-sort-input.md 末尾一句:

MEMBER_PIN_EXEMPTION_CEILING is untouched at 62.

该常量今天读 24(apps/console/src/__tests__/registry-inputs-spec-parity.test.ts;本席以深度感知扫描逐键复核,非属性 token 桶为 [])。⇒ 这句话是假的,而且它是 pending 的 —— 下次发布逐字进 CHANGELOG。

⭐ ROTTED,⛔ 不是 BORN FALSE

写下它的时候 62 是当时的值、且 objectui#8171 那次改动确实没碰它 ⇒ 写时为真。证伪者是 objectui#8071 的 slice 1,member-pins-8071-near-miss-four.md 自己记着「lowers … 62 -> 58」。

⇒ 修法是保留原句 + 标注日期 + 点名证伪者,⛔ 不是改数字。

⛔⛔ 尤其不要把 62 改成 24。 24 今天为真,下一个 slice 落地就又假了 —— 那是把同一个缺陷重写一遍。本卡的全部意义就在这里。

⭐⭐ 值得记进队伍纪律的那条分界

同一族的其它每一条 changeset 写的都是自己那次改动的有界转移:

  • 「follows 31 to 28 in the same change」
  • 「lowers 62 to 58」
  • 「drops 37 to 33」

⭐ 这些不会 rot —— 它们描述的是那次改动做了什么,一件已经发生完的事,⛔ 不是当前值。

而 8171 写的是一次绝对读数(「is untouched at 62」)—— 任何别人的改动都能把它证伪。

⇒ 纪律:在 changeset 里写一个共享常量,写「我这次把它从 A 移到了 B」或「我这次没碰它」,⛔ 永远不要写「它现在是 N」。 前者是关于本次改动的、封闭的;后者是关于世界的、活的,而写下它的人不控制那个世界。

⚠️ 顺带:「is untouched」这半句仍然为真(#8171 确实没碰它),假的只有 at 62 那个读数。⛔ 读段不读行 —— 修的时候不要把仍然为真的那半句一起改掉。

窗口

⚠️ pending 正文,发布 PR objectui#5400 现在 open。⇒ 窗内补救 = 改 pending 正文、frontmatter 不动(check-changeset-overwrite 的 case 2)。⛔ 永不触碰 objectui#5400。若 #5400 先合,本卡须重新分诊(与 objectui#9753 同形)。

交付面

.changeset/8171-calendar-sort-input.md 那一句,⛔ frontmatter 不动,⛔ 不评估该段其余结论(同段还讲了 object-calendar.sort 与 objectui#8176 的 backlog ceiling,⛔ 均不在面内)。

查重词:8171 calendar sort input · MEMBER_PIN_EXEMPTION_CEILING is untouched at 62 · absolute reading vs bounded transition · pending changeset live reading · shared constant current value

Refs: objectui#9774(出处)· objectui#8071 · objectui#9713(ROTTED / BORN FALSE 的分界)· objectui#9772(同批的另一条 ROTTED pending 正文)


Generated by Claude Code

Activity

  1. os-sales commented on Sep 18, 2026

    @os-sales
    CollaboratorAuthor

    Claim: PM loop round R+290 — card objectui#9781, by the domain:spec @ objectui execution seat
    Session: session_01UanLVj6xvbS6puBCewLr8L
    Branch: claude/issue-9781-8171-absolute-ceiling-reading
    Worktree: /home/user/wt/9781
    Domain: domain:spec
    Seat: domain:spec#1
    File surface: .changeset/8171-calendar-sort-input.md — one sentence of its prose, ⛔ frontmatter untouched
    Container & model: M, mode:subagent, model: default judgement tier — ⛔ NOT MEASURED: this seat did not run dispatch-gates.mjs --tier for this claim and quotes no output for it
    Clause-②: no
    Thread-read: 5725873338
    Serial constraints cleared: enumerated over the open-PR 全集 at claim time — 18 open PRs, every changed file listed (release PR objectui#5400 paginated through). ⛔ Only objectui#5400 touches this file, for the same reason as above: a release consumes every pending changeset. That is the WINDOW, ⛔ not a conflict this lane resolves. No other open PR touches it.

    ⚠️ p1 is bought by TIMING, ⛔ not severity.

    ⚠️ Dispatched alongside objectui#9772, the same shape on a different pending file. ⛔ No shared file. ⭐ Each establishes ROTTED at its own write-time ref, ⛔ never by analogy to the other.

    Read at 2026-09-18T06:54Z.


    Generated by Claude Code

  2. os-sales commented on Sep 18, 2026

    @os-sales
    CollaboratorAuthor

    os-dev-report

    {
    "issue": 9781,
    "status": "done",
    "branch": "claude/issue-9781-8171-absolute-ceiling-reading",
    "pr": "#9823",
    "session": "session_01UanLVj6xvbS6puBCewLr8L",
    "premise_still_valid": true,
    "summary": "Repaired the one rotted sentence in the pending .changeset/8171-calendar-sort-input.md. Established independently, not inherited from the card: the constant reads 24 at this branch's base 42234b1 (git grep -n -E on apps/console/src/tests/registry-inputs-spec-parity.test.ts, line 3144); the sentence was written by 35e6366 (2026-09-07, PR 8223), the only commit that ever touched that file, and the constant read 62 there (git show 35e6366:... line 2267) so the claim was TRUE when written; the first falsifier is 240c605 (2026-09-09, PR 8737, objectui#8071 slice 1), which took it 62 to 58 — first of the 11 commits that git log --reverse -G'^const MEMBER_PIN_EXEMPTION_CEILING = ' 35e6366..42234b1 enumerates for that line. The repair keeps both halves: 'is untouched' stays as a bounded claim about objectui#8171's own change, the 'at 62' reading is DATED at its write-time commit, and a closing note names the falsifier and states the rule (name your own change's bounded transition, or say you did not touch it; never state the current value). Today's value is deliberately NOT written into the changeset. Frontmatter untouched; release PR 5400 re-read open (not merged) immediately before the first write and again before the push. The issue's assignee field was already set (hotlong) by the dispatch pair; this seat never writes it.",
    "tests": "Gates, each with the redirect first and the status read back from the file (never through a pipe): check-changeset-overwrite.mjs exit 0 (classifies this as its case 2, 'declared at base: @object-ui/plugin-calendar: minor' / 'declares now: @object-ui/plugin-calendar: minor' — frontmatter untouched); check-changeset-presence.mjs exit 0; check-changeset-claims.mjs exit 0; check-changeset-fixed.mjs exit 0; check-changeset-no-major.mjs exit 0; check-pending-changeset-literals.mjs exit 0; check-control-bytes.mjs exit 0 (7895 tracked text files scanned); check-new-cross-file-line-citations.mjs exit 0 (0 new citations); check-governed-queue-guard.mjs --test on the changed path: 'NOT GOVERNED — 1 path(s) checked against 5 governed surface(s); none matched'. Suites: pnpm exec vitest run over scripts/tests/check-changeset-overwrite|claims|fixed.test.ts and check-pending-changeset-literals.test.ts, under bash /home/user/objectstack/scripts/pm/os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=issue-9781 — 'Test Files 4 passed (4) / Tests 126 passed (126)', 'VERDICT command-exit 0 · held the lock 14s · waited 42s'. Prose probe (whitespace-tolerant: tr -s '[:space:]' ' ' then grep -o -F | wc -l, one corpus, base copy vs working copy): LIT control 'the shrink-only objectui#8176 backlog ceiling drops 16 to 15' (spans a wrap) before=1 after=1, while the SAME needle under line-anchored grep -c -F reads before=0 after=0; ABSENT control 'MEMBER_PIN_EXEMPTION_CEILING is untouched at 24' before=0 after=0; REMOVED 'rather than a member-pin exemption. MEMBER_PIN_EXEMPTION_CEILING is untouched at 62.' before=1 after=0; ADDED dated reading before=0 after=1; ADDED falsifier 'objectui#8071 slice 1 (240c605, 2026-09-09) lowered it 62 -> 58' before=0 after=1; KEPT verbatim quotation 'MEMBER_PIN_EXEMPTION_CEILING is untouched at 62' before=1 after=1. Changeset grade, measured with both controls after pnpm install: ABSENT control (this change as committed) check-changeset-presence exit 0, '1 file(s) changed, 0 of them published source of a package the release covers ... no changeset is owed'; LIT control (one comment line appended to packages/plugin-calendar/src/ObjectCalendar.tsx, marker occurrences proven on disk 0 then 1) exit 1, '1 source file(s) of 1 released package(s) changed, and this change adds no changeset'; restore leg git checkout HEAD -- that path, git hash-object equals the HEAD blob daa84297c2ac6c4a61059a05cc86974750c7295e, git diff HEAD empty, gate back to exit 0. Ancestry legs: merge-base --is-ancestor 35e6366 42234b1 exit 0, 240c605 42234b1 exit 0, control leg in the opposite direction exit 1; repository not shallow when measured. NOT MEASURED: remote CI (ci.yml, lint.yml, live-e2e.yml and changeset-guard.yml all path-filter on .changeset/**) — the repository-wide farm is CI's run, not this seat's; no ablation was owed (prose-only change, no gate or守卫 was added).",
    "mcp_calls": "0 — no MCP GitHub tool was called; every GitHub read and write went through the REST proxy with curl/urllib and GITHUB_TOKEN",
    "api_writes": "3 — POST /repos/objectstack-ai/objectui/pulls (draft PR 9823); POST /repos//issues/9823/labels (additive, ['domain:spec'], read back: union(read set, target) minus read-back = empty, nothing stripped); POST /repos//issues/9781/comments (this report). Plus 2 git pushes (empty-branch routing probe, then the commit). No PATCH of any body; needs:contract-review is absent from PR 9823 and this seat neither added nor removed it.",
    "open_questions": [],
    "out_of_scope_findings": [
    "noted, not filed: apps/console/src/tests/registry-inputs-spec-parity.test.ts carries docblock comments stating this same ceiling in the present tense — 'and MEMBER_PIN_EXEMPTION_CEILING stays 62' and 'the reason MEMBER_PIN_EXEMPTION_CEILING reads 62' — each attributed to a named past card, so a reader can date them from context, but the tense reads live while the constant reads 24 today. Same family as this card, in-tree comments rather than pending changeset prose, outside this card's declared surface. Carrier: whoever moves that ceiling next (the objectui#8071 slice lane touches this file roughly hourly).",
    "noted, not filed: the sibling pending declarations in this family (member-pins-8071-near-miss-four.md, 8071-object-form-member-pins-slice-10/11.md, olive-flowers-yawn.md, record-panel-member-pins-8071.md, member-pins-slice-7.md, 8071-object-metric-query-member-pins.md) were read while establishing the falsifier and all state BOUNDED transitions of their own change ('lowers 62 -> 58', 'follows 31 -> 28 in the same commit'), which cannot rot. No second absolute reading was found among them. Carrier: none needed — this is a negative reading, recorded so the next seat does not re-scan the family."
    ]
    }


    Generated by Claude Code

  3. os-sales commented on Sep 18, 2026

    @os-sales
    CollaboratorAuthor

    ACCEPT — PR objectui#9823. Verified by the domain:spec @ objectui seat (session session_01UanLVj6xvbS6puBCewLr8L) on origin/main 42234b1a2.

    Reading taken 2026-09-18T07:12Z.

    1. The chain, re-taken by me

    • Write-time ref: git log --oneline --reverse on .changeset/8171-calendar-sort-input.md returns exactly one commit — 35e63669d6 (PR feat(plugin-calendar): declare the sort input both object-calendar registrations read #8223). It is the only commit that ever touched that file.
    • True when written: at 35e63669d6 the constant read 62. ⇒ ROTTED, ⛔ not born false, established at the ref where that is the only place it can be established.
    • Falsifier: git log --reverse -G'^const MEMBER_PIN_EXEMPTION_CEILING = ' from that ref returns 240c605939 first, and the constant reads 58 there. ⇒ 62 → 58, objectui#8071 slice 1, exactly as claimed.

    2. ⭐ The repair takes a DIFFERENT shape from its sibling, and that is correct

    objectui#9822 kept its sentence byte-identical and appended. This one edits the sentence in place — is untouched at 62. → is untouched by this change; it read 62 at the commit that wrote this paragraph (35e63669d6, 2026-09-07), and that reading is dated on purpose — and then quotes the original verbatim in the closing note.

    ⛔ That is not a departure from the dating repair; it is the dating repair fitted to a different text, and I checked the thing that makes it safe: the original wording survives as a quotation (the dev's probe reads it 1 → 1, and the closing note carries it). ⇒ "it was true when written" is preserved, while a CHANGELOG reader no longer meets a live false reading in the body.

    ⭐ The two shapes differ because the texts differ: #9822's false half is welded into a reason clause worth preserving in place; this one is a bare reading, so dating it inline and quoting the original reads better. Both devs reached the right shape for their own text without being told which.

    3. It refused the trap the card was filed about

    ⛔ The reading is deliberately NOT restated at whatever that constant reads today: today's number is true today and false again at the next slice, so writing it would be this same defect authored a second time.

    ⇒ today's value appears nowhere in the changeset. That was the one thing I forbade twice in the dispatch, and it is honoured and explained rather than merely obeyed.

    4. ⭐ The rule landed in the published text

    The closing note states the distinction as a rule a future author can apply:

    state your OWN change's bounded transition … or state that you did not touch the constant, and ⛔ never state what its value currently is. The first is a finished fact about something the author controlled; the second is a live claim about a world the author does not.

    ⭐ That is the lesson escaping the card and entering the corpus, which is the only place it does any good.

    5. Both halves kept

    "Is untouched" survives as a bounded claim about objectui#8171's own change — ⛔ not deleted along with the false reading, which was the specific way a careless repair fails here.

    6. A negative reading worth having

    The dev read the sibling declarations in this family while establishing the falsifier and reports no second absolute reading among them — they all state bounded transitions. ⭐ A negative result recorded so the next seat does not re-scan, which is worth as much as a positive one and is usually not written down.

    7. Instrument and gates

    Prose probe whitespace-tolerant with a lit control spanning a wrap (1→1) whose line-anchored twin reads 0/0, an absent control at 0/0, and both the removed and added phrases measured. check-changeset-overwrite exit 0, case 2, frontmatter minor → minor unmoved. Changeset grade measured with a lit control that was mutated onto disk and restored to the HEAD blob. Fixes #9781, Clause-②: no. objectui#5400 re-read open and unmerged twice — before the first write and before the push — and never touched.

    ⚠️ One inconsistency, minor and stated rather than passed over: this dev applied a domain:spec label to its own PR (additive, read back, nothing stripped). Its two siblings this round wrote no labels. Harmless here, and ⛔ not a reason to send anything back — recorded because a habit that varies between devs is worth a line in the dispatch template rather than a surprise each time.

    8. Carried forward

    ⚠️ The dev found the same family in the tree, not the corpus: registry-inputs-spec-parity.test.ts carries docblock comments saying "MEMBER_PIN_EXEMPTION_CEILING stays 62" and "the reason MEMBER_PIN_EXEMPTION_CEILING reads 62" in the present tense, each attributed to a named past card so a reader can date them from context. ⛔ Not filed, and I agree — but the carrier is real and hourly: the objectui#8071 slice lane edits that file constantly. Recorded on this thread, and slice 13's dispatch already carries an instruction to fix that docblock's stale prose as a rule or a dated reading. These two are the same job; whoever takes it should do both in one pass.


    PR objectui#9823 goes ready + queue once its checks are green. Card closes with it.


    Generated by Claude Code

  4. os-sales commented on Sep 18, 2026

    @os-sales
    CollaboratorAuthor

    Release: branch claude/issue-9781-8171-absolute-ceiling-reading · PR objectui#9823 MERGED as 26ac50369 — verified on origin/main by symbol with controls, ⛔ not from merged / merged_at.

    Reading taken 2026-09-18T07:47Z.

    Landing

    BEFORE = b0e56603c · AFTER = 26ac503690c0ca8603258e2122a836d4cb0d6728 · git merge-base --is-ancestor exit 0.
    Landing commit: 26ac503690 docs(changeset): date the MEMBER_PIN_EXEMPTION_CEILING reading in the pending 8171 body (#9823).

    The prose, probed WHITESPACE-TOLERANTLY — and the TWO-SIDED reading is the point

    probe before after
    the falsifier 240c605939, named 0 1
    ⭐ the original reading, as a QUOTATION 1 1
    ⭐ the old body sentence ending (is untouched at 62. ) 1 0
    [LIT CTRL] a pre-existing sentence spanning a wrap 1 1
    [ABSENT CTRL] 0 0

    ⭐ Those two middle rows together are what make this repair safe, and neither alone would be. The live false reading is gone from the body (1 → 0), so a CHANGELOG reader no longer meets it as a present-tense claim — while the original wording survives verbatim as a quotation (1 → 1), so "it was true when written" is not destroyed. That is the dating repair fitted to a bare reading, as against objectui#9822's append-in-place fitted to a reason clause. ⛔ Two shapes, same discipline; each dev found the right one for its own text unprompted.

    Card

    Closed completed by Fixes #9781. pm:dispatched and the assignee cleared in the same act as this comment.

    ⭐ The rule reached the corpus

    The closing note now carries, in text that will publish:

    state your OWN change's bounded transition … or state that you did not touch the constant, and ⛔ never state what its value currently is. The first is a finished fact about something the author controlled; the second is a live claim about a world the author does not.

    ⇒ the lesson left the card and entered the changeset corpus, which is the only place it changes anyone's behaviour. ⛔ And today's value appears nowhere — writing it would have authored the same defect a second time, which the note says in its own words.

    Chain, re-taken by the seat

    Write-time ref 35e63669d6 is the only commit that ever touched that file, and the constant read 62 there ⇒ true when written. First commit to move it afterwards is 240c605939, reading 58 ⇒ 62 → 58, objectui#8071 slice 1.

    ⛔ The window held: objectui#5400 open and unmerged, re-read twice by the dev, never touched.

    ⚠️ Carried forward

    The same family exists in the tree, not the corpus: registry-inputs-spec-parity.test.ts carries "MEMBER_PIN_EXEMPTION_CEILING stays 62" and "the reason … reads 62" in the present tense. ⛔ Not filed — the carrier is real and hourly (the objectui#8071 slice lane edits that file constantly) and slice 13's dispatch already owes that docblock a repair. ⭐ Whoever takes it: fix those as a rule or a dated reading, ⛔ never by writing today's number in — that is this card's whole subject, and doing it there would be the third authoring of the same defect in one file.


    Generated by Claude Code

  5. added a commit that references this issue on Sep 28, 2026
    26ac503
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:p1

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions