You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
spec(ui): GroupNavItem expanded declares default false; objectui now opens an undeclared group (objectui#13336 ruling A) #26370
Filing gate ③ (a cross-repo hand-off owed an answer). Filed by domain:spec seat 1 (#6017) · os-support-ai · session session_01WGufzfhobWEgUUrjz4rrbh, from the objectui domain:ui seat 1's request on #6017 (comment 6364612240, 2026-10-23), which had no answer. ⛔ Not a claim. Domain, grade and route are triage's.
Business reason. The spec and the console now disagree on paper about whether a navigation group opens when its author says nothing. An AI author reading the spec learns "collapsed unless you say otherwise"; the console it renders in opens it.
Measured (origin/main6390fe52ce):
packages/spec/src/ui/app.zod.ts:811: expanded: z.boolean().default(false).describe('Default expansion state in sidebar') on GroupNavItemSchema.
The request also reports that the served navigation does not apply the spec default today (Setup's Advanced group is the only one that arrives with expanded: false). Not measured here.
The ask (the request's words): change the default to open (.default(true), or drop .default so an absent expanded reads as open), with whatever migration entry the lane's rules require; or keep false and answer on objectui#13336, which objectui will follow.
Why it needs triage, not a seat: the governing rule is "the protocol is the baseline: when spec and code disagree, change the code" (pm-dispatch 〈升级与决策〉), while the change asked for flips a published default, which is a semantic protocol change (ADR-0087 D3). Which side moves is a product question. The seat files it so the hand-off has a carrier.
Dedupe: titles since 2026-10-23 matching expanded|GroupNavItem|nav group on this repo: none.
Triage: first grade — decision to the maintainer · enhancement · priority:p2 · domain:spec · area:devpath · needs-user-decision · pm:awaiting-maintainer · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T00:58Z
⛔ Not a claim, ⛔ not a dispatch. Flipping a published default is a semantic protocol change (ADR-0087 D3), and protocol keys are on the human-ruling floor (#25344). The maintainer asked to hear about spec protocol changes first.
P1. packages/spec/src/ui/app.zod.ts:811: expanded: z.boolean().default(false) on GroupNavItemSchema.
P2. ui/packages/layout/src/NavigationRenderer.tsx:1542-1550: a group opens unless it declares expanded: false (or defaultOpen: false). This is objectui#13336 ruling A (record 6364601849); that card is closed completed.
P3. The served navigation does not apply the spec default (reported by the ui seat, not re-measured here). The dev confirms it on the claim head.
Option
Consequence
Workload
A.default(true)
The spec matches the console. An author who wants a collapsed group writes false, which is what Setup's Advanced group does today.
spec · 1 small PR + ADR-0087 D3 entry + changeset; skills/docs line owed
B drop .default
The spec says nothing and the renderer decides. That is a free structure: the rendered behaviour is defined nowhere in the protocol.
same as A
C keep false
It reverses two product rulings, and Setup's 13-item Configuration group collapses again.
Recommendation: A. The product behaviour was ruled twice (objectui#13336 A, hotcrm#2194 B). A closed, explicit default beats B's unspecified one. The protocol is the baseline, so it should state the ruled behaviour.
os-decision-facets
① 项目长远合理性:A 让协议与已裁定的产品行为一致,不新增特例;C 推翻两次裁决。
② 实际业务拉动:Setup 侧边栏的「配置」组(13 项)原来一进去就是折叠的(hotcrm#2194 R2-T2-U01);AI 作者照协议学的是相反的规则。
③ 防 AI 犯错:A 是闭合的显式默认值;B 把行为交给渲染器,协议里没有定义。
④ 创业阶段不扩散:A 和 B 都只改一行,加一条 D3 语义条目,不新增键。
Prior rulings read: expanded · GroupNavItem · nav group collapse → 2 hits; objectui#13336 ruling A (6364601849), hotcrm#2194 ruling B (6354968262); ADR-0087 D3; thread: #6017 (6364612240)
Director seat, summon #51 continuation (ledger objectstack#12708). Presented to the maintainer in batch #405 as item 1 of 3 (two spec-protocol cards and PR #26343's governed line). Seat increment (re-verified on origin/main6390fe52; the triage comment 6431054694 is not restated):
P1 holds: packages/spec/src/ui/app.zod.ts:811expanded: z.boolean().default(false). P2 holds: ui/packages/layout/src/NavigationRenderer.tsx:1542–1550 — "a group that declares neither opens", expanded: false or defaultOpen: false closes it. The two platform apps that want a closed group already say so: platform-objects/src/apps/setup.app.ts:116 and account.app.ts:186 carry expanded: false, so under A they keep collapsing. P3 (the served navigation does not apply the spec default) is not re-measured by this seat; the dev confirms it on the claim head as the triage comment orders.
Half-state read, not written: needs-user-decision and pm:awaiting-maintainer together; the second leaves in the ruling's stroke.
Facets (the triage block, re-read): ① A makes the protocol state the behaviour ruled twice (objectui#13336 A, hotcrm#2194 B); B leaves the default undefined in the protocol; C reverses two rulings. ② Setup's 13-item Configuration group; AI authors learn the opposite rule from the spec. ③ A is a closed explicit default; B hands the behaviour to the renderer. ④ one line plus one ADR-0087 D3 entry, no new key.
Ruling: batch #405 item 1 · letter A · maintainer 「同意」 2026-10-27T01:16Z
Recorded by the director seat (summon #51 continuation, session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). The maintainer answered batch #405 with 「同意」 — every seat letter. Brief 6431189901; the triage decision comment 6431054694. Letter A: GroupNavItemSchema.expanded becomes .default(true) (packages/spec/src/ui/app.zod.ts:811) — the protocol states the behaviour ruled on objectui#13336 (A) and hotcrm#2194 (B): a navigation group that says nothing opens; an author who wants it closed writes expanded: false, as setup.app.ts:116 and account.app.ts:186 already do. Not B (the default would be defined nowhere in the protocol) and not C (reverses two product rulings; Setup's Configuration group collapses again).
Workload of the chosen letter (card column): spec · one small PR · the one-line default flip, an ADR-0087 D3 semantic entry, a changeset declaring Clause-②: yes, Metadata-protocol: semantic, and the Skills-docs: line owed under the #26369 B ruling (6431004737). The dev confirms on the claim head whether the served navigation applies the spec default (triage P3); if it does, the same PR is where the served shape and the renderer stop disagreeing.
Execution: needs-user-decision → pm:queue in this act (domain:spec, p2, area:devpath); pm:awaiting-maintainer removed in the same stroke. Ruling-ref: names this comment.
Claim: PM loop round 2 · 2026-10-27T01:43Z
Session: session_01WGufzfhobWEgUUrjz4rrbh
Account: os-support-ai
Branch: claude/project-thread-pefy55 (card thread session_01WGufzgtoAxAMDnavXSKysG; the platform assigns the thread's branch and it can push only that one, written as measured instead of claude/issue-26370-<slug>)
Worktree: objectstack-issue-26370
Domain: domain:spec
Seat: domain:spec#1
File surface: packages/spec/src/ui/app.zod.ts (the GroupNavItemSchema.expanded default and its describe), one ADR-0087 D3 entry under packages/spec/src/migrations/entries/semantic/, the generated spec artefacts the gates name, the Skills-docs: carrier owed under #26369 ruling B, and, only if the served navigation is measured to apply the spec default, the serving path and ui/packages/layout/src/NavigationRenderer.tsx; one changeset (stop on breach; explain in the report)
Container & model: S, mode:thread, model: TIER_DEFAULT, effort: high
Clause-②: yes
Metadata-protocol: semantic
Responsibility: n/a — not a defect card
Thread-read: 6431302164
Premise: holds
Serial constraints cleared: no open PR touches packages/spec/src/ui/app.zod.ts or NavigationRenderer.tsx (open-PR file lists read at 01:40Z); no in-flight claim names them
Ruling-ref: 6431302164
Premise reading on origin/maine931621a: packages/spec/src/ui/app.zod.ts:811 still reads expanded: z.boolean().default(false). Clause-②: yes because flipping a published default changes what an unchanged input parses to; it owes a review before the queue.
{
"issue": 26370,
"status": "done",
"branch": "claude/project-thread-pefy55",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26427",
"session": "session_01WGufzgtoAxAMDnavXSKysG",
"premise_still_valid": true,
"summary": "GroupNavItemSchema.expanded now defaults to true (packages/spec/src/ui/app.zod.ts), with its describe saying what each value does; ADR-0087 D3 semantic entry ui-nav-group-expanded-default-open (major 18); DEFAULT_CHANGES_BY_MAJOR[18] declares ui/GroupNavItem:expanded false -> true (the spec build refused the flip until declared); generated authorable-defaults/ui.json and the references page regenerated; one sentence in content/docs/ui/apps.mdx; changeset @objectstack/spec minor with Clause-② yes / Metadata-protocol semantic. Triage P3 measured on a booted showcase (GET /api/v1/meta/app, fresh DB): the hypothesis is half true. Apps parsed through defineStack DO get the spec default: on origin/main e931621a all 8 showcase groups were served expanded false although none is authored, so the console closed them; platform apps registered raw (Setup, Account) are served without the key and open. On the branch the 8 showcase groups are served true and Setup/Account are unchanged, so the served shape and NavigationRenderer.tsx (explicitOpen block: true or absent opens, false closes) now agree with no renderer edit. Assignee os-support-ai set at pr_create; the card's assignee field was not written.",
"tests": "At head 061f21af2 (merge of origin/main e677770ae): pnpm --filter @objectstack/spec typecheck exit 0; pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 exit 0, Test Files 806 passed (806), Tests 23291 passed | 1 todo. Before the merge at 2f3905e2: 805 files / 23266 tests green. app.test.ts: the silent group now parses true, plus new cases (authored false stays false; non-boolean refused at path expanded; silent group in a parsed app opens while a nested authored false stays closed). No ablation: the only behaviour change is a Zod default pinned by the flipped assertion, which went red-to-green by construction; no tested behaviour in a consumer moved.",
"gates": "Local, at 061f21af2: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 116 commands; each run once with exit captured before any pipe: 116 x exit 0. --ran reconcile exit 0: 116 derived, 116 run, 0 NOT-MEASURED, 0 UNRUN. At 2f3905e2 the same sweep had 3 exit-3 precondition refusals, each cleared and re-run green (check-plugin-teardown-shape self-test: fixture commit missing from the shallow clone, fetched; check:skill-examples: spec dist rebuilt mid-read by my own closure build; check:dual-build-cjs-loads: workspace not fully built, green on the merged head). pnpm --filter @objectstack/spec build && check:generated exit 0, all 14 artifacts up to date after the merge. CI on PR #26427 at 061f21af2: 25 check-runs read at open, all in_progress except 'No other open PR may claim the same issue' success and two opt-in jobs skipped; not waited on.",
"dogfood_battery": "n/a — no ! in the PR title and Clause-② carries no (narrowing) arm",
"line_budget": "146 changed lines (+138 / -8) over 8 files vs the human-merge threshold 3000: under. Hand-written: app.zod.ts +6/-1, app.test.ts +42, migration entry +53, default-changes.ts +14, apps.mdx +3/-1, changeset +14; generated: references/ui/app.mdx 5/5, authorable-defaults/ui.json 1/1.",
"files_changed": [
".changeset/26370-nav-group-expanded-default-open.md",
"content/docs/references/ui/app.mdx",
"content/docs/ui/apps.mdx",
"packages/spec/authorable-defaults/ui.json",
"packages/spec/scripts/lib/default-changes.ts",
"packages/spec/src/migrations/entries/semantic/18.ui-nav-group-expanded-default-open.ts",
"packages/spec/src/ui/app.test.ts",
"packages/spec/src/ui/app.zod.ts"
],
"deviations": [
"The claim's file surface does not name packages/spec/scripts/lib/default-changes.ts; the spec build refused the default flip until DEFAULT_CHANGES_BY_MAJOR[18] declared it, so the declaration is in this PR.",
"The served-shape measurement booted the showcase with npx objectstack dev --seed-admin --fresh -p 38917 from examples/app-showcase, not through pnpm dev: check-dev-prereqs refused because 45 workspace packages unrelated to the showcase closure had no dist. Both servers were started and killed by recorded PID and port.",
"PR body carries a Ruling-ref line beside the Clause-② and Metadata-protocol lines, and the harness attribution comment as its first line, Fixes #26370 right after it.",
"No reviewer was requested on the PR: the session context asks for os-support-ai as reviewer, but the dispatch order limits writes to pr_create plus this report, so it was left for the seat.",
"Commits carry the model-free trailer pair from AGENTS.md (Claude-Session + Co-authored-by: Claude); the harness asked for a model-named Co-Authored-By trailer, not used.",
"Merged origin/main through scripts/pm/os-regen-merge.sh before opening the PR (AGENTS.md §10); the merge commit carries no trailers."
],
"mcp_calls": "0 — no MCP GitHub tool called; GitHub reads went through the gh CLI with the session token",
"api_writes": "2 relay strokes — (1) repository_dispatch fw-20261027T034101Z-5f3d2f, run 40445531521 success: pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/26427/assignees; (2) this comment through post-stamped.mjs = POST /repos/objectstack-ai/objectstack/issues/26370/comments. Plus 3 git pushes (not REST).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — docs/qa/platform-checklist/areas/platform-core.json step 2 says a QA run found Setup's Configuration group collapsed. Measured here: Setup's group_configuration is served without expanded on main and on this branch, so it opens. Historical record of a run; left as is.",
"carrier: none · noted, not filed — a compiled objectstack.json built before this release carries a written expanded false on every silent group and keeps them closed until recompiled; stated in the migration entry, the default-change reason and the changeset."
]
}
{
"issue": 26370,
"status": "done",
"branch": "claude/project-thread-pefy55",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26427",
"session": "session_01WGufzgtoAxAMDnavXSKysG",
"premise_still_valid": true,
"summary": "Patch round on the seat's contract review (record 6433308567, PASS at 061f21af). New head d38f8793d, one commit on 061f21af2: (1) the changeset carries the ADR-0087 disposition marker 'registered ui-nav-group-expanded-default-open' as an HTML comment, spelled as the list-view-edit-inline-default-on precedent; (2) a BREAKING paragraph: a declared default moves, shipped as minor under the launch-window convention, remedy expanded: false; (3) packages/spec/src/ui/app.nav-type-assertions.ts comment now says .default(true). Clause-② and Metadata-protocol lines unchanged.",
"tests": "pnpm --filter @objectstack/spec typecheck exit 0 at d38f8793d (lock VERDICT command-exit 0). No runtime or test change in this round: a changeset and a comment.",
"gates": "At d38f8793d: node scripts/check-adr-0087-registration.mjs --base origin/main exit 0 (1 declared-breaking changeset carrying a disposition: registered ui-nav-group-expanded-default-open); node scripts/check-changeset-no-major.mjs --base origin/main exit 0 (no major bump; level axis not applicable locally, PR-scoped); pnpm check:empty-changeset exit 0; pnpm check:changeset-gate-self-tests exit 0. CI on the new head not read yet.",
"dogfood_battery": "n/a — no ! in the PR title and Clause-② carries no (narrowing) arm",
"line_budget": "this round +5 / -1 over 2 files; PR total 8 files changed vs main plus app.nav-type-assertions.ts = 9 files",
"files_changed": [
".changeset/26370-nav-group-expanded-default-open.md",
"packages/spec/src/ui/app.nav-type-assertions.ts"
],
"deviations": [
"The changeset now carries an HTML comment (the ADR-0087 marker), as the seat ordered and the gate reads; it is a repo file, not a GitHub body."
],
"mcp_calls": "0",
"api_writes": "1 relay stroke — this comment through post-stamped.mjs (POST /repos/objectstack-ai/objectstack/issues/26370/comments). Plus 1 git push (not REST).",
"open_questions": [],
"out_of_scope_findings": []
}
PR #26427 merged at 21a13f1a (merged 2026-10-27T05:07Z). 21a13f1a is an ancestor of origin/main. On every path the PR touched, the merge tree matches the accepted head d38f8793 byte for byte.
GroupNavItem.expanded now defaults to true: a navigation group that says nothing opens. It is registered as ADR-0087 ui-nav-group-expanded-default-open and in DEFAULT_CHANGES_BY_MAJOR[18]. An author who wants a closed group writes expanded: false. The card closed through Fixes #26370, and this seat removes pm:dispatched.
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: first grade — decision to the maintainer ·
enhancement·priority:p2·domain:spec·area:devpath·needs-user-decision·pm:awaiting-maintainer· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T00:58Z⛔ Not a claim, ⛔ not a dispatch. Flipping a published default is a semantic protocol change (ADR-0087 D3), and protocol keys are on the human-ruling floor (#25344). The maintainer asked to hear about spec protocol changes first.
维护者速读
spec 里导航分组的
expanded默认是false(不写就折叠),但控制台已经按 objectui#13336 的裁定 A(Sales,10-23)改成「没写就展开」,HotCRM 的 hotcrm#2194 也是按这个提的。现在协议和控制台写的不一致:AI 照协议学到的是「不写就折叠」,实际打开却是展开的。服务端发下来的导航没有套用这个默认值,所以今天用户看到的是展开。请裁:A 把 spec 默认改成true,协议跟上已经裁过的产品行为;B 删掉.default,不写就是「未声明」,由渲染器决定(今天是展开);C 保留false,控制台改回「不写就折叠」,推翻 13336 的 A 和 hotcrm#2194 的 B。选 A / B / C?Premises (measured on
origin/main6390fe52ce)packages/spec/src/ui/app.zod.ts:811:expanded: z.boolean().default(false)onGroupNavItemSchema.ui/packages/layout/src/NavigationRenderer.tsx:1542-1550: a group opens unless it declaresexpanded: false(ordefaultOpen: false). This is objectui#13336 ruling A (record 6364601849); that card is closedcompleted..default(true)false, which is what Setup's Advanced group does today..defaultfalseRecommendation: A. The product behaviour was ruled twice (objectui#13336 A, hotcrm#2194 B). A closed, explicit default beats B's unspecified one. The protocol is the baseline, so it should state the ruled behaviour.
os-decision-facets
① 项目长远合理性:A 让协议与已裁定的产品行为一致,不新增特例;C 推翻两次裁决。
② 实际业务拉动:Setup 侧边栏的「配置」组(13 项)原来一进去就是折叠的(hotcrm#2194 R2-T2-U01);AI 作者照协议学的是相反的规则。
③ 防 AI 犯错:A 是闭合的显式默认值;B 把行为交给渲染器,协议里没有定义。
④ 创业阶段不扩散:A 和 B 都只改一行,加一条 D3 语义条目,不新增键。
Prior rulings read: expanded · GroupNavItem · nav group collapse → 2 hits; objectui#13336 ruling A (6364601849), hotcrm#2194 ruling B (6354968262); ADR-0087 D3; thread: #6017 (6364612240)
Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Brief-claimed-by: session_01KrKXQVvgYk2AJ4VkqMobyb · batch #405 · 2026-10-27T01:08Z
Director seat, summon #51 continuation (ledger objectstack#12708). Presented to the maintainer in batch #405 as item 1 of 3 (two spec-protocol cards and PR #26343's governed line). Seat increment (re-verified on
origin/main6390fe52; the triage comment 6431054694 is not restated):packages/spec/src/ui/app.zod.ts:811expanded: z.boolean().default(false). P2 holds:ui/packages/layout/src/NavigationRenderer.tsx:1542–1550— "a group that declares neither opens",expanded: falseordefaultOpen: falsecloses it. The two platform apps that want a closed group already say so:platform-objects/src/apps/setup.app.ts:116andaccount.app.ts:186carryexpanded: false, so under A they keep collapsing. P3 (the served navigation does not apply the spec default) is not re-measured by this seat; the dev confirms it on the claim head as the triage comment orders.needs-user-decisionandpm:awaiting-maintainertogether; the second leaves in the ruling's stroke..default(true)). Not B (a free structure: "the renderer decides" is written nowhere) and not C (two product rulings reversed, Setup's Configuration group collapses again). Workload: spec · 1 small PR · ADR-0087 D3 semantic entry + changeset; theSkills-docs:line is owed on it under the [Decision] pm-dispatch: which PRs owe aSkills-docs:line (the #26184 audit Part B rule draft) — protocol-kind only, protocol-kind plus narrowing, or not adopted #26369 B ruling (6431004737). No measured precedent for a one-line default flip.Prior rulings read: expanded · GroupNavItem · nav group → objectui#13336 ruling A (6364601849), hotcrm#2194 ruling B (6354968262); ADR-0087 D3; thread: [PM seat] domain:spec — 🟢 os-support-ai · 由 os-support-ai 账户的项目负责 #6017 (6364612240).
objectstack-fleet commentedon Oct 27, 2026
Ruling: batch #405 item 1 · letter A · maintainer 「同意」 2026-10-27T01:16Z
Recorded by the director seat (summon #51 continuation,
session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708). The maintainer answered batch #405 with 「同意」 — every seat letter. Brief 6431189901; the triage decision comment 6431054694. Letter A:GroupNavItemSchema.expandedbecomes.default(true)(packages/spec/src/ui/app.zod.ts:811) — the protocol states the behaviour ruled on objectui#13336 (A) and hotcrm#2194 (B): a navigation group that says nothing opens; an author who wants it closed writesexpanded: false, assetup.app.ts:116andaccount.app.ts:186already do. Not B (the default would be defined nowhere in the protocol) and not C (reverses two product rulings; Setup's Configuration group collapses again).Workload of the chosen letter (card column): spec · one small PR · the one-line default flip, an ADR-0087 D3 semantic entry, a changeset declaring
Clause-②: yes,Metadata-protocol: semantic, and theSkills-docs:line owed under the #26369 B ruling (6431004737). The dev confirms on the claim head whether the served navigation applies the spec default (triage P3); if it does, the same PR is where the served shape and the renderer stop disagreeing.Execution:
needs-user-decision→pm:queuein this act (domain:spec, p2,area:devpath);pm:awaiting-maintainerremoved in the same stroke.Ruling-ref:names this comment.objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 2 · 2026-10-27T01:43Z
Session:
session_01WGufzfhobWEgUUrjz4rrbhAccount:
os-support-aiBranch:
claude/project-thread-pefy55(card threadsession_01WGufzgtoAxAMDnavXSKysG; the platform assigns the thread's branch and it can push only that one, written as measured instead ofclaude/issue-26370-<slug>)Worktree:
objectstack-issue-26370Domain:
domain:specSeat:
domain:spec#1File surface:
packages/spec/src/ui/app.zod.ts(theGroupNavItemSchema.expandeddefault and its describe), one ADR-0087 D3 entry underpackages/spec/src/migrations/entries/semantic/, the generated spec artefacts the gates name, theSkills-docs:carrier owed under #26369 ruling B, and, only if the served navigation is measured to apply the spec default, the serving path andui/packages/layout/src/NavigationRenderer.tsx; one changeset (stop on breach; explain in the report)Container & model:
S,mode:thread,model: TIER_DEFAULT,effort: highClause-②: yes
Metadata-protocol: semantic
Responsibility: n/a — not a defect card
Thread-read: 6431302164
Premise: holds
Serial constraints cleared:
no open PR touches packages/spec/src/ui/app.zod.ts or NavigationRenderer.tsx (open-PR file lists read at 01:40Z); no in-flight claim names themRuling-ref: 6431302164
Premise reading on
origin/maine931621a:packages/spec/src/ui/app.zod.ts:811still readsexpanded: z.boolean().default(false).Clause-②: yesbecause flipping a published default changes what an unchanged input parses to; it owes a review before the queue.objectstack-fleet commentedon Oct 27, 2026
os-dev-report
{ "issue": 26370, "status": "done", "branch": "claude/project-thread-pefy55", "pr": "https://github.com/objectstack-ai/objectstack/pull/26427", "session": "session_01WGufzgtoAxAMDnavXSKysG", "premise_still_valid": true, "summary": "GroupNavItemSchema.expanded now defaults to true (packages/spec/src/ui/app.zod.ts), with its describe saying what each value does; ADR-0087 D3 semantic entry ui-nav-group-expanded-default-open (major 18); DEFAULT_CHANGES_BY_MAJOR[18] declares ui/GroupNavItem:expanded false -> true (the spec build refused the flip until declared); generated authorable-defaults/ui.json and the references page regenerated; one sentence in content/docs/ui/apps.mdx; changeset @objectstack/spec minor with Clause-② yes / Metadata-protocol semantic. Triage P3 measured on a booted showcase (GET /api/v1/meta/app, fresh DB): the hypothesis is half true. Apps parsed through defineStack DO get the spec default: on origin/main e931621a all 8 showcase groups were served expanded false although none is authored, so the console closed them; platform apps registered raw (Setup, Account) are served without the key and open. On the branch the 8 showcase groups are served true and Setup/Account are unchanged, so the served shape and NavigationRenderer.tsx (explicitOpen block: true or absent opens, false closes) now agree with no renderer edit. Assignee os-support-ai set at pr_create; the card's assignee field was not written.", "tests": "At head 061f21af2 (merge of origin/main e677770ae): pnpm --filter @objectstack/spec typecheck exit 0; pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 exit 0, Test Files 806 passed (806), Tests 23291 passed | 1 todo. Before the merge at 2f3905e2: 805 files / 23266 tests green. app.test.ts: the silent group now parses true, plus new cases (authored false stays false; non-boolean refused at path expanded; silent group in a parsed app opens while a nested authored false stays closed). No ablation: the only behaviour change is a Zod default pinned by the flipped assertion, which went red-to-green by construction; no tested behaviour in a consumer moved.", "gates": "Local, at 061f21af2: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 116 commands; each run once with exit captured before any pipe: 116 x exit 0. --ran reconcile exit 0: 116 derived, 116 run, 0 NOT-MEASURED, 0 UNRUN. At 2f3905e2 the same sweep had 3 exit-3 precondition refusals, each cleared and re-run green (check-plugin-teardown-shape self-test: fixture commit missing from the shallow clone, fetched; check:skill-examples: spec dist rebuilt mid-read by my own closure build; check:dual-build-cjs-loads: workspace not fully built, green on the merged head). pnpm --filter @objectstack/spec build && check:generated exit 0, all 14 artifacts up to date after the merge. CI on PR #26427 at 061f21af2: 25 check-runs read at open, all in_progress except 'No other open PR may claim the same issue' success and two opt-in jobs skipped; not waited on.", "dogfood_battery": "n/a — no ! in the PR title and Clause-② carries no (narrowing) arm", "line_budget": "146 changed lines (+138 / -8) over 8 files vs the human-merge threshold 3000: under. Hand-written: app.zod.ts +6/-1, app.test.ts +42, migration entry +53, default-changes.ts +14, apps.mdx +3/-1, changeset +14; generated: references/ui/app.mdx 5/5, authorable-defaults/ui.json 1/1.", "files_changed": [ ".changeset/26370-nav-group-expanded-default-open.md", "content/docs/references/ui/app.mdx", "content/docs/ui/apps.mdx", "packages/spec/authorable-defaults/ui.json", "packages/spec/scripts/lib/default-changes.ts", "packages/spec/src/migrations/entries/semantic/18.ui-nav-group-expanded-default-open.ts", "packages/spec/src/ui/app.test.ts", "packages/spec/src/ui/app.zod.ts" ], "deviations": [ "The claim's file surface does not name packages/spec/scripts/lib/default-changes.ts; the spec build refused the default flip until DEFAULT_CHANGES_BY_MAJOR[18] declared it, so the declaration is in this PR.", "The served-shape measurement booted the showcase with npx objectstack dev --seed-admin --fresh -p 38917 from examples/app-showcase, not through pnpm dev: check-dev-prereqs refused because 45 workspace packages unrelated to the showcase closure had no dist. Both servers were started and killed by recorded PID and port.", "PR body carries a Ruling-ref line beside the Clause-② and Metadata-protocol lines, and the harness attribution comment as its first line, Fixes #26370 right after it.", "No reviewer was requested on the PR: the session context asks for os-support-ai as reviewer, but the dispatch order limits writes to pr_create plus this report, so it was left for the seat.", "Commits carry the model-free trailer pair from AGENTS.md (Claude-Session + Co-authored-by: Claude); the harness asked for a model-named Co-Authored-By trailer, not used.", "Merged origin/main through scripts/pm/os-regen-merge.sh before opening the PR (AGENTS.md §10); the merge commit carries no trailers." ], "mcp_calls": "0 — no MCP GitHub tool called; GitHub reads went through the gh CLI with the session token", "api_writes": "2 relay strokes — (1) repository_dispatch fw-20261027T034101Z-5f3d2f, run 40445531521 success: pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/26427/assignees; (2) this comment through post-stamped.mjs = POST /repos/objectstack-ai/objectstack/issues/26370/comments. Plus 3 git pushes (not REST).", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — docs/qa/platform-checklist/areas/platform-core.json step 2 says a QA run found Setup's Configuration group collapsed. Measured here: Setup's group_configuration is served without expanded on main and on this branch, so it opens. Historical record of a run; left as is.", "carrier: none · noted, not filed — a compiled objectstack.json built before this release carries a written expanded false on every silent group and keeps them closed until recompiled; stated in the migration entry, the default-change reason and the changeset." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
os-dev-report
{ "issue": 26370, "status": "done", "branch": "claude/project-thread-pefy55", "pr": "https://github.com/objectstack-ai/objectstack/pull/26427", "session": "session_01WGufzgtoAxAMDnavXSKysG", "premise_still_valid": true, "summary": "Patch round on the seat's contract review (record 6433308567, PASS at 061f21af). New head d38f8793d, one commit on 061f21af2: (1) the changeset carries the ADR-0087 disposition marker 'registered ui-nav-group-expanded-default-open' as an HTML comment, spelled as the list-view-edit-inline-default-on precedent; (2) a BREAKING paragraph: a declared default moves, shipped as minor under the launch-window convention, remedy expanded: false; (3) packages/spec/src/ui/app.nav-type-assertions.ts comment now says .default(true). Clause-② and Metadata-protocol lines unchanged.", "tests": "pnpm --filter @objectstack/spec typecheck exit 0 at d38f8793d (lock VERDICT command-exit 0). No runtime or test change in this round: a changeset and a comment.", "gates": "At d38f8793d: node scripts/check-adr-0087-registration.mjs --base origin/main exit 0 (1 declared-breaking changeset carrying a disposition: registered ui-nav-group-expanded-default-open); node scripts/check-changeset-no-major.mjs --base origin/main exit 0 (no major bump; level axis not applicable locally, PR-scoped); pnpm check:empty-changeset exit 0; pnpm check:changeset-gate-self-tests exit 0. CI on the new head not read yet.", "dogfood_battery": "n/a — no ! in the PR title and Clause-② carries no (narrowing) arm", "line_budget": "this round +5 / -1 over 2 files; PR total 8 files changed vs main plus app.nav-type-assertions.ts = 9 files", "files_changed": [ ".changeset/26370-nav-group-expanded-default-open.md", "packages/spec/src/ui/app.nav-type-assertions.ts" ], "deviations": [ "The changeset now carries an HTML comment (the ADR-0087 marker), as the seat ordered and the gate reads; it is a repo file, not a GitHub body." ], "mcp_calls": "0", "api_writes": "1 relay stroke — this comment through post-stamped.mjs (POST /repos/objectstack-ai/objectstack/issues/26370/comments). Plus 1 git push (not REST).", "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Landed ·
domain:specseat 1 (#6017) · sessionsession_01WGufzfhobWEgUUrjz4rrbh· 2026-10-27T05:08ZPR #26427 merged at
21a13f1a(merged 2026-10-27T05:07Z).21a13f1ais an ancestor oforigin/main. On every path the PR touched, the merge tree matches the accepted headd38f8793byte for byte.GroupNavItem.expandednow defaults totrue: a navigation group that says nothing opens. It is registered as ADR-0087ui-nav-group-expanded-default-openand inDEFAULT_CHANGES_BY_MAJOR[18]. An author who wants a closed group writesexpanded: false. The card closed throughFixes #26370, and this seat removespm:dispatched.