Uh oh!
There was an error while loading. Please reload this page.
test(components): ratchet the container-declaration census to zero - #6808
Merged
Conversation
The same defect has been found three times independently, one registration at a time (objectui#3900, objectui#6740, objectui#6764), because both existing pins are ENUMERATIVE -- a literal 4-element array and the 8 that PR #6774 declared -- so the class regenerates past them. Adds the universal form of objectui#6740's runtime mechanism: every bare authoring tag in the registry is rendered through the real SchemaRenderer with one authored child and put through validateTree, and a registration that renders that child while omitting `isContainer` fails the run. Measured on main@d06059f24: 293 registry keys, 131 bare tags, 58 render children, 13 declare the flag (objectui#6764's control set plus PR #6774's 8), 45 do not. `button` is excluded by the 2026-08-29 ruling and pinned separately; the other 44 are scripts/container-declaration-baseline.json, a ratchet to zero that is red in both directions -- an unlisted violator fails, and so does a listed tag that no longer violates -- so the list can only shrink. No registration metadata changes, so nothing is declared or reverted here. Refs objectui#6779 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CRJge11jso9TpXRWFt1Z49
This was referenced Aug 29, 2026
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
This was referenced Aug 29, 2026
os-sales
marked this pull request as ready for review
August 29, 2026 22:15
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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#6779
Implements the 2026-08-29 maintainer ruling (option B): the runtime census pin
made universal, plus an explicit ratchet-to-zero list of the remaining
stock. No registration metadata changes in this PR, so nothing PR #6774
declared is reverted and no new tag is declared.
What lands
packages/components/src/renderers/__tests__/container-declaration-ratchet.test.tsx— objectui#6740's mechanism (render the tag through the real
SchemaRendererwith one authored child, then run
validateTreeover the manifest the appbuilds) with its coverage set changed from a literal 4-element array to
the whole registry.
scripts/container-declaration-baseline.json— the 44 remaining violations,shaped after
i18n-call-site-key-baseline.json/skills-path-baseline.json:a
noteblock that states the shrink-only contract, a datedsincecolumn onevery entry, and the
buttonexclusion recorded with the ruling that made it.RECOUNTED on my own base (
main@d06059f24), not inheritedschema.childrenisContainerbutton)button)The control holds: the five the card named —
flex/grid/card/container/stack— all still declare, and the other 8 declarers are exactlyPR #6774's set, which is why 13 here and 5 there describe the same tree at two
different refs. 45 undeclared minus
button= 44 listed, matching theruling's predicted remainder exactly.
The exception shapes need no skip-list — reporting rather than narrowing
The ruling requires that
tabs, the void tags (img/hr/br) and thebody-only family are not swept in. Measured: every one of them already scores
as a non-container, because none puts an authored child on the page. The
runtime predicate excludes them by construction; nothing is skipped by name.
They are pinned anyway — as pins on the predicate, so that rewriting it into
the source-side "renders children OR body" spelling goes red instead of silently
turning 13-plus tags into containers.
One recount delta worth recording: the body-only family is 13 bare keys, not
the 10 the card estimated — the
sidebar-family is 11 keys, not 8. Itchanges nothing here (none of them violates), but it changes objectui#6771's
denominator.
buttonis excluded by name and pinned as a live description — still renderschildren, still undeclared, still the only public one. When the separate card
lands, that pin goes red and the exclusion has to be resolved rather than left
standing, which is the tail risk the triage seat recorded against option B.
A new violation turns it red — verified in both directions
Both legs mutated a committed tree, proved the mutation on disk by anchored
grep -c(never an editor exit code), ran under atraprestore with absolutepaths, and were restored back to the HEAD blob hash. No rebuild was needed: the
mutated files are same-package sources reached through the test's relative
import '../index', not through anydist.A — a new undeclared container. Deleted the shared
isContainer: truefromrenderers/layout/semantic.tsx(blobc4eccd6ato7b5e59ad, anchor count 1 to 0):B — a paid-off entry left on the list. Added
isContainer: truetoscroll-areawithout deleting its baseline line (blob94ed7678toc30ff42c,injected-text count 0 to 1):
Exactly one assertion failed in each leg and the other 11 stayed green, so each
red is attributable. After restore,
git diff HEADis empty and both blob hashesmatch HEAD.
Verification, on the final commit
bf8c6b116One
&&-joined chain, verdictcommand-exit 0:tsc --noEmitandtsc -p tsconfig.test.json --noEmitinpackages/componentseslinton the new test filecheck-control-bytes(OK, 5647 tracked text files)check-changeset-presence(empty frontmatter ... a complete answer to this gate)check-changeset-no-majorTest Files 3 passed (3)/Tests 45 passed (45)Also green separately:
check:self-import,check:phantom-deps,check:esm-specifiers,check:vi-mock-specifiers,check:side-effects-array,check:shell-escape-residue.Declared narrowing. eslint was run on the changed files rather than
repo-wide. Read from eslint's own config resolution (
--format json, 3 pathspresented, 1 linted): the JSON and the changeset are reported as
File ignored because no matching configuration was supplied, i.e. outsideeslint's population by its own config, not by my guess.
eslint.config.jsdeclares no
projectServiceand noparserOptions.project, and no packagecarries its own eslint config, so type-aware linting is off and this diff cannot
move the verdict of any untouched file. CI runs the full farm regardless.
NOT MEASURED:
check:sdui-registration-pins. It exits 2 withPREREQUISITE NOT METuntil the console bundle is built, and that build needsthe full package graph (33 of 40 packages have no
distin this worktree); itfailed in
packages/app-shell, which this diff does not reach — the whole diffis 3 added files. Recording it as not measured rather than as a red. CI builds
the graph and runs it.
Scope
Per the ruling, out of scope and deliberately untouched:
button(excluded, thePM seat files its card), and the body-only family (
badge,alert, thesidebar-keys), which belong to objectui#6771's separate ruling.Generated by Claude Code