Repository navigation
fix(platform-objects): System Overview's six metric tiles declare layout.h 1, one row tall, where they declared 2 - #24209
Merged
objectstack-fleet[bot] merged 1 commit intoOct 17, 2026
Conversation
…out.h 1, one row tall, where they declared 2 The console draws a widget over the grid rows its `h` names; each row floors at 5rem and grows to its content, and a metric card fills its box. So the six KPI tiles authored at `h: 2` drew a box about twice the height of their content, with the lower half empty. The platform draws what the metadata declares, so the authored size is corrected, not the renderer. Only `h` changes; every x, y and w and the chart and table widgets are untouched. Adds a pin beside the existing tile-semantics test: every type metric widget on the board declares h 1, with the opposite-direction controls that the read finds the six tiles and the chart and table widgets stay taller. Claude-Session: https://claude.ai/code/session_01JtSQQ3EWsbNPzyYMug1tXy Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 3 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
Contributor
Author
席位核对 ·
|
| Item | Reading |
|---|---|
| Shape | Draft PR → main. The body opens Fixes #24126, its only closing keyword. |
| Scope | 3 files (+92 / −6): the six metric tiles' layout.h 2 → 1 in system_overview.dashboard.ts (every x, y, w and the h: 4 widgets byte-identical), a new pin system-overview-tile-layout.test.ts, and the changeset. That is the claim's surface (6238376907). Not governed (check-governed-merges.mjs --pr 24209: 0 of 3). |
| Ruling | Ruling B on objectstack-ai/objectui#12704, applied literally: the authored size is corrected, not the renderer. |
| H1 (empty rows) | Falsified by the dev, and the seat re-read it. objectui origin/main's packages/plugin-dashboard/src/DashboardRenderer.tsx places a widget by gridColumn: span W / gridRow: span H only (its lines 77 and 1114–1115), and its own comment says "no explicit x/y, array order is visual order". So with h: 1 the tiles flow into two content-height rows, and no empty band appears. No y moved. |
| Review face | None of the four contract faces (no published schema, no governed rule text, Clause-②: no with no narrowing arm). This is the seat's review of record at TIER_DEFAULT; no second agent. |
| Prose face | Changeset, sentence by sentence. "draws a widget over the grid rows its h names, each row floors at 5rem and grows to its content" matches the renderer (gridAutoRows: 'minmax(5rem, auto)', span placement). FROM, TO and Unchanged match the diff. "each now draws at content height" follows from that placement; the rendered pixel height is not measured in a browser (below). |
| Pins and ablation | The new pin asserts all six tiles at h: 1, plus two controls. One ablation (all six back to h: 2) turns it red, naming every widget, and both controls stay green. The restore is clean. |
Clause-② |
no, at a line start in the PR body and the changeset; patch for @objectstack/platform-objects. |
| Gates | Dev union: 63 derived, 62 run, 1 NOT MEASURED (check-plugin-teardown-shape --self-test, whose pinned control commit sits below the shallow clone; it reads no file this PR touches). CI on this head at this read: 37 check-runs, 16 success, 6 skipped, 15 in progress, 0 failed. Landing waits for every check to finish green. |
Disposition:
open_questions: none.out_of_scope_findings[0](layout.yis not a placement input on the console's view path, while the spec declares it required): Acceptance notes, noted, not filed. It is a declared ≠ honoured reading, an inference with no wrong answer reproduced. It is passed todomain:specseat 1 on [PM seat] domain:spec — 🟢 os-tesla · session_013odhA26dvzy7pQmevdTTvy #6017, where the enforce-or-remove call is made.deviations: accepted (the fullpnpm installafter a scoped one; the prerequisite builds for three derived gates; the shallow-clone NOT MEASURED; the read-only objectui clone).- Done-when 3 (each tile at 88–96 px at 1024 and 1280 px) is measured by objectui#12704's own regression pin, which the card places after this change. This PR closes the objectstack half entirely, so
Fixesis correct.
Landing: ordinary queue (pr_ready + automerge_enable through the relay) once every check on this head is green.
Generated by Claude Code
This was referenced Oct 17, 2026
objectstack-fleet
Bot
deleted the
claude/issue-24126-system-overview-metric-height
branch
October 17, 2026 19:57
This was referenced Oct 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #24126
Clause-②: no
What changed
The
system_overviewdashboard that@objectstack/platform-objectsships (SystemOverviewDashboard, the Setup app's landing board) authored its sixtype: 'metric'tiles atlayout.h: 2. They now declarelayout.h: 1.packages/platform-objects/src/apps/dashboards/system_overview.dashboard.ts: 6 lines, +6/-6. Onlyhmoved. Everyx,yandw, the chart and table widgets (h: 4), the widget ids, filters and bindings are untouched.packages/platform-objects/src/apps/dashboards/system-overview-tile-layout.test.ts(new, +72): a pin beside the existing tile-semantics test. Everytype: 'metric'widget on the board declareslayout.hof 1, read offtyperather than a list of ids so a later KPI tile is held to it too. It carries its opposite direction: the read must find exactly the six tiles, and the chart and table widgets must stay taller than a tile..changeset/24126-system-overview-metric-height.md(new):patchfor@objectstack/platform-objects.Why: the maintainer's ruling B on objectstack-ai/objectui#12704. The console draws a widget over the grid rows its
hnames, each row floors at 5rem and grows to its content, and a metric card fills its box, so anh: 2tile drew a box about twice the height of its content. The platform draws what the metadata declares (ADR-0078 forbids anhthat is read and not honoured), so the authored size is corrected, not the renderer. Nopackages/specchange, no renderer change, no other dashboard.Evidence
pnpm --filter @objectstack/platform-objects exec vitest run --maxWorkers=2atb66de4d25: 74 files, 1139 tests, all passed (lock verdictcommand-exit 0).pnpm --filter @objectstack/platform-objects typecheck: exit 0. The new test file is inside thetsconfig.test.jsonprogram (--listFilesnames it); the three test-layer errors that program reports are all infeature-gate-guard.test.tsand are the pinned debt intest-typecheck-debt.json, which this PR leaves byte-identical toorigin/main.h: 1 },mutated back toh: 2 },throughscripts/ablation-replace.mjs(anchor 6 to 0, blob changed on disk), the new test file run: 1 failed, 2 passed. The failure names all six tiles (widget_total_usersthroughwidget_config_changes, eachlayout.h=2); both controls stayed green. Direction: red, as expected. The test imports the dashboard by relative source path, so no rebuild stands between the mutation and the run. Restore proven: blob equal to theHEADblob (53aa021f4618) andgit diff HEADempty.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, merge basef792290df, 3 changed paths): 63 families.--ranreconciliation: 62 run with exit 0, 1 NOT MEASURED, 0 unrun. The one:node scripts/check-plugin-teardown-shape.mjs --self-testexits 3,PREREQUISITE NOT MET, because its pinned positive control is a commit this shallow clone cannot reach; deepening would mutate the.gitshared by every agent in the container, and the gate does not read any file this PR touches. Three build-gated gates (check:i18n,check:lean-entry-closure,check:dual-build-cjs-loads) first exited 3 for missingdist/, then exited 0 after their prerequisite builds (check:i18n: "all bundles in sync, no undeclared authoring keys").Acceptance notes
ywhilehdrops to 1 would leave rows 1 and 3 empty (tiles aty: 0andy: 2, charts aty: 4,y: 8). It does not. The console mountsDashboardRenderer(packages/app-shell/src/views/DashboardView.tsx), which places widgets by span only:gridColumn: span wandgridRow: span hwith no explicit row or column start, overgridAutoRows: 'minmax(5rem, auto)'; its own comment reads "Widgets are auto-placed by span only", and array order is visual order.layout.yis read nowhere in that path;layout.xonly feeds column-count inference whencolumnsis absent (herecolumns: 12is declared). Read at objectui97538115b(HEAD when measured) and at5e15928b4, the pin this repo ships (.objectui-sha): the placement lines are identical. The only reader ofxandyas positions isDashboardGridLayout(react-grid-layout), a component a host mounts directly; itsdashboard-gridnode key is retired and the console does not mount it. So withh: 1the six tiles auto-flow into two content-height rows, then the charts, then the table: no empty band. Measured by reading, not by a browser run.platform-objectstest asserted these widgets' layout, so nothing flipped. The only otherh: 2copy is the inline fixture inpackages/objectql/src/protocol-packaged-dashboard-base.test.ts; it builds its own body and never imports the shipped board, so it is untouched.system_overviewis served that overlay as stored (ADR-0126 Regime O), so it keeps the tile heights it was saved with; the changeset says so.yis not a placement input on the console's view path, the spec's requiredlayout.yis only honoured byDashboardGridLayout. Read-only, no wrong answer reproduced; carrier: none.Labels: none requested for this card; the diff publishes
@objectstack/platform-objects, so noskip-changeset.Generated by Claude Code