Repository navigation
anchored panel
- an aligned panel that would leave the viewport flips its alignment before it clamps
angular
- the stray-attribute case takes the file's test environment, never a second one inside its body
- arena-tree-view, the same flat tree, keyboard and type-ahead
- arenaRowWindow, the same measured window as a directive on the box
- arena-heatmap-chart, the same cells, bins and cursor, measured from its frame
- arena-funnel-chart, the same stages and conversions, measured from its frame
- arena-gauge-chart, the same dial, measured from its frame
- arena-sparkline, the same line, with its keyboard only when asked
- arena-split-button, whose caret opens a menu anchored to the whole split
- arena-menu anchors to the box a composer provides, and to its host without one
- arena-filter-bar, a named group whose chips keep focus in the bar
- arena-pin-input, whose cells edit one code in both layers
- arena-slider, whose thumbs bound each other in both layers
- arena-number-field, whose number survives a form and a locale
- arena-timeline, whose glyphs and states both layers share
- arena-stepper, the ol inside a host that draws no box
- arena-accordion, a stack whose items read their state from the accordion
- arena-meter, whose standing both layers derive from one module
- arena-copy-button, the icon button and the region it speaks in
- arena-link, whose anchor rules both layers share
- arena-kbd, and the menu and palette print a shortcut as a kbd
- arena-divider, the hr inside a host that draws no box
- popover and menu write the popup state in a hook a server render runs, proved by one
- a warning no suite asserts fails the test that printed it, so the suite prints none
- a component id collision fails the test that made it, and every colliding host names itself
- a toned doughnut is coloured by its tone and warns about nothing it was not given
- a suite that appends to the body sweeps it with one helper that keeps the overlay container
- a blank name groups the radios under a generated one
- arena-section counts a false conditional as no child, as the contract says
- arena-file-input, whose change reaches a consumer once
- an anchored panel attaches through one overlay wiring, on one stack Escape and a press consult
- the anchored-panel rules are written twice and held equal by check:shared-arithmetic
behaviour
- the tree pattern, flat, with level, set size and position on every item
- a group pattern from the ARIA 1.2 role reference requires the role of a set of related controls, and no keyboard model
build
- @types/bun is exactly 1.4.0
- the repo draws no glyph through the Phosphor web font, and check:icons validates names against @phosphor-icons/core
- the repo writes its own sprite and every playground, kitchen sink and the site hand it to ArenaIcon
- the layer packages declare the arena command's three build-time dependencies, and the React package a module field
- a root module a component imports is named in every list the React build reads
charts
- the pyramid case wraps and the explicit-slot case holds the swatch's start
- the gauge prose gives a value below the first band the colorStart slot
- the sparkline description names the colorStart slot where the line takes its colour
- doughnut, funnel, sparkline and gauge count from colorStart, and the heatmap names it among what it ignores
- the series charts take colorStart, and a series without a colour counts its slot from it
- arenaCatRotate counts a positional slot from a start and wraps, and the colorIds fallback rotates
- the line and bar cursor scrolls the rail to keep its point in view, as the heatmap's does
- the line and bar tooltips anchor inside a scrolled rail, as the heatmap's do
- the horizontal bar chart clips a long name at its gutter and keeps it whole on hover
- every Angular chart refuses an empty label with the message its twin throws
- the hidden data table sits inside a hidden box, so a wide table never widens the page
- a heatmap's bins, two-axis cursor, transposed table and row pitch
- a funnel's conversions, widths and gutter, and a percent writer that keeps one digit
- a gauge's angle, fraction and band lookup over the shared threshold primitive
- a sparkline's height token, and a scale and a box drawn from the data's own range
check
- api reads a quoted prop, and allows the four trigger attributes Arena's composers write
- target size measures compact at 2.5.8's floor and cites 2.5.5 for the comfortable one
- focus-trap proves a refused hidden control hands focus to the trigger it lies under
- anchoring measures the rows of an open list against every density floor
- anchoring opens every anchored panel in Chromium from a clipped, transformed edge
- the icon gate skips a scanned root git ignores, so a local directory no clone holds never reaches its verdict
- every workflow job that runs steps declares a literal timeout-minutes, and a reusable-workflow caller is the one exemption
- a gate interrupted by SIGINT or SIGTERM reaps the Chromium group it launched before it exits by that signal
- every bun suite gives a case the test-case deadline, which a loaded host's slow case fits and a hung case does not
check-packages
- the --layer case looks for the theme sheet in the posix spelling the entry imports it by
chromium
- on Windows the browser's TMP is a directory of its own beside the profile, removed whole once it has exited
- the header fits its ten lines again
- on Windows the teardown removes the .tmp files the browser left
- the leftover-profile case counts only the profiles its own process made
ci
- setup-chrome is v2, which runs on node24, and the pins name the tools Arena runs on rather than an action runtime
- main names the pinned browser, which verify writes to CHROME_PATH from each setup-chrome step when name-browser is true
- the pinned browser is Chromium 155.0.8059.79, and the verify jobs that launch one install it
- every workflow installs the Bun, Node and Chrome that Arena runs on, 1.4.0, 26.7.0 and 155.0.8059.84
- the refusal warning, the check's tolerance and the fallback read what build:site says about the adopter
- a gate step that crashes leaves the site without the adopter instead of stopping the publication
- the site publishes one adopter's build when it declares this Arena, and goes out without it when it does not arrive or does not hold
cli
- arena check holds a plugin's heat answers to the order roles.json gives, and the witness plugin answers in order
- a stylesheet block may drop the preflight alone, and the config page tables every key with its default
- arena check reports a derived heat ladder whose steps a reader cannot tell apart
- an ArenaLink wrapped in a link of your own is reported as wrapped-link
- every audit tag carries what it reports, cli.md tables them from the audit and SKILL.md names the tag of each audited rule
contracts
- the form field sentence lists the values, then says the array forms share one
- the type scale points down to the density table, and the form field says the array forms share a value
- descriptions of ArenaG to ArenaZ read in the consumer register
- descriptions of ArenaA to ArenaF read in the consumer register
- ArenaValidateOn describes every field that types validateOn
- the slider pattern, one thumb or two, across or down
- the spinbutton pattern, whose number may be read as text
- the accordion pattern, whose headers are buttons alone in a heading
- the meter pattern, and ArenaMeter's surface and the three standings it says
- a group's blank name is generated, as an omitted one is
- ArenaFileInput's members, its two payload types, its eight words and its two handles
- dialog-nonmodal holds what the ARIA 1.2 dialog role requires and nothing more
- the toast notice is a contract type that both layers' generated types carry
deadline
- the case-timeout case reads which timeout ended a case, not how many times bun says so
- a case pins that bun's runner ends a hung case at the timeout it declares
demos
- bar and doughnut draw a colorStart that wraps past the last slot
- an element node holds children, so a host places a component inside a paragraph
docs
- the route reasons name the flat sheet and icon module, and the CDK sheet is described by what it carries
- the pages say what arena build writes, flat and in each layer's language
- no Angular output shares a bubbling DOM name, and the pages write onActivate
- the sprite section closes every bundler page, claims no measurement, and is not repeated in a bullet
- every bundler page says how its toolchain serves the sprite and that the provider takes an absolute URL
- the weight measure says it measures as the rollup row of the bundler record does, rather than naming a plan that no longer exists
- each bundler family has a page of its own under the skill's references, with an index naming what changes per bundler
- the workflow page says an action runs on node24 in one sentence, and the release route fits its budget again
- the decision tree points to the bundle chunking section and the bundler record from its architecture node
- the release attaches an adopter's builds only when it declares the version, and the contrast floors are measured over the catalogue
- the environment tables write each option and pattern in a form the link and citation checks read
- each bundler's row carries the config that keeps the package sheet apart, and the doctor row reads whole
- the tested environments carry the final measurement, and each bundler's row says how Arena's sheet lands in a file of its own
- the package sheet moves with the version, the components, the stylesheet keys and the root plugin, doctor's note is named, and the Vite glob says where it lives
- install, cli, stack and stylesheets name arena.package.generated.css, and install says how Vite and the Angular builder serve the sprite
- the audit table ties raw-glyph to the icons rule, the package sheet is a name consumer docs may cite, the AGENTS row names the font step, and two route budgets rise
- the new comments in the CLI modules join their file headers
- the cache and dictionary pages drop their history-shaped wording, say which browsers carry the dictionary, and the route reasons say what each route carries
- what each file Arena writes is, how long to cache it, how to keep Arena in its own chunk and serve it with a dictionary, and where it was tested
- the specimens draw their glyphs from the repo sprite
- the intro pages draw their glyphs from the repo sprite
- config.md says how a config naming no components differs from spelling auto
- the no-import placeholder stands for a sheet in the closed list, and the contrast reader's header keeps its width
- the stylesheet order names only the default root's slot, contrast.css says who restates it, and the no-import list says what stands for a component and when base drops
- the --no-import sheet lists come from the assembly that writes each arena.css, and the slot sentence names who fills it
- a project's own root style plugin keeps the high-contrast widths, and a --no-import project imports the sheets arena build would
- the Angular runtime palette fixture comment names its drift guard
- the pending scope sentence names its subject
- runtime palette order rule, JSON import, overlay anchor, throw list and CSP script note
- config.md names the runtimePalettes key, written by its generator
- runtime palettes, what they change, how to apply, check and keep one
- the color-scheme comment says the class may sit on any element and the scrim is listed with the colour aliases
- the strip description says what Tailwind emits for a renamed key and for a same-name key
- the palette classes keep their place outside the vocabulary, and the new palette prose reads in short sentences
- the chart recipe puts the chart inside a scope and declares its canvas, and the default palette's class is described as it is
- a palette goes on any element, and the docs say what a subtree takes
- the Angular chart redraw snippet declares its component so inject has a context
- review fixes of the adopter-docs phase: green gates, declared reads, whole chart snippets, and initArenaTheme tells a mounted hook
- a catalogue entry leads the plugin list, the identity document has a home, the shell snippets are whole, and the MCP page says how npx finds the server
- the install paragraph keeps Phosphor's cause, and the pinned commands name each package's own version
- the versioning page says how to install a version and describes no upgrade
- the contracts page shows a role entry and a layer checklist, and the artifact page carries its icons
- the head writer's page fields and title, Open Graph and JSON-LD in both layers, and the media roles answered for video and illustration
- the chart-library section draws Chart.js and D3 from the tokens and redraws in both layers, and the queue rows give an entry's shape
- the exit table of arena names an unanswered root role among the project problems
- the build names every unanswered role, a palette key's custom property, and selection, scrollbar and density recipes for your own markup
- a breakpoint row of the tokens table names the variant that reads it, and a none row names no utility for its token
- the tokens table reads the spacing base from the sheet, so every spacing step resolves and the lead claims only what the sheet resets
- the token, density and locale tables name the Tailwind utility, what each property sizes and the member that outranks a word
- the doughnut prompt, the legend answer and the categorical note agree with colorStart
- positional slots rotate from colorStart, and an explicit slot still clamps
- the consumer-page reason wraps at the column the lines around it keep
- the route reasons keep the default-plugin qualifier and the kernel as subject, and the surface reason ties in the half step
- the plugin checklist builds before it imports, the spacing scale names its half step, and the page says Arena paints no selection or scrollbar
- the stylesheet list names the plugin's slot in the shipped order, and the hand order says what the prelude carries
- the upgrade block shows the angular and mcp packages beside react
- the upgrade path names the layer and MCP packages, and says no breaking-change list is written; the locale samples carry their imports
- a third-party chart reads the heat roles, the shell sample holds the confirm queue, and focus follows a route change into main
- the layer pages name the pin input's handle beside the others
- the layer pages name the number field's handles, and the text field points at both controls
- the Angular layer names the two hosts that keep a real ordered list
- why a threshold rule with one consumer sits at the layer root
- the progress bar is a bar or a ring, and a meter is ArenaMeter
- a code readout is a scroller row, a pre and a copy button
- the Angular layer names the three hosts that keep a semantic element
- the two layers say how a component exposes a method, and a consumer finds the file input's
- the forms entry point and the floating-row roles name both list controls
- the behaviour level lists the group pattern, the demos table the field directive, and the forms page the checkbox group
- the pages say how each layer places an anchored panel and which panel Escape reaches
- the README names the webfont, the catalogue and the upgrade page, and the chart page sends a builder to exports.md
feat
- the site copies an adopter's build as is when it declares this Arena, and holds its pages with the checks every page gets
- the site reads an adopter's build off a manifest it declares, and publishes it only for the Arena it names
- arena doctor notes when no source imports the package sheet the build writes
- arena build writes Arena's half of the stylesheet to arena.package.generated.css, and the font cut reads the closed list of sheets whatever --no-import says
- check:weight holds what a typical Arena screen downloads, against budgets taken from the start tree
- arena build cuts each local font to Latin-1 and the weights its sheets paint, under a content-hashed name, and the packages carry the example's fonts
- every angular component draws its glyphs through ArenaIcon
- every react component draws its glyphs through ArenaIcon
- ArenaIcon draws one Phosphor glyph from the sprite the project serves, in both layers
- arena build writes the glyphs a project draws as icons-.svg and a module naming it, and reports a raw ph-* element that would paint nothing
- the arena command can write a Phosphor sprite from @phosphor-icons/core under a content-hashed name
- icons.json is keyed by component and the filled weight takes only what can draw filled, so a build carries the glyphs of the components it draws
- arena build works out the component sheets by default, and every root imports the closed list it draws
- a palette whose base-100 contradicts its declared polarity is reported, declared and runtime alike
- the no-flash snippet paints a returning user's runtime palette from the cache
- React registers a runtime palette, applies it as properties under its polarity hook, restores it from the cache, and the scope and useArenaTheme agree with a server render
- Angular registers a runtime palette, and the scope and an overlay pane wear its hook and properties
- both packages export ./palette, the runtime palette module, with its own declarations
- palette.ts checks and declares a palette nobody declared at build time, with the build's own code
- runtimePalettes makes arena build emit the polarity hooks, the root marker and the runtime data file
- ArenaPaletteScope declares a palette island and provides its palette in both layers
- the adopter's renamed Tailwind keys compile inline, so a utility follows its subtree
- an Angular overlay takes the palette, plugin and density of its trigger
- a nested style plugin keeps the high-contrast widths and the hero fit
- arena build gives every palette, the default too, its class, its aliases and its name
- Arena's palettes each wear a class and their aliases, and the scrim follows the palette
- palette and density crosses are @scope rules, so the nearest scope wins
fix
- review findings of 3.12
- the overview page module does nothing when its #sections host is not on the page
- the brotli dictionary is applied in-process on Bun 1.4.0, and two path tests compare the generated paths in posix form
- the adopter output reads whether placement happened, and the workflow page wraps and words its refusals as they are
- placeAdopter copies the adopter after the rewrite, drops it whole when the copy throws, and tells the workflow which
- a backslash-escaped backtick opens no code span and a run of backticks closes only on a run of its length
- the hero wears each catalogue entry's own default palette, read from its config rather than copied
- a fence line ending in a carriage return opens and closes a block like any other
- a fenced block opens and closes by CommonMark's rule, so a line with a backtick after its fence masks nothing
- a link scanner skips code, so a pattern holding
](in a code span is no link, and experiments.css is named as an option - --adopter-declares refuses an empty or option-shaped directory, and a manifest's repository must be an http(s) address
- the font cut's rule reader skips quoted strings, so a brace or semicolon in content no longer misreads its rule
- the icon slot of ArenaEmptyState and ArenaErrorState records its 2px line-box padding as a use of the length
- check-consumer reads Arena's half from the package sheet, draws a bare glyph and asserts its regular symbol, and holds the sheet's closed list and its stability under an app-only edit
- check-weight measures Arena's CSS half from the package sheet, holds the start's sprite and fonts as lower bounds, and refuses a release patch that changed nothing
- check-packages holds the manifest's dependencies to the exact set and ranges Arena pins, reading the Angular runtime ones instead of naming tslib
- the layer-independence gate exempts the two tests that name the other layer's host, and check-packages calls themeCss without the retired header option
- the complete plugin's icon hook also skips the glyph behind Angular's arena-icon host, so both layers paint the same pixels
- iconManifest throws on a file directly under a category that names a glyph, instead of dropping it
- the icon part of ArenaEmptyState and ArenaErrorState keeps the line box its font glyph held, so the title and message keep their place
- the orphan message says a file this config does not produce, since it also names the sprite and the cut fonts
- a cut font whose role went remote or left the config is found through the references in the last theme sheet, so build and clean remove it
- arena check plans the fonts for their reports only, reading the axis and cutting nothing, so it needs no harfbuzzjs
- arena build --watch never runs two builds at once, and a change that settles during one costs one more build after it
- the command resolves harfbuzzjs, wawoff2 and Phosphor from its own directory before the project's, so a project's copy cannot shadow them
- the complete style plugin paints the icon hook on an ArenaIcon drawn on its own, not on a glyph a component draws inside one of its parts
- ArenaAlert hides the wrapper of its tone glyph from assistive technology, as its Angular twin does
- the font cut reads the own declarations of nested CSS rules at every depth, keeps the ellipsis, and the test-only font readers leave the shipped module
- the sprite writes the regular weight under ph-regular-, the id every reader points at, and a weightless glyph name draws regular
- check:weight measures an app release by changing the app, takes the sprite and fonts from the start's inputs, and declares rollup and esbuild
- ArenaIcon's tests pass the type, assertion and compiled-suite gates, and the twins assert the same server render
- the font cut keeps the layout features it names and the name table, and a static face with no declared weight is 400
- the bench copy skips the Phosphor ttf and svg a prebuilt bench carries, and the check:icons row names @phosphor-icons/core
- one shared sprite symbol reference, read by the scan, the sprite build and check:icons
- check:icons reads a sprite symbol reference as a glyph at its weight
- check:consumer expects the icon sheet a table now draws for the consumer
- the hero header carries the inline robot note within its ten lines
- ArenaAlert hands ArenaIcon a string when the tone table has no entry
- component-map expects the glyph sheet a table and a confirm dialog now need
- the hero page draws the robot's symbol inline, since Chrome refuses an external use over file://
- build:sprite feeds check:palette-islands, which opens the sprite
- check:palette-islands declares the sprite it opens
- the recorded proximity trees carry the ArenaIcon shapes in both layers
- the repo sprite carries the hero's robot and the ready signal skips an svg use that is not rendered
- each Phosphor sprite symbol carries the fill of its source, since a use inherits from itself and not from the file
- the no-import placeholder stands for the closed list the build writes, and check:consumer resolves each bw role to px
- a project's own root style plugin is followed by the high-contrast :root block, so the boundary widening survives every load order
- a pending palette scope hydrates against the server, then moves to pending after hydration
- a runtime palette's values are strings and its --arena-palette is required, a re-registered name keeps its place, a pre-init registration the config declares is dropped with a warning, and the docs name the cache lifecycle
- a palette scope naming a name nobody has registered renders pending and paints when it is registered, in both layers
- ARENA_DEFAULT_THEMES is declared in Theme.ts again, RUNTIME_CACHE_KEY is declared internal, and the theme test imports the config type through typeof
- an Angular palette scope reaches the theme service only for a name the config does not declare, so a declared scope no longer paints the page root from the device
- runtime palette names are kebab case in both layers and the snippet, and an array of properties is refused
- check:consumer drops an unused import and names the package when the palette probe writes no JSON
- the palette probe reads its input from stdin, so the runtime data is not bound by a command-line limit, and removes itself
- check:consumer resolves the shipped palette module the way Node does, requires the declared-name refusal, and compares color-scheme and one-sided keys
- the palette shape test resolves ArenaPolarity from palette.ts, so a widened alias fails against Angular's literal
- Angular register refuses in the ruled order with the canonical texts, and a test holds ArenaRuntimePalette to the palette module's shape
- ThemeState joins the React package's root modules, and the theme has one fallback
- React runtime palettes hydrate against the server markup, keep their internals off the root entry, and share the unknown-name wording
- the palette declaration guard reads imports with TypeScript's scanner, and copyCli is driven to its refusal
- the palette declaration guard rejects inline imports and re-exports, its failure path is tested, and nothing is written before the checks
- palette.ts refuses a non-object palette with "palette: not an object" before naming any key
- palette.ts validates the runtime data shape, checks its input once, and its tests assert the full problem lines
- the polarity hook names are refused apart from RESERVED, which holds names ahead of a class to come
- the config key table has a runtimePalettes row, the hook cross loop is one helper, and the polarity hooks carry a spec in their reserved reason
- nodeImportsReachedFrom reads imports with the TypeScript scanner
- reports.ts imports the Report type it uses, and nodeImportsReachedFrom throws on a missing import and ignores comments
- the island gate reports a bubble that did not open or close, resolves each palette inside the opposite class, requires both set differences, and the variant coverage names a variant drawn twice
- check-compat-aliases exempts exactly the arena-palette channel and not every arena- name
- the file-url-pathname rule skips location?.pathname, a case pins the static-server owner, and the dark-group test spells its path through relPosix
- rootOnlyFor reads the :root inside the high-contrast query and refuses a sheet with none, and a package missing contrast.css or environment.css is reported
- a dark token group of a plugin source reaches the base selector as well as the dark scope
- parseDecls keys a rule nested in an at-rule by its preludes, so the plugin's own answers are read apart from its high-contrast block
- an open Angular pane follows the page theme, and the overlay's contributor description names the classes it wears
- useArenaPalette follows the page theme outside a scope, and the island tests pin the default palette
- generate:member-docs feeds check:portability, which reads the sources it writes
- check:coverage knows the hero fit is reached by an arbitrary length, restated per plugin
- the token catalogue refuses a colors.css without the alias block, and a plugin with no answers still names itself
forms
- ArenaFileInput's held files keep their list role, in both layers
- arena-pin-input binds to a form, which holds the code as a string
- ArenaInput and ArenaTextarea name the note under the field, in both layers
- arena-slider binds to a form, which holds a number or a pair
- arena-number-field binds to a form, which holds a number or null
- one arithmetic for a number field and a slider, kept equal in both layers
- arena-file-input binds to a form, whose value is the files it holds
- the rules that decide which files a file input holds are one module both layers pair
- the list rules both list controls follow are one module written twice and held equal
- ArenaCheckboxGroup governs its boxes in Angular through a state they pull, with a forms adapter holding a string array
- ArenaCheckboxGroup reports the set it governs in React, in the order its boxes were ticked
- ArenaCheckboxGroup is contracted with an ArenaValueSet event and drawn by a group slot of ArenaCheckbox's manifest
- ArenaFieldset renders a real fieldset inside a bare Angular host, so the disabled cascade is the platform's
- ArenaFieldset renders a real fieldset in React, named by its legend and described by its note
- ArenaFieldset is contracted, drawn by its own manifest and seeded, and the fieldset name is no longer held
gates
- flatProblems types its list and the route budgets carry the check:packages --layer prose
- check:mcp and check:packages refuse an unassembled tree, as check:consumer does
- check:plugin-css parses every style plugin stylesheet and refuses an open block
generated
- the witness plugin's sheet follows its heat answers
graph
- member-docs feeds the two readers of the Angular sources, and the new suites type-check
- spellsRoot lets a computed segment stand only for a middle one, and refuseWhen and the layer check carry their own cases
- the let and var skip fixture carries no timeout option
- check:graph reads an unreadable segment as any one segment, follows root aliases and namespace members, and refuses more skip and collect shapes
- check:graph refuses a suite that reads what only assembly writes, or that skips on a file
- build:site declares the kitchen-sink arrangements it reads to name the variant sinks
- restamp prunes a directory its step excludes, and reads one that vanishes as absent
- every traced node declares the files it opens, so a change to any of them reruns the gate
identity
- the pages read the faces and the heading step the sheet defines, and a suite holds every var() they read
intro
- the card subtitles carry no em dash
layers
- one threshold rule both layers share, a region keeps its lower edge
manifests
- Menu and Tooltip carry no positioning, since each layer places the panel
mcp
- the reference page names every resource URI the catalogue serves, and a case holds the two together
- the suites assemble the package they read in a temp root, never the tree's dist/mcp
packages
- check:packages takes --layer, so a publish job judges the one package it assembles
palette
- a five-step heat ladder, pinned for Arena, derived for a palette that pins none, and held by check:ramp
perf
- each React component carries its own class vocabulary, so the global map leaves the runtime bundle
pixel-parity
- a charts arrangement draws every chart variant, and the layers' warnings must agree
playgrounds
- the emission case compares a fresh emission in a temp root, never the tree's ignored copies
- a number validator is chosen from a table typed for numbers
- a $field directive writes one field of an event's object payload into a knob of the same shape
probe
- the stand-in is signalled on a ready mark it renames into place after its line, and spawnForwarding listens before it spawns
- the stand-in compiler prints its line before it writes the pid the probe signals on
- the interrupt probe waits for its parent's imports before the spawn window opens
prompts
- the prompt generator and its check declare the Angular sources the marker map reads
- the Angular prompts drop the import instruction their markers region now states
- every Angular prompt names the projection markers its component queries, and the import rule that keeps a slot
- the select, the menu and the palette say which list control holds a form value
react
- a select with a placeholder and no value starts on the placeholder
- ArenaTreeView, a flat tree with one tab stop, four arrows and type-ahead
- useArenaRowWindow, a measured window over a long table inside a box you own
- ArenaHeatmapChart, rows by columns whose colour is the magnitude, with a two-axis cursor
- ArenaFunnelChart, stages that narrow by their own numbers, with the conversion Arena writes
- ArenaGaugeChart, one value on a banded dial that says its band in words
- ArenaSparkline, a line beside a number that adds no tab stop unless asked
- ArenaSplitButton, one action and a menu of its alternatives in one named group
- ArenaMenu anchors to the box a composer provides, and to its own root without one
- ArenaFilterBar, the filters in effect, and focus that stays in the bar
- ArenaPinInput, one code across cells with one tab stop
- ArenaSlider, thumbs a finger and the keys move, one or two, across or down
- ArenaNumberField, a number that commits on blur, Enter and every step
- ArenaTimeline, one thing's stages joined by a line
- ArenaStepper, a process whose state comes from one index
- ArenaAccordion, sections under headings whose arrows stay inside the stack
- ArenaMeter, a measurement whose standing comes from its thresholds
- ArenaCopyButton, a copy confirmed in place on a clock of its own
- ArenaLink, an inline anchor a router owns the plain click of
- ArenaKbd, and a printed shortcut is keyboard input wherever Arena draws one
- ArenaDivider, a rule or a labelled rule, declared in layout and placed in both sinks
- ArenaButton and ArenaIconButton forward the four trigger attributes Arena's composers write
- a toned doughnut is coloured by its tone and warns about nothing it was not given
- a generated group name comes from useId, so the server and the client draw the same one
- ArenaFileInput, declared in forms and placed in both sinks
- an anchored panel is a manual popover placed by script, on one stack Escape and a press consult
- the rules every anchored panel follows are one pure module, held with rect literals
refactor
- build-sprite's component-source test drops the redundant generated alternation, and a swapping component named in kebab-case alone is tested
- the manifest-less React parts import the type and the value from Vocabulary.generated once, and the bundle test pins the context list to them
- themeSheets names the condition under which components come from the map, and drops the non-null assertion
- the toast dismissal constant lives in ToastClock, so no root module imports a component and Arena chunks without a cycle
- the palette code reaches report.ts and no node: module, and themeCss builds a palette class from the colour half and the polarity half
- the two Tailwind theme gates share one block parser that counts braces, and the container and size comments sit on their inline keys
references
- the focus snippets run as written, the heat sentence keeps its order, and the dialog prose agrees with its region
- the layer order rule and the upgrade lookup are stated as the package holds them
register
- check:register reads every contract description, and the type contracts read in the register
roles
- a milestone's dot takes a size of its own, born at 20px
- a link in running text takes an ink of its own, born at the body ink
- a key is answered through a register of its own, which every cap and shortcut reads
scripts
- headers state no count, the marker map is built after the layer guard, and the suites take their sources from the exports
- the pages say how the sweep runs side by side, what a fresh clone assembles, how to run a CI job on a clean clone and what the audit holds
segmented control
- a segment is never narrower than its control height
semantics
- the people list keeps its list role, and the figure pattern says why the cursor is silent
site
- pages, indexedDirectories and located take the output they read, so no caller defaults to the bench output
- the identity template and its worked answer are published on the site and served as arena://identity/ resources, linking the hosted sheet
skill
- the router-link rule names every member that takes an href, and the icon rule names production code
- the router states the bracket rule arena audit holds, and routes a static mock to the artifact page
skills
- cold-start names where to fetch the identity template, and a catalogue entry's config is a starting file
- the reference pages answer chart libraries, upgrading, editor clients, nested locales, routers and roving focus
- shell.md assembles the frame in each layer, and SKILL.md routes a frame and its landmarks there
- tokens.md tables each density property per class and the type scale, with the Tailwind utility that reads each
- exports.md tables the fields of a notice and of a confirmation request from their contracts
suite-tmp
- a suite root sweeps the empty fetcher directories once its step has ended, and a browser's teardown no longer does
suites
- the MCP and Tailwind temp roots link through linkDir and never leak; headers and prose say what the code does
- the package and site cases judge a root they make, never the tree's assembled or bench output
- a step that leaves anything in its temp root fails on every platform
- the unreadable-directory case skips a host where a mode bit denies no read, measured rather than named
- a workflow is named by its basename on every platform, and the unreadable-directory case skips Windows
- every suite removes what it makes, and a test step that leaves anything in its temp root fails
- each suite step runs under a temp root of its own, removed when the step ends
table
- the row window measures by part names, so a second component can reuse it
- PageUp, PageDown and Control Home and End reach any row of a windowed list through rowRequest
- with slice bound the keyboard cursor holds its record across a moving window
- the window arithmetic, paired, over measured row extents
tabs
- ArenaTabs reports a chosen tab as valueChange, never a bubbled native change
tailwind
- themeImports follows url() imports and stylesheets named without ./, and ignores an import inside a comment
- the compile cache keys on every file Theme.css imports, so an edit to one recompiles
- the card harness loads Phosphor from beside the module, at every depth
- a card writes the part each sample's family reaches
- ArenaTreeView's surface, a flat tree of rows indented by level
- arena-sticky-head keeps a table's header row in view inside a box that scrolls
- ArenaHeatmapChart's surface, rows of cells whose colour is their magnitude
- ArenaFunnelChart's surface, one ordered series narrowing stage by stage
- ArenaGaugeChart's surface, a dial for one value against a banded scale
- ArenaSparkline's surface, a word-sized line for one series with no axis
- ArenaSplitButton's surface, an action with a menu of alternatives at its end
- ArenaFilterBar's surface, the filters in effect over a row of controls
- ArenaPinInput's surface, a code entered one character per cell
- ArenaSlider's surface, a track whose thumbs place themselves by a fraction
- ArenaNumberField's surface, a field that holds one number
- ArenaTimeline's surface, milestones down the side by default
- ArenaStepper's surface and the four words a step says
- ArenaAccordion's surface, a stack of sections under headings
- ArenaCopyButton's surface, its contract and the three words it says
- ArenaLink's surface, its contract and the hint it says for a new tab
- ArenaKbd's surface, a cap drawn exactly as the palette's escape cap
- ArenaDivider's surface, and the orientation family's two rule channels
- ArenaFileInput's surface, its claims and its reserved name shipped
test
- both acceptance tables hold a disabled interactive row and a non-interactive chip
- the adopter's manifest is a named file this tree does not hold, and the contributor-token budget carries the catalogue sentence
- fixtures and examples are named for catalogue entries rather than for the products they were measured on
- the icon manifest, plan and check-icons tests each assert one thing, without the convoluted negative or the repeated assertion
- the root-imports fixture lives under the repo's .cache, is removed after the run, and its helper moves above the tests
- the theme sheet test drops an option themeCss no longer takes
- the exit 2 row's phrase is the row's new text, and a build missing harfbuzzjs or wawoff2 with a local font is a run of it
- the no-glyph warning is exercised twice in Angular, the icon harness asserts the use sits in an svg, and the side nav weight test names symbols
- check:consumer reads the card through the shared tab loader and the bw roles contrast.css widens, and the export pin, a default root and the family order are pinned
- check:consumer keeps its browser in one holder object, with no casts in the cleanup
- check:consumer reads a real card root, bounds the page load, and launches and closes its browser only when a measurement needs it
- check:consumer measures the high-contrast widening in Chromium on a build whose root style plugin is the project's own
- the root contrast test finds the root answers block by its content, and the import list is alphabetical
- the no-flash snippet test evaluates the script without Window.eval, so it runs on the bun CI pins
- the Angular re-register tests say what a leftover property means
- the D12 golden is stored without the generated header, so it needs no UNMARKED entry
- the D12 golden lives beside the repo's test support, outside the CLI tree a package copies, and the install route budget carries the polarity report
- the parity gates hold a light runtime palette, the root plugin's light group, levels and washes
- D12 byte identity is held to a golden sheet the emitter wrote before the runtime-palette work
- a React scope re-registered with the other polarity updates its host
- the server render of a pending scope draws no palette class
- the runtime palette probe test removes its temp directory
- the no-flash snippet test reads its sources from the repo root, so it runs from the compiled output too
- the style plugin rules export list names POLARITY_HOOKS
- check:consumer holds a runtime palette from the shipped module equal to the shipped CLI's class, key by key
- the dark-group fixture lives where a repo-relative path reaches it on every drive
- the palette scope suites assert the page theme exactly and restore it after each case
- proximity pins a palette, a plugin and a density on one element and the default island's focus ring and mixed aliases, and the density cases are named for what they read
- check:palette-islands renders a palette island each way in both layers, overlay open
- check:portability declares the framework sources it reads without the build trees
- check:portability refuses .pathname on a file URL anywhere in the tracked sources
- the heat-ladder cases read their files through fileURLToPath, so Windows finds them
- the Angular suites run from source in JIT for a task's loop, and the emitted run stays the verdict
theme
- Angular stores the palette only when a user chooses one, and the page says how to follow the system again
tokens
- a keyword token and a half spacing step a role default can name
tree
- windowed, a long tree draws the rows near its viewport and keeps the keyboard whole
- the tree model and the type-ahead, paired, one walk for both layers
workflows
- the release pages say which build each workflow runs, that every job has a time limit, and what the audit job fails
- an audit job beside the gates fails a run whose graph does not declare a file a traced node opens
Everything else
- chore(release): 13.0.0, stated in plugin.json, the marketplace entry and its tag ref, server.json and the README, with the npm question links regenerated against v13.0.0
- fix(mcp): the rule module travels into bin/ with icon-css, which it imports from beside itself, so the packed server no longer throws ERR_MODULE_NOT_FOUND at its first spawn, and check:mcp reports a beside specifier that names no assembled file
- fix(llms): a reference whose opening already carries its "Read this" sentence is described by it once, so environments.md no longer repeats it in llms.txt
- docs(bundlers): the bundler index says Arena is agnostic to the bundler and a measured one adds its optimizations, and the consumer-bundler budget rises to 18,600
- feat(site): the landing page shows what each measured bundler downloaded after the benches section, read from the table environments.md records
- fix(site): check:site takes an adopter's page at or below one it declares as its own, so the 404 Next.js writes beside its entry no longer drops the benches from the site
- test(check): check:contained-parts fails a layer or sink that draws nothing, and a HELD entry no sink draws
- test(check): check:contained-parts sweeps both kitchen sinks and fails an absolute part placed outside its component
- docs(theme): theme.md says how a runtime palette is removed and what the page, the storage and a scope do then
- fix(tailwind): nine components with a hidden part are their own containing block, and check:hidden-parts fails a manifest whose hidden part has none
- feat(angular): ArenaThemeService.unregister removes a runtime palette, answering every removal case React answers
- feat(react): unregisterArenaPalette removes a runtime palette, and the page follows the system when it was the current one
- docs(bundlers): esbuild's sprite is not exercised, and Bun's 1.35 dictionary figure is stated as measured with no cause
- docs(bundlers): every measured row matches the latest run's draw, rolldown and Parcel say the run before measured them, Bun and esbuild are measured with their configs, and the sprite rows are cited
- docs(bundlers): every row names what exercised it, rollup and rolldown say the sheet is linked as written, and the Angular sprite paragraph is back
- docs(bundlers): every measured row names the run that measured it, and the environments are the halves an adopter built
- ci(pages): the workflow installs nothing in the adopter and runs the adopter's own build, which installs what it needs
- fix(angular): final-review fixes for the CDK overlay, flat sheet and icon list
- feat(cli): the Angular layer writes the icon list as TypeScript, which ngc emits
- feat(cli): arena build writes the package sheet flat, so a page can link it and every bundler reads the same rules
- build(angular): the package's arena-cdk.css carries the CDK overlay rules, so no resolver needs the style condition
- docs(calendar-event): the contract says the chip's body stops the click, and the kebab and panel controls reach the page
- docs(angular): one consequence travels with the attribute-selector shape, the demo emitters' selector
- docs(calendar-event): the chip's body stops the click, and the kebab and panel controls reach the page, in both prompts
- docs(calendar-event): the React prompt says interactive decides the button, as the component does
- docs(calendar-event): the Angular prompt says to leave interactive off for an inert chip, never disabled
- fix(card,table-row): Enter or Space inside a nested field keeps its default, and the container cancels only its own
- docs(card): a button inside the card runs its handler and never activates the card, in both prompts
- docs(angular): the bubbling-name rule says its reason in two sentences
- test(react): the chip rows draw inside ArenaCalendar and the own-box row counts the document, as the Angular table does
- fix(react): onActivate on a button carries no payload, never the DOM click
- test(scripts): the dotted-event fixture names ArenaTableRow.activate, the event the contract declares
- chore(generated): member docs, prompts, demos and API pages say activate and valueChange
- test(angular): the own-box row sits last, in the React file's order
- fix(angular)!: a native change inside a field reaches the page, and valueChange carries the value
- fix(react)!: onValueChange carries a field's value, and a checkbox group still reports its set
- fix(angular)!: a click inside a button, card or row reaches the page, and activate reports the activation
- fix(react)!: onActivate reports a button, card or row activation, and an ArenaButton still opens a menu
- feat(contracts)!: activate and valueChange name each event apart from the DOM, and check:api refuses click and change
- fix(cli): an empty icon result hands no glyph either, so an element or nothing leaves the glyph report on (E2)
- refactor(cli): boundClass stays inside the audit, the one module that reads it
- fix(cli): an icon whose every result is an element hands no glyph and leaves the glyph report on (E2)
- fix(cli): an icon attribute with spaces around its = is read as one, as the audit reads it
- docs(cli): a glyph the glyph report names still reaches the sprite, and raw-glyph reports a glyph drawn through a class
- fix(cli): an object under Angular's [class] is read by its keys, as under [ngClass] (E1)
- test(cli): the every-icon-a-literal case draws literal icons, bare and braced, and still reports the glyph they leave undrawn
- test(cli): the N2 case names the spread it holds, on an Arena tag other than ArenaIcon, since ArenaInput takes an icon
- test(cli): the D1 table holds each row's verdict alike in both layers, not only its count
- docs(routes): the consumer-install reason names the glyph report an icon expression stills
- test(cli): an unquoted template class attribute is read as HTML reads it, [class]=cls bound and class=arena-a literal
- test(cli): valueResults pins &&, a chain of || and an object entry whose value is a ternary
- test(cli): the toggled Phosphor class case asserts its one finding before reading its verdict
- test(cli): classValues reads [class] and [ngClass] after a braced attribute
- fix(cli): an icon element after a paren and a space hands no glyph, so icon={( )} leaves the glyph report on
- fix(cli): raw-glyph reads a bound class by its results, so a toggled arena- class is silent in both layers
- fix(cli): a glyph counts as drawn once any icon member takes an expression, and the glyph report says what it measured
- fix(cli): an attribute after a braced one is read, so ArenaIcon key={n} draws its glyph
- docs(card): the eyebrow member names the eyebrow ink its manifest reads
- docs(scales): the focus and navigate-or-filter lines name the focus ring and the accent rather than the default skin's hues
- fix(docs): a code span the hue gate skips ends on its own line, and the alias case names both properties
- docs(tooltip): the contract says the tooltip takes the page's ink as its ground, as the prompt does
- docs(eyebrow): the card, unauth card and onboarding step name the eyebrow ink their manifests read
- test(heatmap): the fourth-edge case writes its fills the way its neighbours do
- docs(confirm-dialog): the destructive line says the eyebrow is drawn in the danger tone
- docs(prompts): the bottom nav and sheet prompts give the viewport branch as a whole sentence
- feat(docs): check:docs refuses a hue of the default skin in prompt and contract prose
- docs(contracts): every contract names the slot it paints rather than the default skin's hue
- docs(heatmap): the prompts and the test titles say a grid draws the darkest step only when its largest value reaches the fourth edge
- docs(doughnut): the pie line names the heading ink the centre figure is drawn in
- docs(prompts): every component prompt names the slot it paints rather than the default skin's hue, in the second layer too
- docs(prompts): every component prompt names the slot it paints rather than the default skin's hue
- test(tabs): the manifest claim and the polarity restatement count follow edge-tab-selected
- test(colors): the two colour suites share one unlayering fixture, and the packages suite reads fs from one import
- fix(install): a Tailwind v4 entry leads with Arena's layer order, so a project's layered rule beats a package default
- docs(style-kernel): the selected tab's rule stands after the plugin paragraph it had split
- fix(compat-aliases): a compound variant that reads a colour alias is reported as a slot is
- test(proximity): a tag wider than its container breaks to the container's width, and a palette scope wears the surface radius
- docs(colors): the defaults' prose says the layer wins, not the import order, and each route reason names its own clauses
- test(charts): each chart's rail flip is a case of its own, and the two rail styles read alike
- test(colors): the layered readers are held to colors.css's own unlayered body, and a var() fallback holds no literal
- fix(checks): the defaults checks name their layer from one constant, and only an emitting theme block counts as a self-reference
- fix(tabs): the preset's theme map carries edge-tab-selected, and config.md counts the new role
- docs(install): the theme wins over the package defaults whatever order a toolchain emits them in
- fix(tokens): the package declares its colour and type defaults in a layer the theme beats in any order
- docs(tabs): the prompts and the scales name the selected rule
- feat(tabs): the selected rule reads the colour role edge-tab-selected, which a plugin answers
- fix(tag): a tag keeps its word whole in a row and breaks only when wider than its container
- fix(timeline): the connector joins each dot to the next, in both orientations and at every density
- fix(palette-scope): the scope's ground takes the surface radius, so a scope around one card shows no corner of the other palette
- fix(pin-input): the field and its row shrink, so six cells fit a narrow card
- test(colors): the alias test names the two literals that hold a fixed percentage
- fix(colors): the held-back aliases and the soft washes read their levels, so a palette that raises one moves them too
- fix(charts): a rail that does not scroll draws the end label's overhang, and one that scrolls clips it
- test(package): the channel case reads only the chain entries that have a source
- test(markers): the guard reads its marker list from the directives the layer declares, so all ten are checked
- fix(package): the shipped channels are read through declaredProperties, so a property named inside a string is not one
- fix(consumer): the probe expects usage to name a plugin's rules for an undrawn card as reaching nothing
- docs(cli): the two plugin-name rules are told in sentences of one claim each
- fix(audit): the hook a part name carries is read by its prefix, and the step's cases type their reports
- fix(audit): a var() whose name a template literal finishes is not read as an unknown property
- test(usage): every component that declares a part names a sheet each shipped map draws, so the painted count finds it
- fix(package): a property named inside a string is not a channel the shipped CSS declares, and the size channel is pinned by name
- refactor(contrast): the axis report and its gate word the comparison through one helper
- test(markers): the guard's copy charges a marker inside a nested element that queries none to nobody, and the walk is named innermost
- style(main): the main id import sits with the other imports in both layers
- test(audit): a bare primary under *ngIf counts against the primary its view always draws
- fix(build): an icon bound in single quotes, interpolated or spread onto an active navigation item is read as an expression
- fix(api): an arrow whose return is void with a null or undefined arm still reads as an event
- fix(audit): usage matches a part's component to the shipped sheet name, unknown-property skips --tw- and reads @Property
- feat(audit): a plugin rule reading an undeclared property or naming an undeclared part is reported, and usage counts only parts the project draws
- feat(package): the token catalogue lists the channels a plugin may read, and the vocabulary each component's parts and hooks
- fix(angular): void elements do not hold the marker charge in the guard's copy, and the paragraph names the innermost element
- fix(markers): a void element written without a slash no longer hides a later sibling's marker
- chore(routes): contributor-component budget 77600 to 77800 for the corrected projection paragraph
- fix(angular): the projection paragraph states the query rule and where an ng-container leaves a marker
- fix(markers): an ng-container breaks the charge, because it carries no attribute into a named slot
- fix(angular): every marker query reads direct content, so an imported marker inside a nested host fills no outer slot
- fix(markers): a marker is charged to the element it is projected into
- test(contrast): the axis report holds a darker axis that still has no more contrast, and names no layer in its titles
- fix(contrast): the axis report says the axis has no more contrast than the grid, which holds when it is equal or darker
- fix(build): an active navigation item whose icon is an expression finds its filled glyph in the sprite
- fix(component-map): a component drawn from a sibling of its own category reaches the React map, and the main id lives where both its readers import it
- fix(api): a validator returns a string in every layer, and the reader reports a return the contract does not have
- docs(prompts): a popover's action is secondary beside the view's primary
- fix(audit): a primary-default component in a branch counts against the primary its view always draws
- test(menu): a typed character outside the basic plane reaches the row it starts, in both layers
- test(menu): a disabled row never holds focus, asserted with the node helper
- docs(prompts): one claim a sentence where removal, the menu keys and the focus helpers are described
- fix(style-plugin): the complete plugin paints the menu's group part
- test(breadcrumbs): the suite headers naming the jsonLd verdict wrap like the prose around them
- docs(prompts): removal states its condition once, Tab closes the menu from any row, and a space in a run is the run's
- docs(behaviour): modal-focus is named wherever a modal's focus and Escape are described
- test(behaviour): an also pattern with no file is named as also's, and one entry is held to concrete messages
- test(command-palette): Escape on the panel closes the palette, not only Escape in its search field
- test(focus): StrictMode's simulated unmount never focuses the invoker, and a dropped step focus lands on the first control
- test(popover): Tab-out reads a radio through its group's stop in both layers
- test(focus): a form attribute owner and a disabled checked radio hold the radio group's tab stop
- fix(menu): a space inside a type-ahead run is the run's, and every roving key reads one step table
- docs(prompts): removing an open modal returns focus and reports no close event
- docs(prompts): removing an open modal counts as closing it
- fix(focus): a modal removed while open returns focus to its invoker
- fix(focus): a modal takes back focus a step change dropped
- docs(prompts): the command palette's focus is a modal's, taken at open and returned at close
- fix(command-palette): the palette takes, traps and returns focus as a modal, and binds modal-focus in both layers
- fix(menu): rows rove by arrow, Home, End and type-ahead, headers name their group, dividers are separators
- feat(behaviour): menu-button holds the rows, separators, roving focus and keys of the menu it opens
- docs(prompts): the confirmation's content is its description
- feat(behaviour): modal focus is one additive pattern every dialog binding adds, and alertdialog requires its description
- fix(react): the confirmation's body describes it
- feat(behaviour): a render suite holds every also pattern a binding adds, and the keys region names its keys
- fix(focus): a radio group is one tab stop in every focus list, entered on its checked radio
- test(angular): absent-node asserts use assertNoNode, and the select hint case states its fact without naming a layer
- fix(angular): the radio group types its resync query as radio inputs, so it compiles under strictTemplates
- docs(slider, pin-input): the controlled sentence names the slider and the code, not a field
- test(angular): a host following change moves the radio dot, and a range host keeps two end-thumb steps
- test(react): the button-type scan reads a // inside a string as code, not a comment
- fix(react): an empty-string or true secondary action draws no error-state actions row
- fix(react): an error state with no retry and no secondary action draws no actions row
- fix(react): the button-type scan resolves its own directory the way the other react tests do
- test(react): the palette empty-line walk narrows its regex groups
- feat(checkbox)!: a checkbox always carries a name, and showLabel false keeps it without drawing it
- test(angular): the no-anchor overlay case reaches listen with the anchor gone
- fix(angular): a checkbox, switch and radio group hold one state after every click, forms-bound or refused
- fix(angular): a non-interactive card stops every click that starts in it
- fix(angular): an anchored overlay re-places itself when its own pane resizes
- fix(angular): a closed onboarding host names no part
- fix(angular): a controlled pin input, slider and number field keep every edit made before the host re-renders
- test(react): the command palette's empty line is pinned to the panel as its parent and kept out of the listbox
- fix(angular): a select with no error writes no aria-invalid
- fix(react): the command palette's empty line sits in the panel after the listbox
- fix(react): a paneled calendar chip that cannot be activated takes focus on its body alone
- fix(react): every button a component draws writes type="button", so none submits a form around it
- test(style-plugins): the root-ring test is named for what it asserts, and a later plugin that fills a ring's role by default gets no ring
- test(style-plugins): a ring inside the root is not laid at a later plugin that takes one of its roles only by default
- fix(build): an icon expression's literals count as drawn and an element nested in it does not
- fix(style-plugins): a ring wholly inside the root plugin is reported against the root alone, not a later plugin
- fix(build): an icon attribute holding a nested element does not count its glyph as drawn
- fix(cli): a source whose only Arena tag is a typo still gets its components report when no component resolves
- test(check): the unassembled-package refusal spends one spawn per case, so no case nears the runner's 5 s default under load
- docs(style-plugins): the role-contract paragraph wraps at the width the rest of it keeps
- docs(cli): the glyph kind names a sprite glyph your sources draw through no ArenaIcon, icon attribute or symbol reference
- fix(style-plugins): a role alias ring closed between the root plugin and a later one is refused, and a ring through a default names it
- fix(style-plugins): a later plugin's colour role alias is restated under each palette, so a palette class on or below it does not replace the answer
- fix(build): a glyph handed to ArenaIcon or an icon attribute inside a JSX expression counts as drawn, so it gets no glyph report
- test(cli): the audit and doctor suites typecheck, and the doctor null test names an absent git and states what it asserts
- test(check): the wash test names the held kind that supplies its exit 1
- fix(contract): the runtime data drops the unread hasRoot, and the heat order test no longer loops over plugins that cannot move it
- test(build): the glyph report tests pin each report by message and the environment test draws through arena-icon
- test(check): the heat strict test draws its glyph through arena-icon so the glyph report stays out of it
- feat(build): arena build reports a sprite glyph that no ArenaIcon or icon attribute draws
- feat(contract)!: the heat ladder is the palette's, so the five heat-step roles leave roles.json and the heatmap reads --color-heat-N
- test(audit): the lone ngClass line carries no raw-glyph finding at all
- fix(audit): raw-glyph keeps its hedge for a bound class, and its tests pin the line and the negatives
- fix(audit): raw-glyph reads a tag's own class only, and names a bound class that may hold a Phosphor glyph
- test(style-plugins): a ring wholly inside one group is reported once
- fix(style-plugins): a ring is deduped by the roles it holds and the known answers are built once per call
- fix(style-plugins): a role alias ring is refused across the root and light answers, and the shared gate rule admits the same answers the build does
- fix(style-plugins): a plugin may answer a role with its default's form, a resolving keyword alias or another colour role
- test(doctor): one run-level text-reading test, and the header says plainly why an empty list gives null
- fix(doctor): git is asked over NUL-separated stdin so non-ASCII outputs are read back, and the CLI owns its one bare git spawn
- fix(cli): a missing re-exported helper stops the sheetless list instead of shrinking it, and the provider is named once
- fix(nav): a side or bottom nav badge that is not a number draws nothing in both layers, and React warns once
- fix(cli): a provider the React index exports is placed as drawing no sheet, so arena check does not report it as a missing component
- fix(doctor): the .gitignore note asks git which outputs it ignores, and names those it does not
- check:measured-box pins that a generic React call is found beside its Angular twin
- ArenaMultiSelect: the Angular half and its forms adapter, so the set stands in both layers and both sinks
- ArenaMultiSelect: the React half, a set of chips in one tab stop over the combobox list
- ArenaMultiSelect: the contract, the words and the slots it adds to the combobox manifest
- ArenaTag: the Angular remove button reads its tag's text, so both layers name it alike
- ArenaTag: the React remove button reads its tag's text and leaves a composite's Tab sequence on request
- ArenaTag: a tab stop a composite can hold out, a remove word to read and a hit area a thumb can hit
- ArenaCombobox: the Angular half and its forms adapter, so the control stands in both layers and both sinks
- ArenaCombobox: the React half, a field whose list floats in the top layer and never takes focus
- ArenaCombobox: the contract, the shared manifest and the fixture; combobox leaves RESERVED
- ArenaTooltip: the Angular bubble attaches through the shared overlay and joins the stack
- ArenaTooltip: the React bubble is a manual popover on the shared stack, so no ancestor clips it
- ArenaMenu: the Angular panel attaches through the shared overlay, pushed inside the viewport
- ArenaMenu: the React panel is a manual popover on the shared stack, and Tab leaves it from the last row
- ArenaPopover: the Angular half, so the component stands in both layers and both sinks
- ArenaPopover: the contract, the manifest and the React half; popover leaves RESERVED
Every commit: v12.1.1...v13.0.0