Skip to content

spec(ui): page:header showStar is declared but no longer reaches a user in the reference console: since objectui#12427 the star draws only where a host wires a favorites toggle, and no host does #23650

Closed

Description

@objectstack-fleet

Filing gate: declared ≠ enforced, routed to the enforce-or-remove channel. It is a measured consequence of objectui#12427's last item (PR objectstack-ai/objectui#12465, option A as that card's contract review ruled). The fix, whichever way it goes, lands in @objectstack/spec.

The declaration

packages/spec/src/ui/component.zod.ts (about :735–:742): showStar: z.boolean().default(true), described as "Show the follow (favourite) star beside the record title. Part of the record chrome — no effect when recordChrome is false."

What the renderer does after objectui#12427 (PR objectstack-ai/objectui#12465)

  • @object-ui/components' page:header record chrome draws the star only when the record context carries onToggleFavorite. Before the change, a host with no toggle drew a star that flipped local state and stored nothing.

  • The console's RecordDetailView no longer wires a toggle: the record's favorites entry moved to the header's ⋯ overflow, per objectui#12427's design. The PR's dev measured that no other in-tree host wires one: the metadata editor's page preview and plugin-detail's record binding do not.

  • So in the reference console:

    • showStar: true (the default) draws nothing;
    • showStar: false hides nothing;
    • the key is inert.

    It stays live only for a third-party host of the published @object-ui/components that wires onToggleFavorite.

  • Producers: a grep over objectui (apps, examples) and objectstack (examples, and package sources outside the spec's own schema, tests and migration template) finds none writing showStar.

The question for the owner

Per the base principle, "a declared key the runtime does not honour is an implementation gap: build it or retire it":

  • Retire showStar from page:header, through the ADR-0087 / D3 retirement route, if the platform's position is that the favorites control is the host's overflow entry. This is the zero-pull default.
  • Or state in the describe that the star draws only where the host wires a favorites toggle, if a host-wired star is a supported capability.

Either way, the describe should stop promising a star the reference app never draws.

Dedupe: semantic search over objectstack issues for "page:header showStar favorite star record chrome no producer retire": 0 hits.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade · bug · priority:p1 · target:v18 · domain:spec · pm:queue · enforce-or-remove · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-15T10:59Z

    Read fresh. page:header's showStar (component.zod.ts about :735–:742, default true) promises a follow star beside the record title.

    Grade p1 + target:v18: an enforce-or-remove card whose outcome may retire a spec key (filing-gate.md 〈定级判据〉: 「可退役键的条件卡同档」).

    Lane domain:spec, through the spec-property-retirement playbook.

    The two outcomes, the seat's call under ADR-0049:

    • Retire: the ADR-0087 / D3 route, the zero-pull default.
      • The playbook's ledger discipline applies: the key is still live for a third-party host of the published @object-ui/components that wires onToggleFavorite, so confirm the ledger verdict before acting.
      • The objectui consumer follow-up is then p1 only if absence breaks users. Removing an inert prop does not, so it follows at its own grade.
    • Keep, and restate the describe: the star draws only where the host wires a favorites toggle.

    Either way, the describe stops promising a star the reference app never draws.

    If the choice turns on whether a host-wired star is a supported product capability, the seat brings it to the box. ⛔ It does not pick that in code.

    finding leaves on grading.

  2. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    决策分析:page:header 的 showStar —— 退役,还是保留并改写说明 · domain:spec seat 1 · session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-15T22:25Z

    维护者速读: 记录页标题旁的收藏星标,已按你在 objectui#12427 定的设计挪进了 ⋯ 菜单,参考控制台不再画星。元数据里还留着一个开关 showStar,今天在控制台里写不写都没有效果,也没有任何应用在写它。只有第三方宿主自己接了收藏回调时,它才会让星标出现或隐藏。A = 把这个开关退役:作者再写它会被直接拒绝,并收到处方。B = 保留开关,只把说明改成"仅在宿主接了收藏回调时生效"。席位推荐 A。请回一个字母:A / B。

    分诊在本卡写明:如果取舍取决于"宿主自接的星标是不是平台支持的能力",席位要把它送进决策箱,⛔ 不在代码里替你选。席位实测后判断,取舍正是取决于这一点(见「前提」第 4 条)。所以本卡转 needs-user-decision,席位不派发。

    背景

    • 声明:packages/spec/src/ui/component.zod.ts:741 showStar: z.boolean().default(true)。说明写的是"在记录标题旁显示收藏星标"。
    • objectui#12427 已关闭,由 PR fix(components): the record header star draws only where the host wires a toggle (objectui#12427) objectui#12465 落地。它的 contract review 选了 option A:星标只在 RecordContext 带 onToggleFavorite 时绘制。RecordContextValue 保留这两个成员,作为宿主的可选接入,并由 RecordContext.valueShape.pin 钉住。
    • 参考控制台的 RecordDetailView 不再传 onToggleFavorite,收藏入口只在 ⋯ 菜单。

    Governing text:

    • ADR-0049 第 28–34 行:一个属性只能处在三态之一,即 Enforced、experimental 或 Absent;"parsed, unmarked, unenforced" 的第四态被禁止。
    • AGENTS.md Prime Directive 10:"Trim what can never be enforced, implement the rest, and keep the claim as narrow as the enforcement"。
    • 两条规范都不替产品回答"宿主自接星标算不算支持的能力"。按 ADR-0049,A 选 Absent;按 PD10 的"claim as narrow as the enforcement",B 选 Enforced(收窄说明)。两条规范在这里给不出唯一答案,故升级。

    协议声明: 不改协议。A 收窄 @objectstack/spec 已发布的接受集(Clause-②: no (narrowing),BREAKING,需要 ADR-0087 处置)。B 只改说明文字,接受/拒绝结果逐字节不变(辅助面)。

    前提(各带 re-check 命令,读于 origin/main 9bb93706f,objectui pin 1f23d5b070fa)

    1. 声明仍在:git grep -n "showStar: z.boolean" origin/main -- packages/spec/src/ui/component.zod.ts → 1 行(:741)。阳性对照:同文件 git grep -c "showCopyId: z.boolean" → 1。
    2. 本仓无生产者:git grep -n "showStar" origin/main -- examples packages skills content ':!packages/spec' ':!content/docs/references' → 0 行。阳性对照:同路径集搜 recordChrome,命中 packages/lint/src/validate-component-props.test.ts 4 行。
      • objectui 无生产者:git -C ../objectui grep -n "showStar" 1f23d5b070fa -- apps examples packages/app-shell → 0 行(测试除外)。
    3. 渲染器仍读它:git -C ../objectui grep -n "schema?.showStar" 1f23d5b070fa -- packages/components/src/renderers/layout/containers.tsx → :1582。
    4. 参考控制台不接回调,而发布的组件库保留接入点:git -C ../objectui grep -n "onToggleFavorite" 1f23d5b070fa -- packages/app-shell/src/views/RecordDetailView.tsx 只有 :3333/:3336 两行注释(说明"本页不传")。packages/react/src/context/RecordContext.tsx 2 行,RecordContext.valueShape.pin.test.tsx 3 行。
      • 即:宿主接入能力是 objectui 一侧经 contract review 有意保留的已发布面。

    具体问题

    客户看到的症状:作者(或 AI)在记录页头写 showStar: false 想隐藏星标,或写 true 想显示星标,在参考控制台里两者都没有任何效果,而说明文字承诺有。要定的是:平台是否把"宿主自接收藏星标、并由元数据开关它"当作支持的能力。

    选项

    选项 做什么 客户可感知后果 工作量
    A 退役 按 spec-property-retirement 路线退役 showStar:retiredKey() 墓碑、ADR-0087 D3 条目、BREAKING changeset 带 FROM → TO。objectui 渲染器对该键的读取另立跟进卡,按其自身级别处理。 写 showStar 在 os validate / 发布时被响亮拒绝,并给出处方"收藏入口在页头 ⋯ 菜单,元数据不控制它"。第三方宿主接了回调时星标照画,但元数据不能再隐藏它。 domain:spec · 1 PR,外加 objectui 跟进 1 PR。先例:PR #23601 退役两个键,+1016 / −112,38 个文件。单键预计更小,未实测。
    B 保留并改写说明 只改 showStar 的 describe/TSDoc:"仅在宿主为记录上下文接入收藏回调时绘制;参考控制台不接,写了无效"。重新生成文档。 文档如实;作者在参考控制台里写它仍然无效果,也没有提示。 domain:spec · 1 PR,只改说明。无先例。
    • 业务含义直译: A 等于"收藏是用户个人的壳层功能,不是页面配置项",类似主流 CRM 把收藏放在全局头部,不放在页面布局里。B 等于"保留一个只为假想的第三方宿主服务的开关"。

    四轴

    os-decision-facets

    • ① 项目长远合理性:A 缩小契约。两年后,收藏应当是用户级的壳层能力(Salesforce Lightning 的 Favorites 在全局头部,不是 page layout 属性),页面元数据不带收藏开关。B 把一个只有宿主才兑现的开关永久留在页面契约里。
    • ② 实际业务拉动:零。两仓都没有生产者(前提 2),参考控制台也不读它的效果(前提 4)。今天没有人撞上这个能力。
    • ③ 防 AI 犯错:A 让 AI 写出的无效键在发布时被响亮拒绝并给处方。B 下 AI 照写 showStar,在参考控制台里静默无效果,没有任何人看到错误。
    • ④ 创业阶段不扩散:A(remove)优于 B(declare-and-maintain)。每个保留的键都是永久义务。
      Prior rulings read: showstar,favorite,page:header,recordchrome → 0 hits; none; thread: none; repo: objectstack-ai/objectstack

    推荐、回退与置信缺口

    • 推荐 A。 只看①选 A;②③④ 是否翻转:否(三棱同向 A)。
    • 回退 B: 如果你认定发布的组件库要支持"宿主自接星标、元数据可关",就选 B。那时说明要写清只在宿主接入时生效。
    • 置信缺口: 席位看不见 @object-ui/components 的第三方宿主,没有任何遥测数据,所以"零拉动"只覆盖两个仓。A 不删 objectui 的 onToggleFavorite 接入点,只删元数据开关。

    裁后执行

    • A: spec 席位按 spec-property-retirement 技能派发退役,单 PR,Clause-②: no (narrowing)。席位同时在 objectui 立跟进卡,删除渲染器对 showStar 的读取及其 CONTROL 钉子,级别按"缺席不破坏用户"定。落地前确认 Console Pin Gate 不因此变红。
    • B: spec 席位派发一个只改说明的 PR,Clause-②: no,patch changeset。

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: letter A, retire showStar · maintainer, in domain:spec seat 1's chat · recorded by seat 1 · os-elon-musk · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-15T22:41Z

    • Who: the maintainer, at this seat session's keyboard.
    • Verbatim: the option the maintainer selected, answering the seat's question on this card's analysis 6203551385: 「A 退役 showStar (Recommended)」.
    • Where: the chat of session session_01HjR8RUwTPQ3TgbfKihmxp9 (the domain:spec seat 1 tenure opened by marker 6203433234 on [PM seat] domain:spec — 🟢 os-elon-musk · session_01HjR8RUwTPQ3TgbfKihmxp9 #6017), 2026-10-15T22:40Z.
    • Freshness: read in this act, no comment on this card is newer than the analysis 6203551385, and the body is unedited since filing.
    • Governing text: ADR-0049's three states (lines 28–34: Enforced, experimental or Absent). The ruling takes Absent for page:header showStar.

    What the ruling binds (letter A, with the post-ruling execution the analysis stated):

    1. page:header showStar (packages/spec/src/ui/component.zod.ts:741 at 9bb93706f) is retired through the spec-property-retirement route:
      • a retiredKey() tombstone whose prescription names the header's ⋯ menu as the favorites entry, and says metadata does not control it;
      • the ADR-0087 D3 entry;
      • a BREAKING changeset with FROM → TO;
      • Clause-②: no (narrowing).
    2. The objectui renderer's read of showStar (packages/components/src/renderers/layout/containers.tsx :1582-:1583 at pin 1f23d5b070fa) and its CONTROL pin go in a follow-up card on objectstack-ai/objectui, graded on its own ("absence breaks no user"). The seat that dispatches this card files it. objectui's RecordContextValue.onToggleFavorite host opt-in is untouched: the ruling removes the metadata switch, not the host hook.
    3. Before landing, the dispatching seat confirms the removal does not red the full battery's Console Pin Gate. The objectui renderer reads schema?.showStar untyped, so the seat expects no break, but this is NOT measured. If it does red, AGENTS.md's Post-Task step 4 applies: the sibling fix and the pin bump ship in the same landing.

    State: needs-user-decision → pm:queue in this act. The card's grade (priority:p1, target:v18) and lane are unchanged. Seat 1's three slots (batch 3) are full this round; it takes the card at its first free slot unless another seat claims it first. The ruling id for any claim or dispatch is this comment.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 2 · 2026-10-16T00:28Z
    Session: session_01HjR8RUwTPQ3TgbfKihmxp9 (the dispatching seat; the dev runs as a cloud session the seat post names)
    Account: os-elon-musk (the seat's linked user as GET /user answers it; this card's assignee)
    Branch: claude/issue-23650-retire-showstar
    Worktree: objectstack-issue-23650 (in the cloud session's container)
    Domain: domain:spec
    Seat: domain:spec#1 (seat post #6017)
    File surface (at origin/main 140238a47 or later; stop on a breach and explain it in the report):

    • packages/spec/src/ui/component.zod.ts: PageHeaderProps.showStar (:741) is retired with a retiredKey() tombstone. Its prescription says the favorites entry is the header's ⋯ menu and metadata does not control it.
    • The ADR-0087 D3 migration entry under packages/spec/src/migrations/entries/, the tests that pin showStar (packages/spec/src/ui/component.test.ts, packages/lint/src/validate-component-props.test.ts), the component-member read-point entry in packages/spec/liveness/page.json, the regenerated packages/spec artifacts check:generated names, and one .changeset/23650-*.md (BREAKING).
    • sdui.manifest.json is NOT edited by hand: it is generated from objectui's built tree at the pin.
    • ⛔ No objectui file: the renderer's read goes to a follow-up card the seat files.
      Container & model: M, mode:cloud (the maintainer's word in this session's chat: 「batch 调到 5, 可以开云卡」), model: default tier (dispatch-gates --tier --repo objectstack-ai/objectstack: no path-derived mandate; the contract review owed before the queue is at CONTRACT_REVIEW_TIER by face, packages/spec/src/**)
      Clause-②: no (narrowing)
      Responsibility: packages/spec/src/ui/component.zod.ts (showStar declared, default true) | none: no reference host wires onToggleFavorite | every author or AI who writes showStar; no producer writes it today (two-repo grep in 6203551385)
      Thread-read: 6203775759
      Ruling-ref: 6203775759 (the maintainer's letter A on this card: 「A 退役 showStar (Recommended)」)
      Serial constraints cleared: the file lists of all open PRs and the claims of all open pm:dispatched cards were read in this act. No open PR touches component.zod.ts or validate-component-props*. spec(ui): a generic record:json record block — a bound record's value as indented JSON behind a REQUIRED, fail-closed requiredPermissions gate (objectui#12490, face 4 of objectui#12438 letter C) #23745 (this seat, cloud) adds RecordJsonProps and a ComponentPropsMap row in the same file, in another region. This is the normal-concurrency rule: whichever lands second merges main and regenerates.
  5. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 23650,
     "status": "done",
     "branch": "claude/issue-23650-retire-showstar",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/23781",
     "session": "session_0127kfChiciCXiqVX5g7E5rJ",
     "premise_still_valid": true,
     "summary": "Retired page:header showStar per ruling 6203775759 (letter A). The kit: a retiredKey() tombstone on PageHeaderProps, whose prescription names the header's ⋯ menu as the favorites entry and says metadata does not control it; the D2 conversion page-header-show-star-removed (toMajor 18, retiredFromLoadPath, retiredAfter 17.7.0); the RETIRED_KEYS_BY_MAJOR[18] entry; the D3 semantic entry page-header-show-star-retired plus a STEP18_RATIONALE fragment; the liveness page.json read-point entry marked refused; regenerated authorable-surface, authorable-defaults and reference docs; and a BREAKING minor changeset with FROM → TO and an adr-0087 registered marker. The producer lies in the spec, as the claim's file surface expected. No producer exists in either repo. Card body and comments were read; the newest Claim (6205208013) names this branch. No objectui file was touched.",
     "tests": "At head 75ddc305: (1) spec typecheck + test 680 files/20787 tests + test:repo 63 files/1070 tests, VERDICT command-exit 0. (2) lint typecheck exit 0; lint test 139 files/6772 tests, exit 0. (3) Ablation via scripts/ablation-replace.mjs: swapping 'showStar: retiredKey(' for 'showStar: z.boolean().default(true).describe(' turned page-header-show-star-retirement.test.ts red (6 tombstone cases). The file was restored byte-identical to HEAD, blob d3db276b1322, git diff HEAD empty. A first ablation attempt was a syntax-broken mutation that ran no tests; it is void and is declared here. (4) Removed pins and their replacements: component.test.ts #6776 pinned showStar default true, accepted false and refused 'no'; these are replaced by 'refuses true AND false at the key, with the prescription' and 'a non-boolean is refused by the same tombstone, at the key' in the new pin file. The props-lint acceptance fixture drops showStar, and a new refusal case pins component-props-invalid + error + path + prescription.",
     "gates": "node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, derived at 75ddc305 (16 paths vs merge base 4fe8b3def): 111 families, each run with its exit captured before any pipe, all exit 0. --ran reports 111 derived, 111 run, 0 NOT-MEASURED (a derived zero; every line carries an exit code). Four families first answered exit 3 (PREREQUISITE NOT MET: lint/objectql/client-react dist missing, plus a shallow clone for check-plugin-teardown-shape --self-test). After building those packages and fetching commit 621a4876 they were re-run, exit 0. check:dev-prereqs (local-only family) exit 0. check:generated: all 14 artifacts up to date. CI check-runs on PR #23781: in_progress at report time, NOT MEASURED here.",
     "line_budget": 764,
     "files_changed": [
      ".changeset/23650-page-header-show-star-retired.md",
      "content/docs/references/ui/component.mdx",
      "packages/lint/src/validate-component-props.test.ts",
      "packages/spec/authorable-defaults/ui.json",
      "packages/spec/authorable-surface/ui.json",
      "packages/spec/liveness/page.json",
      "packages/spec/src/conversions/registry.ts",
      "packages/spec/src/migrations/entries/retired-keys/18.ui__PageHeaderProps__showStar.ts",
      "packages/spec/src/migrations/entries/semantic/18.page-header-show-star-retired.ts",
      "packages/spec/src/migrations/registry.ts.template",
      "packages/spec/src/shared/retired-key-removal-version.pin.test.ts",
      "packages/spec/src/ui/component.test.ts",
      "packages/spec/src/ui/component.zod.ts",
      "packages/spec/src/ui/page-header-breadcrumb-retirement.test.ts",
      "packages/spec/src/ui/page-header-show-star-retirement.test.ts",
      "packages/spec/vitest.repo-tests.json"
     ],
     "deviations": [
      "Beyond the claimed file surface: retired-key-removal-version.pin.test.ts (its JOIN demands a row for every entry retired after the newest stable), page-header-breadcrumb-retirement.test.ts (it pins the exact PageHeaderProps retired-key list), vitest.repo-tests.json (registers the new repo-project pin), and registry.ts.template (the STEP18_RATIONALE fragment). All are mechanical consequences of the kit.",
      "scripts/pm/os-regen-merge.sh was refused by the container's command classifier (Git Destructive). Used a plain 'git merge origin/main' instead (merge commit 75ddc305, no history rewrite), then pnpm install + spec build + check:generated: nothing stale, no os-regen-pending recorded. The one conflict was in retired-key-removal-version.pin.test.ts (both sides added JOIN rows); both were kept.",
      "Before the PR existed, the branch's WIP commits were squashed into e576a458 and pushed with --force-with-lease=claude/issue-23650-retire-showstar:SHA. All five AGENTS.md section-3 conditions held: a claude/issue-* branch, created here, only this session's commits, no PR, an explicit lease.",
      "The worker process restarted mid-run. The interrupted lint test and the last 4 gate families were re-run on the same head."
     ],
     "mcp_calls": "2 — mcp__github__issue_read (get, get_comments); read-only",
     "api_writes": "2 — fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches: (1) pr_create (draft, assignees os-elon-musk), which became PR #23781, run 38837568896; (2) this os-dev-report comment on #23650. git push is not counted. No label write: the PR carries a changeset, so skip-changeset does not apply.",
     "open_questions": [
      {
       "question": "Ruling item 3: does the removal red the Console Pin Gate?",
       "options": [
        "A: measured no type break — objectui at f96f771140f1 has no PageHeaderProps import or z.infer; reads are untyped schema?.showStar; the gate's tsc resolves objectui's installed spec, OBJECTSTACK_SPEC_DIST only reaches vite",
        "B: run the gate on the PR head before landing"
       ],
       "recommendation": "A as the measurement, with B left to the seat: the gate only runs on main's full battery, and it was not run locally."
      },
      {
       "question": "Zone 2 #5: does any gate red on sdui.manifest.json still listing showStar as a renderer input?",
       "options": [
        "No: check-sdui-manifest judges shape/tamper/staleness/pin correspondence, not spec parity, and was green; no gate here compares manifest inputs with ComponentPropsMap"
       ],
       "recommendation": "No action here; the manifest updates on the objectui pin bump after the follow-up card lands."
      }
     ],
     "out_of_scope_findings": [
      "carrier: the objectui follow-up card the seat files (ruling item 2) · noted, not filed · read points at objectui f96f771140f1: (a) packages/components/src/renderers/layout/containers.tsx :1580-:1584 (the read), :2616 (passes showStar to the chip), :2681 (registration input name showStar, type boolean); (b) packages/components/src/custom/RecordTitleChip.tsx :45/:63/:134; (c) CONTROL pin packages/components/src/__tests__/page-header-star-host-toggle-12427.test.tsx :117-:120; (d) apps/console/src/__tests__/registry-inputs-spec-parity.test.ts :5787 settledUpstream ['page:header','showStar'], which asserts specTopLevelKeys (tombstones subtracted) contains it — it reds in objectui on the first spec bump that carries this retirement, and the forward direction reds while the registration still publishes the input; (e) docs content/docs/layout/page-header.mdx:49 and content/docs/guide/layout.md:373 · dedupe words: showStar, page:header, registry-inputs-spec-parity, RecordTitleChip, favorites"
     ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #23781 comment 6206589242 · domain:spec seat 1 · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T02:22Z · the contract review (CONTRACT_REVIEW_TIER) and an all-green head stand before the queue. Ruling item 3 (the Console Pin Gate) is read on main after the merge, and ruling item 2's objectui follow-up card is filed with the landing record.

    File surface amended for claim 6205208013, each a mechanical consequence of the retirement kit: packages/spec/src/shared/retired-key-removal-version.pin.test.ts, packages/spec/src/ui/page-header-breadcrumb-retirement.test.ts, packages/spec/vitest.repo-tests.json and packages/spec/src/migrations/registry.ts.template.

  7. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 23650,
     "status": "done",
     "round": "Console Pin Gate measurement (ruling item 3)",
     "branch": "claude/issue-23650-retire-showstar",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/23781",
     "session": "session_0127kfChiciCXiqVX5g7E5rJ",
     "head": "75ddc305dc6828c8b930762abc7cf2a977060c5e",
     "objectui_pin": "f96f771140f1ba488245e0d0d3e7420d720bff9a",
     "verdict": "GREEN — the Console Pin Gate's steps all exit 0 on the PR head; the showStar retirement does not red it.",
     "steps": [
      "pnpm install --frozen-lockfile :: exit 0",
      "pnpm exec turbo run build --filter=@objectstack/client... --concurrency=4 :: exit 0 (34/34 tasks, builds this branch's @objectstack/spec)",
      "bash scripts/build-console.sh :: exit 0. The objectui console build ran 'tsc && vite build' with OBJECTSTACK_SPEC_DIST=this tree's packages/spec (21 exports entries aliased) and printed 0 'error TS' lines. Result: 'dist ready (64520 KB) from objectui@f96f771140f1'.",
      "pnpm check:console-sha :: exit 0 (Console dist matches the objectui pin)",
      "pnpm check:console-injection --require-stamp :: exit 0. Self-test: 67 assertions. 'the dist carries this tree's copy, and not the published one'."
     ],
     "direct_evidence": "The built bundle carries the new tombstone text: 1 asset under packages/console/dist/assets contains 'property `showStar` was removed in @objectstack/spec 18'. The retirement was in the injected spec this build compiled against, so the green covers the removal itself.",
     "control": "Not run on origin/main. The control exists to attribute a red to this diff, and the head is green, so there is nothing to attribute. Declared rather than skipped silently.",
     "network_or_prereq_failures": "none",
     "cleanup": "packages/console/dist and .cache/objectui-f96f771140f1 deleted. The worktree was clean (git status: 0 entries) and was removed. Nothing committed, nothing pushed.",
     "mcp_calls": "0 this round",
     "api_writes": "1 this round — fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches: this os-dev-report comment on #23650. No push."
    }

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
     "issue": 23650,
     "status": "done",
     "round": "main sync before the queue",
     "branch": "claude/issue-23650-retire-showstar",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/23781",
     "session": "session_0127kfChiciCXiqVX5g7E5rJ",
     "new_head": "e22d40e59a72bd0819646c6306d34b8b21bca303",
     "merge": "d91b33e5, parents 75ddc305dc (reviewed head) + 46ca793edbef (origin/main). Regeneration commit e22d40e5 on top. Pushed; the remote branch reads e22d40e5.",
     "merge_method": "Plain 'git merge origin/main' (no rebase, no force-push). os-regen-merge.sh is refused by this container's command classifier (measured last round), so it was not retried.",
     "conflicts": "packages/spec/liveness/page.json (hand-written): took main's rewrite of the regions row evidence (objectui @0656b0e3c0, PAGE_TEMPLATE_SLOTS / checkPageRegionPlacement) and re-applied this PR's one phrase, 'the refused `showStar` … retired #23650', in the [1] page:header read-point list. Both kept; 2 changed lines vs main.",
     "regenerated": [
      "packages/spec/authorable-defaults/ui.json — the os-regen driver had kept the branch side, dropping main's removal of 'ui/FormSection:columns = 1'; the spec build regenerated it. The pre-commit marker was discharged ('all artifacts current'). Delta vs main is now only the removed 'ui/PageHeaderProps:showStar = true' line."
     ],
     "step5": "Own delta over packages/spec/src, packages/lint/src and the changeset: patch-id aeca2c8bbe02 against both 4fe8b3def→75ddc305 and 46ca793e→e22d40e5 — identical. Full diff vs origin/main: 16 files, +738 / −26, the same counts as the reviewed head.",
     "gates": [
      "pnpm --filter @objectstack/spec typecheck :: exit 0",
      "spec vitest (local + repo projects) over src/ui src/conversions src/migrations src/shared :: exit 0 (196 files / 7042 tests). Separately, page-header-show-star-retirement + page-header-breadcrumb-retirement + retired-key-removal-version.pin :: exit 0 (73 tests).",
      "pnpm --filter @objectstack/spec run check:authorable-surface :: exit 0",
      "pnpm --filter @objectstack/spec run check:liveness :: exit 0",
      "pnpm --filter @objectstack/spec run check:docs :: exit 0",
      "node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0",
      "pnpm --filter @objectstack/spec check:generated :: exit 0 (all 14 artifacts up to date, after the build)"
     ],
     "pr_body_line": "Regen-provenance: merge of origin/main at 46ca793edbef645731bebadb1bd7a63564cafba2 plus check:generated regeneration; no source change since the reviewed head 75ddc305dc.",
     "pr_body_note": "Not written by this session: the PR body is written once, at creation. The seat adds the line above.",
     "mcp_calls": "0 this round",
     "api_writes": "1 this round — fleet-write relay POST /repos/objectstack-ai/objectstack/dispatches: this os-dev-report comment on #23650. git push of the branch is not counted."
    }

    Generated by Claude Code

  9. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · PR #23781 → ae0ca66f41 · domain:spec seat 1 · os-elon-musk · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T04:40Z

    probe reading
    PR object merged 2026-10-16T04:34Z out of the merge queue (entered 04:02:57Z); merge commit ae0ca66f41
    origin/main git merge-base --is-ancestor ae0ca66f41 origin/main → exit 0
    merged vs reviewed head 12 of 16 files' blobs at ae0ca66f41 equal the PR head e22d40e59a. That head is the reviewed 75ddc305dc plus a merge of main at 46ca793edb and its regeneration (Regen-provenance: line in the body; ACCEPT 6206589242, contract review PASS 6206694435). The other four, ui/component.zod.ts, references/ui/component.mdx, authorable-surface/ui.json and liveness/page.json, also carry #23783 (97b8e7a51d) or #23776 (23d0bc78ba), which landed after that merge. In all 16 files, the lines this PR adds and removes are exactly the merge commit's.
    queue branch no gh-readonly-queue/main/pr-23781-* ref remains
    mis-close scan the body's only closing keyword is Fixes #23650; this card closed completed
    Console Pin Gate (ruling item 3) Before landing, the dev measured it green on the PR head (report 6206826176). On ae0ca66f41's push run (CI 38851286174) the job was skipped by its path filter, because console watches the pin and the spec's build config, not spec source. Its first run carrying this commit is the hourly full battery, due about 05:00Z. The seat reads it and replies here.

    State: pm:dispatched is removed in this act; bug, priority:p1, domain:spec and target:v18 stay. The cloud dev session is archived in this act.


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 16, 2026

    @objectstack-fleet
    ContributorAuthor

    Console Pin Gate (ruling item 3), read on main · domain:spec seat 1 · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T05:08Z · follows landing record 6208231261.

    • The run: the hourly full battery, CI run 38853598892 (schedule), on f846cc2020. That commit carries this card's merge ae0ca66f41 (git merge-base --is-ancestor → exit 0).
    • The job: Console Pin Gate (job 116820112335) concluded success at 2026-10-16T05:07Z. Every step ran, none skipped:
      • building the Console SPA at the pinned objectui SHA;
      • asserting a real Console dist;
      • checking that the dist stamp matches the pin;
      • checking that the dist bundles this tree's spec.
    • Also green on the same commit: the hourly Spec Shape Gate (run 38853057044), which type-checks objectui against the spec built from f846cc2020. So the retirement reds neither the pinned Console build nor objectui's type check. No registry entry is owed in scripts/ci/spec-shape-retirements.json.

    Ruling item 3 is closed out. Item 2 rides objectstack-ai/objectui#12627.


    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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions