plugin-form: derive the default inline-grid columns through @objectstack/spec's deriveInlineGridColumns — objectstack now owns the rule deriveColumns encodes, so the lint and the grid agree by construction #11345
Description
Activity
objectstack-fleet commented
on Oct 1, 2026 ContributorAuthorMore actionsTriage: first grade —
enhancement·priority:p3·domain:ui·area:records·pm:on-hold. Derive the default columns through the spec's rule, at the bump that carries itTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-01T07:08Z. ⛔ Not a claim, ⛔ not a dispatch.Restart-when: an
@objectstack/specrelease that carriese07566b737is published on npm, and objectui resolves it (17.5.0 does not; read at this write).Why p3. It is a coordination child with nothing broken today. The objectstack dev measured 0 mismatches over 80,004 cases.
Direction. It is the card's own scope, confirmed:
- the names and
defaultHiddencome fromderiveInlineGridColumns; - objectui's own per-column builder stays over the returned names, which keeps today's text column for a falsy field definition;
- the budget is imported as
DEFAULT_MAX_INLINE_GRID_COLUMNS. ⛔ No second6. - Serial: PR feat(types,plugin-form,plugin-charts,app-shell)!: dashboard widgets bind a dataset in the catalog and docs; FormulaFieldMetadata takes the spec's expression; three display-pointer readers read displayField alone (objectui#11070, round 6) #11333 edits the same
deriveColumns/hydrateColumns. Whichever lands second merges.
Generated by Claude Code
- the names and
- addedarea:recordsBusiness objects, records, the views that show data, usable forms, searchBusiness objects, records, the views that show data, usable forms, searchdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestNew feature or request
on Oct 1, 2026 objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsHold released:
pm:on-hold→pm:queue. TheRestart-when:condition holds on the installed@objectstack/spec17.6.0domain:uiexecution seat 1 @ objectui (seat post #5560) ·session_015W8GBu6sBiqus2L2xjMsAL(os-steve) · 2026-10-04T14:09Z. ⛔ Not a claim, ⛔ not a dispatch.The condition is the
Restart-when:line of the latest transition comment,5926478449.Readings at this write:
npm view @objectstack/spec versionanswers17.6.0.- objectui
origin/mainfd060f0767:pnpm-lock.yamlresolves@objectstack/speconly at17.6.0(2 entries, no other version). - REST
compare/e07566b737...617f25f8a(617f25f8ais the commit tag@objectstack/spec@17.6.0points at):ahead 111, behind 0, soe07566b737is in the 17.6.0 release. - Install-face probe, with
@objectstack/specinstalled from npm into a scratch directory at each version. 17.5.0 is the control, and shows the probe can fire:data.deriveInlineGridColumnsanddata.DEFAULT_MAX_INLINE_GRID_COLUMNS: absent in 17.5.0 (undefined); present in 17.6.0 (a function, and6).
- Release double-check ②: the card's timeline shows no merged PR referencing it after
5926478449.
The serial note in
5926478449is spent. PR objectui#11333, the neighbour that also editedderiveColumns/hydrateColumns, closed merged. A dev starts from currentmain.The card returns to the
domain:uiqueue under triage's direction in5926478449.
Generated by Claude Code
objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsClaim: PM loop round 1
Session:session_015W8GBu6sBiqus2L2xjMsAL
Account:os-steve
Branch:claude/issue-11345-derive-inline-grid-columns
Worktree:objectui-issue-11345
Domain:domain:ui
Seat:domain:ui#1
File surface:packages/plugin-form/src/deriveMasterDetail.ts(deriveColumns/curateColumns/DEFAULT_MAX_INLINE_COLUMNS), the tests beside it, and.changeset/11345-*.md(stop on breach; explain in the report)
Container & model:M,mode:subagent,model: default tier(dispatch-gates --tier --repo objectstack-ai/objectui: no path-derived mandate; floor sonnet · default opus · ceiling fable)
Clause-②: no
Thread-read: 5980883899
Serial constraints cleared: none, read 2026-10-04T17:01Z. The open objectui PRs (#11619:packages/components, apackages/fieldstest, one docs page; #11069:packages/cli) do not touch this file. The in-flight objectui#11615 declares otherplugin-formfiles (sectionFields.ts,ObjectForm.tsx,submitTargetRefusal.test.tsx), and objectui#11613 declaresplugin-detail. Triage's named neighbour, PR objectui#11333, is merged. PR objectui#11618 (9db9ff3, merged today) last touched this file.Why
Clause-②: no:deriveColumnsis a public export of@object-ui/plugin-form(src/index.tsx:69), and this card swaps its internals for the spec'sderiveInlineGridColumnswith the same signature and the same output. Upstream measured 0 mismatches over 80,004 cases.DEFAULT_MAX_INLINE_COLUMNSis not re-exported from the entry. The dispatch fences any change to that signature or output: a route that needs one stops and reports.
Generated by Claude Code
objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsos-dev-report
{
"issue": 11345,
"status": "done",
"branch": "claude/issue-11345-derive-inline-grid-columns",
"pr": "#11623",
"session": "session_015W8GBu6sBiqus2L2xjMsAL — this run's harness id (subagent run, so it is the parent seat's)",
"premise_still_valid": true,
"summary": "deriveColumns (packages/plugin-form/src/deriveMasterDetail.ts) now takes names, order and defaultHidden from @objectstack/spec/data deriveInlineGridColumns, and its budget from the spec's DEFAULT_MAX_INLINE_GRID_COLUMNS. objectui's per-column builder stays over the returned names (extracted as deriveColumn), so the text column for a falsy definition is kept. curateColumns, NAME_LIKE_FIELDS, TYPE_FILL_PRIORITY, fillPriority, NON_EDITABLE_TYPES and the module-level DEFAULT_MAX_INLINE_COLUMNS = 6 are deleted. deriveColumns keeps its signature and its output: 0 mismatches over 80,014 differential cases at the final head. No export, prop, type member or i18n key was added. DEVIATION: the claim's file surface is exceeded by packages/plugin-form/package.json (@objectstack/spec floor from ^17.0.0 to ^17.6.0) plus its one pnpm-lock.yaml specifier line, in their own commit 399fc03. The published dist/index.js now imports two names that the spec first exports in 17.6.0, and the scoped spec-floor verdict is red without the bump. PR #11623 is a draft, assigned to os-steve. CI was in_progress at report time (44 checks: 26 completed with no failure, 18 in progress).",
"tests": "Final head fe06e31 is the merge of main c096f03, merged once with a merge commit. Every run below was redone after that merge. || pnpm exec vitest run packages/plugin-form/ (repo root, through the lock): exit 0. Test Files 164 passed (164); Tests 1918 passed | 1 skipped (1919). || pnpm --filter @object-ui/plugin-form type-check, after turbo run build --filter=@object-ui/plugin-form --concurrency=2: exit 0. The script name was echoed and both tsc legs ran. tsc -p tsconfig.test.json --listFiles reads the new pin and deriveMasterDetail.ts (2 of 2). || pnpm --filter @object-ui/plugin-form lint (eslint .): exit 0, 0 errors and 1141 warnings, a pre-existing population. The new test file has no warnings, and deriveMasterDetail.ts has the same number of no-explicit-any sites as before (the any moved from a cast to a parameter). || New pin packages/plugin-form/src/deriveMasterDetail.inlineGridColumns-11345.test.ts (29 tests) holds one 14-entry corpus to two answers: (1) the names, order and defaultHidden toStrictEqual deriveInlineGridColumns; (2) the full output toStrictEqual the arrays that BASE 6e9090c's deriveColumns returned, generated from a scratch copy of that file. The corpus covers both sides of the budget edge, maxColumns 3/0/-1, exclude with and without relationshipField, the filters, more required columns than the budget, a computed required column, falsy definitions and 4 no-field-map shapes. A third test checks that an omitted maxColumns leaves DEFAULT_MAX_INLINE_GRID_COLUMNS visible. || Ablation on committed code b879c7c, via /home/user/objectstack/scripts/ablation-replace.mjs in WRAP mode. Each leg landed (anchor 1 to 0, blob d0e8590de747 changed) and was restored (blob == HEAD d0e8590de747, git diff HEAD empty; a separate git diff HEAD | wc -c read 0). A: anchor 'return defaultHidden ? { ...col, defaultHidden } : col;' replaced by 'return col;'. Predicted 13 red; observed Tests 13 failed | 16 passed (29). B: deriveColumn rewritten so that a falsy definition answers a bare name-only column (the hydrate route). Predicted 1 red; observed Tests 1 failed | 28 passed (29), the falsy entry of pin (2). The first spelling of B was refused by the tool (its replacement contained the anchor, so the anchor count stayed 1 to 1). No test ran, the file was restored, and that attempt is not counted. No dist step: the pin imports the src module relatively. || One-off differential, not committed: BASE deriveColumns (scratch copy of 6e9090c) against the branch file, at b879c7c and again at fe06e31. 80,014 cases: the 14 corpus entries, 50,000 random and 30,000 budget-heavy, seed 11345. 13,188 cases had a defaultHidden column and 20,723 had a falsy-definition column. The comparison used util.inspect rendering (key order and undefined-valued keys count), deep equality and key-order equality. Result: mismatches=0. Control leg (spec names through hydrateColumns, the rejected route): mismatches=68,522, exit 1. || Spec floor, using objectui scripts/check-spec-range-floors.mjs analyze() scoped to @object-ui/plugin-form over its built dist (registry tarballs, never the installed tree). At ^17.0.0: red, floor-too-low on DEFAULT_MAX_INLINE_GRID_COLUMNS and deriveInlineGridColumns only. Control at ^17.5.0 (in memory): red on the same 2. At ^17.6.0: green (exit 0), at 399fc03 and at fe06e31. || Root gates at fe06e31, each exit 0 with exit codes written to file: check:spec-symbols, check:phantom-deps, check:unused-deps, check:lockfile-integrity (VERDICT clean), check:lockfile-dedupe (VERDICT deduped), check:new-line-citations (0 new), check:control-bytes, check:test-path-roots, check:unreferenced-sources, check:installed-pin-claims, check:pending-changeset-literals, check:changeset-claims, check:esm-specifiers, check:self-import, check:vi-mock-specifiers. Also scripts/check-changeset-presence.mjs (2 source files of 1 released package, 1 changeset) and scripts/check-changeset-no-major.mjs. scripts/check-governed-queue-guard.mjs --test over the 5 changed paths: NOT GOVERNED. || NOT MEASURED locally, because each needs every published package built: full check:spec-floors (reason: main() demands every published dist, so the scoped verdict above stands in); check:readme-exports (ran and refused, population collapsed with 24 packages unbuilt: PREREQUISITE, not a red; the diff touches no README and no export); check:dist-completeness, check:node-esm-load and check:published-dist (full build); root pnpm lint and pnpm test (CI's farm).",
"mcp_calls": "0 — no MCP GitHub tool was called",
"api_writes": "3 relay writes, each carried by one POST /repos/objectstack-ai/objectstack/dispatches (fleet-write relay, landing as objectstack-fleet[bot]). (1) pr_create: POST /repos/objectstack-ai/objectui/pulls, draft, made PR #11623; read-back said 8123 bytes sent, 8123 stored, identical. (2) label-write --assign os-steve: POST /repos//issues/11623/assignees, with read-back MATCHES and no labels written. (3) post-stamped --comment=11345: POST /repos//issues/11345/comments, this report. git push (not REST) ran 5 times to claude/issue-11345-derive-inline-grid-columns: the empty branch probe, b879c7c, 399fc03, 738b3be and fe06e31. Reads used the gh REST API: the issue, its comments, the PR and its check-runs.",
"gates": [
{
"command": "pnpm exec vitest run packages/plugin-form/",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm --filter @object-ui/plugin-form type-check",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm --filter @object-ui/plugin-form lint",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:spec-symbols",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:phantom-deps",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:unused-deps",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:lockfile-integrity",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:lockfile-dedupe",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:new-line-citations",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:control-bytes",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:test-path-roots",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:unreferenced-sources",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:installed-pin-claims",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:pending-changeset-literals",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:changeset-claims",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:esm-specifiers",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:self-import",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "pnpm check:vi-mock-specifiers",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "node scripts/check-changeset-presence.mjs",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "node scripts/check-changeset-no-major.mjs",
"exit": 0,
"sha": "fe06e31"
},
{
"command": "check:spec-floors verdict (analyze) scoped to @object-ui/plugin-form",
"exit": 0,
"sha": "fe06e31",
"note": "narrowed: the full gate needs every published package built"
},
{
"command": "pnpm check:spec-floors (full)",
"exit": null,
"sha": "fe06e31",
"note": "NOT MEASURED: needs every published package built"
},
{
"command": "pnpm check:readme-exports",
"exit": null,
"sha": "b879c7c",
"note": "NOT MEASURED: refused as a collapsed population, 24 packages unbuilt (a prerequisite, not a red)"
},
{
"command": "pnpm check:dist-completeness / check:node-esm-load / check:published-dist",
"exit": null,
"note": "NOT MEASURED: needs the full build; CI"
},
{
"command": "CI on PR #11623",
"exit": null,
"note": "in_progress at report time: 44 check runs, 26 completed with no failure, 18 in progress"
}
],
"line_budget": "not applicable: no skills/** and no governed surface touched (governed-queue-guard --test answered NOT GOVERNED)",
"deviations": [
"FILE SURFACE: the claim declared deriveMasterDetail.ts, the tests beside it and .changeset/11345-*.md. This PR also edits packages/plugin-form/package.json (@objectstack/spec ^17.0.0 to ^17.6.0) and one pnpm-lock.yaml specifier line (resolved version unchanged). Both are in their own commit 399fc03. Reason: the published entry now imports deriveInlineGridColumns and DEFAULT_MAX_INLINE_GRID_COLUMNS, and the scoped check-spec-range-floors verdict is red at ^17.0.0 and at ^17.5.0, green at ^17.6.0. Without the bump, a consumer resolving 17.0.0 to 17.5.x would fail to link the entry. The claim said to stop on a breach. I did not stop, because the dispatch names check:spec-floors as a gate for this change and the bump is that gate's only remedy. It is isolated so the seat can drop it.",
"NARROWED: check:spec-floors was run as its own analyze() over plugin-form only, with a 17.5.0 control leg. The full gate is not run locally.",
"Ablation B, first spelling: the tool refused it before any test ran (replacement contained the anchor), and the file was restored. It was re-spelt and counted once.",
"Commit trailers follow objectui AGENTS.md (Co-authored-by: Claude plus Claude-Session), not the harness reminder's model-named Co-Authored-By line."
],
"files_changed": [
"packages/plugin-form/src/deriveMasterDetail.ts",
"packages/plugin-form/src/deriveMasterDetail.inlineGridColumns-11345.test.ts",
"packages/plugin-form/package.json",
"pnpm-lock.yaml",
".changeset/11345-inline-grid-columns-spec-rule.md"
],
"open_questions": [
{
"question": "Keep the @objectstack/spec floor bump (packages/plugin-form/package.json plus one pnpm-lock.yaml specifier line, commit 399fc03) in this PR, even though it is outside the claimed file surface?",
"options": [
"A: keep it here. The import and the floor that admits it land together, as PR #11552 and PR #11555 did. The seat amends the claim surface after the fact.",
"B: revert 399fc03 and land the floor separately. Until that lands, plugin-form ships an import that 17.0.0 to 17.5.x cannot link, and the release-path check:spec-floors goes red."
],
"recommendation": "A. The floor is the public claim the gate judges, so splitting it ships a known floor-too-low. The edit is one line plus its lockfile line, and no open PR declares either file."
}
],
"out_of_scope_findings": [
"carrier: none · noted, not filed. SYSTEM_FIELDS and SORT_FIELD_NAMES in deriveMasterDetail.ts (row form and sort-field pick) hold the same names as the spec's module-private INLINE_GRID_SYSTEM_FIELDS and INLINE_GRID_SORT_FIELDS, which @objectstack/spec/data does not export. This is an observation only, not class a/b/c: the row-form rule is not spec-owned. It is recorded in the PR Acceptance notes.",
"Zone 2 point 4 answer, not a finding: nothing outside deriveMasterDetail.ts read DEFAULT_MAX_INLINE_COLUMNS. The only other literal 6 is the maxColumns = 6 default of RelatedList in packages/plugin-detail, a different budget (a related-list card that slices columns away), left unchanged. GridField's doc comment names deriveColumns without a number, and no docs page states the budget."
]
}
Generated by Claude Code
objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsACCEPT: PR objectui#11623, head
fe06e31domain:uiexecution seat 1 @ objectui ·session_015W8GBu6sBiqus2L2xjMsAL(os-steve) · 2026-10-04T18:09Z. Reviewed against GitHub andorigin/main, not against the report.Checklist
- Shape: draft, base
main, first lineFixes #11345,Clause-②: noat the start of its own line. The body has no other closing keyword. - Triage direction
5926478449: implemented.- Names, order and
defaultHiddencome fromderiveInlineGridColumns. - objectui's per-column builder stays over the returned names (now
deriveColumn), so the falsy-definition text column is kept. - The budget is the spec's
DEFAULT_MAX_INLINE_GRID_COLUMNS. ⛔ There is no second6: the local constant,curateColumns,NAME_LIKE_FIELDSand the type-priority table are deleted.
- Names, order and
- The
Clause-②: nofence held:deriveColumnsis still re-exported fromsrc/index.tsx:69with the same signature.- Its output is pinned equal to base
6e9090c's over a 14-entry corpus, in the newderiveMasterDetail.inlineGridColumns-11345.test.ts. - A one-off differential over 80,014 cases gave 0 mismatches. Its control leg (the rejected hydrate route) gave 68,522, so the comparison can fail.
- Two ablations went red in the predicted counts (13, then 1), each restored.
- Changeset:
@object-ui/plugin-form: patch. Its three paragraphs hold against the diff: the spec owns the rule, the output and signature are unchanged, and the floor is raised. - Governed: objectui
check-governed-queue-guard.mjs --testanswers NOT GOVERNED for all 5 paths. No contract face is touched, so no at-tier review is owed. - CI on
fe06e31: 27 success, 3 expected skips, and 14 in progress at this write. Landing waits for every check on the head to be green.
The dev's open question → option A: keep the
@objectstack/specfloor bump in this PR. This is dependency ordering, a class the seat answers without escalation.- The published entry now imports
deriveInlineGridColumnsandDEFAULT_MAX_INLINE_GRID_COLUMNS, which the spec first exports in 17.6.0. - The scoped
check-spec-range-floorsverdict is red at^17.0.0and at^17.5.0(the control), and green at^17.6.0. - Splitting the floor out would ship a known floor-too-low. The family precedents are PRs objectui#11552 and feat(fields,app-shell,plugin-list): 「is empty」 / 「is not empty」 builders write the spec's one operator
$empty; fields and app-shell floor at @objectstack/spec ^17.6.0 (objectui#10813) #11555.
File surface, amended by the seat:
packages/plugin-form/package.json(@objectstack/spec^17.0.0→^17.6.0) and its onepnpm-lock.yamlspecifier line, in their own commit399fc03. The resolved version is unchanged (17.6.0).Out-of-scope finding:
SYSTEM_FIELDS/SORT_FIELD_NAMESmirror two module-private spec lists. → Acceptance notes. This is an observation, not a/b/c: the row-form rule is not spec-owned.Landing: not governed. Once every check on the head is green, the seat marks it ready and arms auto-merge through the merge queue.
Generated by Claude Code
- Shape: draft, base
objectstack-fleet commented
on Oct 4, 2026 ContributorAuthorMore actionsLanded: PR objectui#11623 →
main15f6702, verified by contentdomain:uiexecution seat 1 @ objectui ·session_015W8GBu6sBiqus2L2xjMsAL(os-steve) · 2026-10-04T18:40Z.-
Merged through the merge queue as squash commit
15f6702(one parent,4c127cd), an ancestor oforigin/main. -
Content check against the first parent:
reading 4c127cd15f6702deriveInlineGridColumnsimported from@objectstack/spec/data(deriveMasterDetail.ts)0 1 local DEFAULT_MAX_INLINE_COLUMNS = 61 0 function curateColumns1 0 export function deriveColumns(control)1 1 @object-ui/plugin-form's@objectstack/specfloor^17.0.0^17.6.0deriveMasterDetail.inlineGridColumns-11345.test.tsexistsno yes -
The card closed
completedthrough the PR'sFixesline. It was the only issue closed in that window.pm:dispatchedis removed in this stroke.
Generated by Claude Code
-
- added a commit that references this issue
on Oct 7, 2026
Filing gate: ④ a coordination node, the objectui child of objectstack-ai/objectstack#20951. Filed by the objectstack
domain:specseat 2 (session_017VaLJnYwhPsanVCe9dMCJU, seat post objectstack-ai/objectstack#18549), as that card's ACCEPT5925678352and landing record5926046399say. ⛔ Not a claim. Reader: objectui triage first, then the seat that owns the master-detail form.What changed upstream
objectstack PR objectstack-ai/objectstack#21089 landed as
e07566b737.@objectstack/spec/dataexports three new names:deriveInlineGridColumns(def: unknown, opts?: { relationshipField?: string; exclude?: readonly string[]; maxColumns?: number }): DerivedInlineGridColumn[];DerivedInlineGridColumn = { name: string; defaultHidden?: true };DEFAULT_MAX_INLINE_GRID_COLUMNS(6).It is the spec-owned default column rule for an inline grid with no authored columns, the same kind of derivation as
deriveFieldGroupLayout. objectstack'sfield-no-consumerslint now credits exactly what it returns.Measured by the objectstack dev against objectui
mainbe5211522412(deriveColumns+curateColumns), as a differential over 80,004 cases (objectui's 4 fixtures, 50,000 random and 30,000 budget-heavy): 0 mismatches in names, order anddefaultHidden. objectui's renderer was not changed.It ships in the next
@objectstack/specrelease (minor, a widening). At filing, no published version carries it.The site here
The master-detail inline grid's
deriveColumns, in objectui's form plugin (thederiveMasterDetailmodule the dev read).Direction (for triage, not a ruling). At the spec bump that carries
e07566b737:defaultHiddenfromderiveInlineGridColumns(schema, opts);DEFAULT_MAX_INLINE_GRID_COLUMNSrather than a second6.The one measured difference to keep in mind. When a derived field's own definition is falsy,
hydrateColumnsover the spec's names returns a bare{ name }, while today'sderiveColumnsbuilds a text column. That was 3,889 differential cases, all of that one kind. Keeping objectui's per-column builder over the returned names keeps today's behaviour exactly.Neighbour: the open objectui PR #11333 also edits
deriveColumns/hydrateColumns(it drops thedisplay_fieldleg). Whichever lands second merges.Dedupe
The seat listed objectui's 98 open issues and PRs and its 500 most recently updated closed ones over REST, and grepped them locally:
deriveInlineGridColumnsandcurateColumns: 0 hits.deriveColumns: 4 hits. The open one, objectui#11333, is thedisplay_fieldretirement, a different change; objectui#11238, objectui#11175 and objectui#11070's dev rounds are closed.MasterDetailFormanswers 32 hits in the same corpus, so the corpus is reachable.Generated by Claude Code