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(shared): normalizeVisibleWhen and VISIBILITY_ALIAS_KEYS stay published after #23543 F4 with no caller in either repo — a fold for two keys the spec now refuses, still exported from @objectstack/spec/shared #23877
Filing gate ①: a published surface the landed work leaves with zero pull. reach:@objectstack/spec/shared's public exports (packages/spec/api-surface/shared.json:99, :119). An author or AI reading the package's exports finds a helper that folds visibleOn / visibility onto visibleWhen, for two keys every parsing door now refuses.
Filed bydomain:spec seat 1 (#6017) · os-elon-musk · session session_01HjR8RUwTPQ3TgbfKihmxp9, from the F4 dev report on #23543 (6210819298, open question 1, recommendation A) at the landing of PR #23836 (105902f10a). ⛔ Not a claim; lane and grade are triage's.
What is published
packages/spec/src/shared/visibility.ts on origin/main:
export const VISIBILITY_ALIAS_KEYS = ['visibleOn', 'visibility'] as const;, docblocked "The retired alias keys of the canonical visibleWhen (refused by the schemas since 18)".
objectstack (git grep over packages, apps and examples, CHANGELOGs and dist excluded): no call site. Three comments name normalizeVisibleWhen as a precedent: kernel/public-auth-features.ts:321, ui/view.zod.ts:3951 (the groups → sections fold), and the D3 entry below.
objectuimain8614705c18: one comment (packages/core/src/utils/normalize-list-view.ts:374) and no call. The F4 dev measured the same at 63d00da3de and at the pin daeb77fc84.
Why it is a card
Axis ③: a published fold for keys the spec refuses invites exactly the consumer-side tolerance the F4 ruling rules out. A renderer that calls it re-accepts visibleOn where every parsing door refuses it.
Axis ④: zero-pull published surface retires, with no sunk-cost exemption.
The D3 entry 18.visibility-strict-options-unexported.ts (packages/spec/src/migrations/entries/semantic/) says the visibility contract is still published "together with normalizeVisibleWhen and VISIBILITY_ALIAS_KEYS, which stay exported." It becomes false the moment they retire, so it moves in the same change.
Reader who acts
The domain:spec seat: retire both exports from @objectstack/spec/shared as one change. That means:
the export removal, with the api-surface and export-origin baselines regenerated;
a D3 entry for the removal, and the existing entry's replacement text rewritten;
the three precedent comments re-worded so none names a removed symbol;
a minor changeset with Clause-②: yes (narrowing) and the contract-tier review the narrowing owes.
The stored-row rehydration conversions (view-visibleOn-to-visibleWhen, page-component-visibility-to-visibleWhen) are a different mechanism and stay as they are.
Dedupe
MCP search_issues on this repo: normalizeVisibleWhen VISIBILITY_ALIAS_KEYS export retire shared visibility → 2 hits, both closed and about other questions: #7889 (an alias-integrity blind spot) and #3855 (retiring the aliases through ADR-0087, done by F4). None is this.
Triage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
Re-read on origin/maind5666be876:packages/spec/src/shared/visibility.ts:33 still exports VISIBILITY_ALIAS_KEYS, and :50 exports normalizeVisibleWhen.
Why p1 + target:v18: removing a public export of @objectstack/spec/shared changes the declare surface. It is the protocol-first class, and it is cheapest before 18.0 GA.
For the claimant: the API-surface baseline (packages/spec/api-surface/shared.json) moves with it. The three comments that cite normalizeVisibleWhen as a precedent are re-worded, not left dangling. objectui calls neither export (normalize-list-view.ts:374 is a comment), so no objectui card is owed.
Claim: PM loop round 14 (batch 2) · 2026-10-16T16:29Z · retire the two zero-pull exports normalizeVisibleWhen and VISIBILITY_ALIAS_KEYS from @objectstack/spec/shared as one change, with the D3 text that names them. One PR, Fixes #23877. The stored-row rehydration conversions stay as they are.
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-23877-visibility-fold-unexported
Worktree: objectstack-issue-23877 (in the cloud session's container)
Domain: domain:spec
Seat: domain:spec#1 (seat post #6017)
File surface (paths on origin/main2e1562091c or later; stop on a breach and explain it in the report):
packages/spec/src/shared/visibility.ts: the two exports leave, with the module header and docblocks that describe them.
packages/spec/api-surface/shared.json and packages/spec/export-origins/shared.json, regenerated by their tooling.
A new D3 entry under packages/spec/src/migrations/entries/semantic/ for the removal, and the replacement text of 18.visibility-strict-options-unexported.ts, which says the two "stay exported".
The comments that name a removed symbol, re-worded: packages/spec/src/kernel/public-auth-features.ts (about :321), packages/spec/src/ui/view.zod.ts (about :3960) and any other the dev measures.
One BREAKING minor changeset for @objectstack/spec, Clause-②: yes (narrowing).
⛔ Not the conversions view-visibleOn-to-visibleWhen and page-component-visibility-to-visibleWhen, not any schema's accept set, and no objectui file (triage 6215941821: objectui calls neither export).
Container & model: S, mode:cloud (the maintainer's word in this session's chat: 「batch 调到 5, 可以开云卡」, now 「并发降到2」), model: default tier (dispatch-gates --tier: a narrowing stays in its lane). The diff touches non-test packages/spec/src/**, so the seat runs a CONTRACT_REVIEW_TIER review before the queue.
Clause-②: yes
Responsibility: n/a — a zero-pull published surface the F4 landing (PR feat(spec)!: retire the view form's visibleOn and the page component's visibility as keys; their ADR-0089 renames leave the load path (F4 of #23543) #23836) left behind
Thread-read: 6215941821
Ruling-ref: 6182001882 (item 4, F4: the two keys retired; this card retires the fold that served them)
Serial constraints cleared:
The file lists of all open PRs were read in this act: none touches shared/visibility.ts, the two shared baselines, 18.visibility-strict-options-unexported.ts, public-auth-features.ts or ui/view.zod.ts. No open claim names these files.
{
"issue": 23877,
"status": "done",
"branch": "claude/issue-23877-visibility-fold-unexported",
"pr": "https://github.com/objectstack-ai/objectstack/pull/24004",
"session": "session_01T2YHPgcuCRcypzyAuxvAap",
"premise_still_valid": true,
"summary": "normalizeVisibleWhen and VISIBILITY_ALIAS_KEYS leave @objectstack/spec/shared. shared/visibility.ts held only them (plus the private WithVisibilityAliases type and their docblocks), so the file is deleted and its barrel line goes with it. The api-surface and export-origins shared shards were regenerated (each loses exactly 2 rows); api-surface-signatures, declaration-map and authorable-surface did not move. The new D3 entry visibility-alias-fold-unexported was added in the shape of visibility-strict-options-unexported, and that entry's 'stay exported' replacement text was rewritten. The precedent comments in public-auth-features.ts and view.zod.ts now name the mechanism. An export-absence pin was added, plus a BREAKING minor changeset, Clause-②: yes (narrowing), marker registered visibility-alias-fold-unexported. Zero pull re-measured: objectstack @ 2e1562091c has no call site; objectui @ pin f8267df93a has 1 comment hit and no call (control visibleWhen hits).",
"tests": "pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 at 9d59f55e (merged origin/main): 755 files, 22018 passed, 1 todo, VERDICT command-exit 0. The pre-merge run at 1547c29e: 750 files, 21981 passed. spec typecheck: exit 0 at both. Ablation (fix committed; scripts/ablation-replace.mjs with a trap): VISIBILITY_ALIAS_KEYS re-exported from shared/index.ts. Anchor 1->0, blob e2d66ff65e0b->eee4d0b060de; 'no longer exports VISIBILITY_ALIAS_KEYS' went red (expected true to be false, 1 failed | 2 passed). Restored: blob == HEAD and git diff HEAD empty. The first ablation attempt was a no-op (the replacement contained the anchor; the tool refused before running). No build is needed: the pin imports ./index from src. HEAD 5626f603 adds only 2 changeset lines over 9d59f55e.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack derived 88 families on 9d59f55e. All were run with exit codes captured before any pipe: 87 exit 0, 1 exit 3 NOT MEASURED (node scripts/check-plugin-teardown-shape.mjs --self-test: its fixture commit is beyond the shallow clone). --ran reconciled: 88 derived, 87 run, 1 NOT-MEASURED (derived from a recorded exit 3), 0 UNRUN. On 5626f603 (changeset text only), re-run with exit 0: check-adr-0087-registration ([BREAKING+bang+clause-②-narrowing] registered visibility-alias-fold-unexported, new here), check-changeset-no-major, check-empty-changeset, check:doc-authoring, check:issue-citations, check:nul-bytes, check:pm-changeset-deadline-census, check:objectui-changeset, check:published-files. Off-list: check-platform-checklist --changed-from origin/main reported OK (24 anchors, 0 lost); check:dev-prereqs exit 0; check:skill-frame-freshness exit 0; spec check:generated all 14 up to date after the merge. CI check-runs on PR #24004: in_progress at report time, not awaited.",
"mcp_calls": "2: mcp__github__issue_read (get), mcp__github__issue_read (get_comments). Both are reads, no write tool.",
"api_writes": "2 relay strokes (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/24004/assignees; (2) comment = POST /repos/objectstack-ai/objectstack/issues/23877/comments (this report). No label write: the diff publishes, so skip-changeset does not apply.",
"line_budget": 193,
"files_changed": [
".changeset/23877-visibility-alias-fold-unexported.md",
"packages/spec/api-surface/shared.json",
"packages/spec/export-origins/shared.json",
"packages/spec/src/data/field.zod.ts",
"packages/spec/src/kernel/public-auth-features.ts",
"packages/spec/src/migrations/entries/semantic/18.visibility-alias-fold-unexported.ts",
"packages/spec/src/migrations/entries/semantic/18.visibility-strict-options-unexported.ts",
"packages/spec/src/shared/index.ts",
"packages/spec/src/shared/visibility-fold-unexported.test.ts",
"packages/spec/src/shared/visibility.ts (deleted)",
"packages/spec/src/ui/view.zod.ts"
],
"deviations": [
"Surface: packages/spec/src/shared/index.ts loses its export * from './visibility' line. The claim lists only visibility.ts, but once the two exports and their docblocks leave, the module is empty, and an empty module behind an export * is not a module (TS2306), so the file and its barrel line go together.",
"Surface: packages/spec/src/data/field.zod.ts:10, one comment line re-pointed from shared/visibility.ts (now deleted) to shared/visibility-strict-options.ts, the real runtime import of editability-boundary. It was already stale. Comment only.",
"The shared checkout had the branch checked out at dispatch. I detached it there, deleted the local branch (it equalled origin/main 2e1562091c, nothing lost) and recreated it in the worktree ../objectstack-issue-23877 per the worktree-first rule.",
"PR body ends with the AGENTS.md session-URL footer only. The harness's extra trailing attribution lines were dropped, because AGENTS.md prescribes one footer line and takes precedence.",
"Local history: an attempted git revert of an in-place F4 changeset edit did not land (the amend rewrote the edit's message instead). This was caught before any push: I soft-reset to the pushed 9d59f55e, restored the file from it, and recommitted. Nothing wrong reached the remote."
],
"open_questions": [
{
"question": "The pending F4 changeset .changeset/23543-f4-visibility-alias-keys-retired.md:42 (unreleased, not in pre.json) says normalizeVisibleWhen and VISIBILITY_ALIAS_KEYS 'stay exported', which this PR makes false for the same release. Should it be corrected in place?",
"options": [
"A: Leave it as authored. This PR's own changeset says it supersedes the sentence (shipped). check-empty-changeset stays green.",
"B: Correct the sentence in place on this PR. check-empty-changeset goes red by design (a deliberate correction of another PR's release note) until a person confirms it, and the file is outside the claim's surface."
],
"recommendation": "A is what shipped, settled on axis ④ (no new red needing a human for a one-sentence text issue) and the file-surface rule. B is the cleaner release note on axis ②. If the seat prefers B, the rewrite is: drop the first clause, and say the two leave @objectstack/spec/shared in a separate change of the same release (D3 entry visibility-alias-fold-unexported)."
},
{
"question": "Whether to delete shared/visibility.ts or keep its ADR-0089 header as a doc-only module.",
"options": [
"A: Delete it and its barrel line (done).",
"B: Keep the header with export {}."
],
"recommendation": "A. The header described the two removed exports; the ADR-0089 key table lives in the ADR and in every schema's visibleWhen describe. An empty module kept for prose is a workaround (axis ②)."
}
],
"out_of_scope_findings": [
"carrier: none · noted in PR Acceptance notes only: packages/spec/scripts/build-skill-references.ts:274 mentions visibility.ts in a historical comment. It names no symbol and needs no action."
]
}
Patch round → PR #24004 · domain:spec seat 1 · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T18:29Z · on the dev report 6221253902 and the contract review PASS 6222103558 (head 5626f60305), same claim 6220012215, the dev session reused.
Changeset text only. The PR's own changeset carries two imprecise sentences that would ship in the 18 CHANGELOG (the review's escalation 2):
"since 18 every schema that carries it refuses visibleOn and visibility by name": automation-api.zod.ts:231's screenFieldSpecShape is a plain z.object that never had the aliases, so it strips them rather than refusing. The sentence becomes "every schema that had the two keys refuses them by name".
"a plain-JS import resolves to undefined": true for a CommonJS require. An ESM named import of a missing export fails at link time. The sentence says both.
A .changeset edit is a prose face, so the PASS record keeps governing the moved head.
The report's open questions, the seat's calls: (1) F4's still-unreleased "stay exported" sentence: A. Both changesets land in the same @objectstack/spec version block, and this PR's changeset says it supersedes that line. (2) Delete shared/visibility.ts and its barrel line: A.
{
"issue": 23877,
"status": "done",
"round": "patch (seat contract review 6222103558, escalation 2)",
"branch": "claude/issue-23877-visibility-fold-unexported",
"pr": "https://github.com/objectstack-ai/objectstack/pull/24004",
"session": "session_01T2YHPgcuCRcypzyAuxvAap",
"head": "ca04d478",
"previous_head": "5626f603",
"files_changed": [
".changeset/23877-visibility-alias-fold-unexported.md"
],
"line_budget_delta": 4,
"sentences_now": {
"line_9": "Use `visibleWhen` directly instead: it is the one conditional-visibility key, and since 18 every schema that had the two old keys (the form field, the form section and the page component) refuses them by name.",
"line_22": "**What an author who still imports them sees:** `tsc` fails with TS2305 (`Module '\"@objectstack/spec/shared\"' has no exported member …`); an ESM named import fails at link time with a `SyntaxError` (the module does not provide an export of that name); a CommonJS `require` reads the member as `undefined`."
},
"gates": "on ca04d478, exit codes captured before any pipe: node scripts/check-empty-changeset.mjs --base origin/main :: exit 0; node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0; node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0 (1 declared-breaking changeset, disposition carried); pnpm check:doc-authoring :: exit 0. The first attempt at the last two exited 1 and 3 on PREREQUISITE NOT MET (the fresh worktree had no pnpm install). They were re-run after the install; those first results were not measurements.",
"deviations": [
"The worktree was recreated from the pushed branch (it had been removed after the first round), then pnpm install. Push was a fast-forward 5626f603..ca04d478, no history rewrite. No PR body edit, no ready, no queue, F4 changeset untouched."
],
"mcp_calls": "0 this round",
"api_writes": "1 relay stroke: comment = POST /repos/objectstack-ai/objectstack/issues/23877/comments (this report)"
}
ACCEPT → PR #24004 comment 6222953569 · domain:spec seat 1 · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T19:19Z · contract review (CONTRACT_REVIEW_TIER) PASS 6222103558, patch round 6222126702 (changeset text only); the head ca04d47854 is green and goes to the queue in this act.
normalizeVisibleWhen and VISIBILITY_ALIAS_KEYS leave @objectstack/spec/shared, with a D3 entry and an export-absence pin. The cloud dev session is archived at this ACCEPT.
the 10 surviving files' blobs at 2c702fd9f6 equal the reviewed head ca04d47854 (ACCEPT 6222953569, contract review PASS 6222103558); packages/spec/src/shared/visibility.ts is absent at both, as the PR deleted it
queue branch
no gh-readonly-queue/main/pr-24004-* ref remains
mis-close scan
Fixes #23877 is the body's only closing keyword; this card closed by that PR, as intended, and nothing else did
pm:dispatched is cleared in this act. The cloud dev session was archived at the seat's ACCEPT. No objectui card is owed: objectui calls neither export (triage 6215941821, re-measured at the pin f8267df93a).
Activity
objectstack-fleet commentedon Oct 16, 2026
Triage: first grade,
enhancement·priority:p1·target:v18·domain:spec·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-16T12:54ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
origin/maind5666be876:packages/spec/src/shared/visibility.ts:33still exportsVISIBILITY_ALIAS_KEYS, and:50exportsnormalizeVisibleWhen.target:v18: removing a public export of@objectstack/spec/sharedchanges the declare surface. It is the protocol-first class, and it is cheapest before 18.0 GA.packages/spec/api-surface/shared.json) moves with it. The three comments that citenormalizeVisibleWhenas a precedent are re-worded, not left dangling. objectui calls neither export (normalize-list-view.ts:374is a comment), so no objectui card is owed.objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 14 (
batch 2) · 2026-10-16T16:29Z · retire the two zero-pull exportsnormalizeVisibleWhenandVISIBILITY_ALIAS_KEYSfrom@objectstack/spec/sharedas one change, with the D3 text that names them. One PR,Fixes #23877. The stored-row rehydration conversions stay as they are.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 asGET /useranswers it; this card's assignee)Branch:
claude/issue-23877-visibility-fold-unexportedWorktree:
objectstack-issue-23877(in the cloud session's container)Domain:
domain:specSeat:
domain:spec#1(seat post #6017)File surface (paths on
origin/main2e1562091cor later; stop on a breach and explain it in the report):packages/spec/src/shared/visibility.ts: the two exports leave, with the module header and docblocks that describe them.packages/spec/api-surface/shared.jsonandpackages/spec/export-origins/shared.json, regenerated by their tooling.packages/spec/src/migrations/entries/semantic/for the removal, and thereplacementtext of18.visibility-strict-options-unexported.ts, which says the two "stay exported".packages/spec/src/kernel/public-auth-features.ts(about:321),packages/spec/src/ui/view.zod.ts(about:3960) and any other the dev measures.minorchangeset for@objectstack/spec,Clause-②: yes (narrowing).view-visibleOn-to-visibleWhenandpage-component-visibility-to-visibleWhen, not any schema's accept set, and no objectui file (triage6215941821: objectui calls neither export).Container & model:
S,mode:cloud(the maintainer's word in this session's chat: 「batch 调到 5, 可以开云卡」, now 「并发降到2」),model: default tier(dispatch-gates --tier: a narrowing stays in its lane). The diff touches non-testpackages/spec/src/**, so the seat runs aCONTRACT_REVIEW_TIERreview before the queue.Clause-②: yes
Responsibility: n/a — a zero-pull published surface the F4 landing (PR feat(spec)!: retire the view form's visibleOn and the page component's visibility as keys; their ADR-0089 renames leave the load path (F4 of #23543) #23836) left behind
Thread-read: 6215941821
Ruling-ref: 6182001882 (item 4, F4: the two keys retired; this card retires the fold that served them)
Serial constraints cleared:
batch 2: this seat's other dev in flight is spec(security):PermissionSetSchema.managedByis a dead authored key (ledgerdead, 2026-10-11), and PR #23870's new help text and the option labels promise upgrade behaviour from it — retire the key (enforce-or-remove) #23891 (claim6217680203). spec(conversions): eight ADR-0087 D2 conversions stay on the 18 load path after #23487 — five families each need a ruling before they can retire #23543 F5-http's PR A feat(spec)!: reserve the retired callout node types http_request, http_call and webhook; flow-node-http-callout-rename leaves the load path (F5-http of #23543) #23954 is ACCEPTed and in the queue; its dev session is archived.shared/visibility.ts, the twosharedbaselines,18.visibility-strict-options-unexported.ts,public-auth-features.tsorui/view.zod.ts. No open claim names these files.objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 23877, "status": "done", "branch": "claude/issue-23877-visibility-fold-unexported", "pr": "https://github.com/objectstack-ai/objectstack/pull/24004", "session": "session_01T2YHPgcuCRcypzyAuxvAap", "premise_still_valid": true, "summary": "normalizeVisibleWhen and VISIBILITY_ALIAS_KEYS leave @objectstack/spec/shared. shared/visibility.ts held only them (plus the private WithVisibilityAliases type and their docblocks), so the file is deleted and its barrel line goes with it. The api-surface and export-origins shared shards were regenerated (each loses exactly 2 rows); api-surface-signatures, declaration-map and authorable-surface did not move. The new D3 entry visibility-alias-fold-unexported was added in the shape of visibility-strict-options-unexported, and that entry's 'stay exported' replacement text was rewritten. The precedent comments in public-auth-features.ts and view.zod.ts now name the mechanism. An export-absence pin was added, plus a BREAKING minor changeset, Clause-②: yes (narrowing), marker registered visibility-alias-fold-unexported. Zero pull re-measured: objectstack @ 2e1562091c has no call site; objectui @ pin f8267df93a has 1 comment hit and no call (control visibleWhen hits).", "tests": "pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 at 9d59f55e (merged origin/main): 755 files, 22018 passed, 1 todo, VERDICT command-exit 0. The pre-merge run at 1547c29e: 750 files, 21981 passed. spec typecheck: exit 0 at both. Ablation (fix committed; scripts/ablation-replace.mjs with a trap): VISIBILITY_ALIAS_KEYS re-exported from shared/index.ts. Anchor 1->0, blob e2d66ff65e0b->eee4d0b060de; 'no longer exports VISIBILITY_ALIAS_KEYS' went red (expected true to be false, 1 failed | 2 passed). Restored: blob == HEAD and git diff HEAD empty. The first ablation attempt was a no-op (the replacement contained the anchor; the tool refused before running). No build is needed: the pin imports ./index from src. HEAD 5626f603 adds only 2 changeset lines over 9d59f55e.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack derived 88 families on 9d59f55e. All were run with exit codes captured before any pipe: 87 exit 0, 1 exit 3 NOT MEASURED (node scripts/check-plugin-teardown-shape.mjs --self-test: its fixture commit is beyond the shallow clone). --ran reconciled: 88 derived, 87 run, 1 NOT-MEASURED (derived from a recorded exit 3), 0 UNRUN. On 5626f603 (changeset text only), re-run with exit 0: check-adr-0087-registration ([BREAKING+bang+clause-②-narrowing] registered visibility-alias-fold-unexported, new here), check-changeset-no-major, check-empty-changeset, check:doc-authoring, check:issue-citations, check:nul-bytes, check:pm-changeset-deadline-census, check:objectui-changeset, check:published-files. Off-list: check-platform-checklist --changed-from origin/main reported OK (24 anchors, 0 lost); check:dev-prereqs exit 0; check:skill-frame-freshness exit 0; spec check:generated all 14 up to date after the merge. CI check-runs on PR #24004: in_progress at report time, not awaited.", "mcp_calls": "2: mcp__github__issue_read (get), mcp__github__issue_read (get_comments). Both are reads, no write tool.", "api_writes": "2 relay strokes (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/24004/assignees; (2) comment = POST /repos/objectstack-ai/objectstack/issues/23877/comments (this report). No label write: the diff publishes, so skip-changeset does not apply.", "line_budget": 193, "files_changed": [ ".changeset/23877-visibility-alias-fold-unexported.md", "packages/spec/api-surface/shared.json", "packages/spec/export-origins/shared.json", "packages/spec/src/data/field.zod.ts", "packages/spec/src/kernel/public-auth-features.ts", "packages/spec/src/migrations/entries/semantic/18.visibility-alias-fold-unexported.ts", "packages/spec/src/migrations/entries/semantic/18.visibility-strict-options-unexported.ts", "packages/spec/src/shared/index.ts", "packages/spec/src/shared/visibility-fold-unexported.test.ts", "packages/spec/src/shared/visibility.ts (deleted)", "packages/spec/src/ui/view.zod.ts" ], "deviations": [ "Surface: packages/spec/src/shared/index.ts loses its export * from './visibility' line. The claim lists only visibility.ts, but once the two exports and their docblocks leave, the module is empty, and an empty module behind an export * is not a module (TS2306), so the file and its barrel line go together.", "Surface: packages/spec/src/data/field.zod.ts:10, one comment line re-pointed from shared/visibility.ts (now deleted) to shared/visibility-strict-options.ts, the real runtime import of editability-boundary. It was already stale. Comment only.", "The shared checkout had the branch checked out at dispatch. I detached it there, deleted the local branch (it equalled origin/main 2e1562091c, nothing lost) and recreated it in the worktree ../objectstack-issue-23877 per the worktree-first rule.", "PR body ends with the AGENTS.md session-URL footer only. The harness's extra trailing attribution lines were dropped, because AGENTS.md prescribes one footer line and takes precedence.", "Local history: an attempted git revert of an in-place F4 changeset edit did not land (the amend rewrote the edit's message instead). This was caught before any push: I soft-reset to the pushed 9d59f55e, restored the file from it, and recommitted. Nothing wrong reached the remote." ], "open_questions": [ { "question": "The pending F4 changeset .changeset/23543-f4-visibility-alias-keys-retired.md:42 (unreleased, not in pre.json) says normalizeVisibleWhen and VISIBILITY_ALIAS_KEYS 'stay exported', which this PR makes false for the same release. Should it be corrected in place?", "options": [ "A: Leave it as authored. This PR's own changeset says it supersedes the sentence (shipped). check-empty-changeset stays green.", "B: Correct the sentence in place on this PR. check-empty-changeset goes red by design (a deliberate correction of another PR's release note) until a person confirms it, and the file is outside the claim's surface." ], "recommendation": "A is what shipped, settled on axis ④ (no new red needing a human for a one-sentence text issue) and the file-surface rule. B is the cleaner release note on axis ②. If the seat prefers B, the rewrite is: drop the first clause, and say the two leave @objectstack/spec/shared in a separate change of the same release (D3 entry visibility-alias-fold-unexported)." }, { "question": "Whether to delete shared/visibility.ts or keep its ADR-0089 header as a doc-only module.", "options": [ "A: Delete it and its barrel line (done).", "B: Keep the header with export {}." ], "recommendation": "A. The header described the two removed exports; the ADR-0089 key table lives in the ADR and in every schema's visibleWhen describe. An empty module kept for prose is a workaround (axis ②)." } ], "out_of_scope_findings": [ "carrier: none · noted in PR Acceptance notes only: packages/spec/scripts/build-skill-references.ts:274 mentions visibility.ts in a historical comment. It names no symbol and needs no action." ] }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Patch round → PR #24004 ·
domain:specseat 1 · sessionsession_01HjR8RUwTPQ3TgbfKihmxp9· 2026-10-16T18:29Z · on the dev report6221253902and the contract review PASS6222103558(head5626f60305), same claim6220012215, the dev session reused.Changeset text only. The PR's own changeset carries two imprecise sentences that would ship in the 18 CHANGELOG (the review's escalation 2):
visibleOnandvisibilityby name":automation-api.zod.ts:231'sscreenFieldSpecShapeis a plainz.objectthat never had the aliases, so it strips them rather than refusing. The sentence becomes "every schema that had the two keys refuses them by name".undefined": true for a CommonJSrequire. An ESM named import of a missing export fails at link time. The sentence says both.A
.changesetedit is a prose face, so the PASS record keeps governing the moved head.The report's open questions, the seat's calls: (1) F4's still-unreleased "stay exported" sentence: A. Both changesets land in the same
@objectstack/specversion block, and this PR's changeset says it supersedes that line. (2) Deleteshared/visibility.tsand its barrel line: A.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 23877, "status": "done", "round": "patch (seat contract review 6222103558, escalation 2)", "branch": "claude/issue-23877-visibility-fold-unexported", "pr": "https://github.com/objectstack-ai/objectstack/pull/24004", "session": "session_01T2YHPgcuCRcypzyAuxvAap", "head": "ca04d478", "previous_head": "5626f603", "files_changed": [ ".changeset/23877-visibility-alias-fold-unexported.md" ], "line_budget_delta": 4, "sentences_now": { "line_9": "Use `visibleWhen` directly instead: it is the one conditional-visibility key, and since 18 every schema that had the two old keys (the form field, the form section and the page component) refuses them by name.", "line_22": "**What an author who still imports them sees:** `tsc` fails with TS2305 (`Module '\"@objectstack/spec/shared\"' has no exported member …`); an ESM named import fails at link time with a `SyntaxError` (the module does not provide an export of that name); a CommonJS `require` reads the member as `undefined`." }, "gates": "on ca04d478, exit codes captured before any pipe: node scripts/check-empty-changeset.mjs --base origin/main :: exit 0; node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0; node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0 (1 declared-breaking changeset, disposition carried); pnpm check:doc-authoring :: exit 0. The first attempt at the last two exited 1 and 3 on PREREQUISITE NOT MET (the fresh worktree had no pnpm install). They were re-run after the install; those first results were not measurements.", "deviations": [ "The worktree was recreated from the pushed branch (it had been removed after the first round), then pnpm install. Push was a fast-forward 5626f603..ca04d478, no history rewrite. No PR body edit, no ready, no queue, F4 changeset untouched." ], "mcp_calls": "0 this round", "api_writes": "1 relay stroke: comment = POST /repos/objectstack-ai/objectstack/issues/23877/comments (this report)" }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
ACCEPT → PR #24004 comment 6222953569 ·
domain:specseat 1 · sessionsession_01HjR8RUwTPQ3TgbfKihmxp9· 2026-10-16T19:19Z · contract review (CONTRACT_REVIEW_TIER) PASS6222103558, patch round6222126702(changeset text only); the headca04d47854is green and goes to the queue in this act.normalizeVisibleWhenandVISIBILITY_ALIAS_KEYSleave@objectstack/spec/shared, with a D3 entry and an export-absence pin. The cloud dev session is archived at this ACCEPT.Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Landed · PR #24004 →
2c702fd9f6(Fixes #23877,normalizeVisibleWhen/VISIBILITY_ALIAS_KEYSunexported) ·domain:specseat 1 ·os-elon-musk· sessionsession_01HjR8RUwTPQ3TgbfKihmxp9· 2026-10-16T19:53Z2c702fd9f6origin/maingit merge-base --is-ancestor 2c702fd9f6 origin/main→ exit 02c702fd9f6equal the reviewed headca04d47854(ACCEPT6222953569, contract review PASS6222103558);packages/spec/src/shared/visibility.tsis absent at both, as the PR deleted itgh-readonly-queue/main/pr-24004-*ref remainsFixes #23877is the body's only closing keyword; this card closed by that PR, as intended, and nothing else didpm:dispatchedis cleared in this act. The cloud dev session was archived at the seat's ACCEPT. No objectui card is owed: objectui calls neither export (triage6215941821, re-measured at the pinf8267df93a).Generated by Claude Code