Skip to content

Chota v1.0 execution tracking #121

Open

Description

@jenil

Purpose

Coordinator-only program record for Chota v1. This issue is the source of truth for current release readiness and accepted evidence. It remains open until the final release is complete.

Authority and branch policy

  • v1 is the sole long-lived integration branch. Work branches use work/* or fix/*, target v1, and never use v1/*.
  • main remains unchanged by v1 implementation until the owner-approved v1 -> main release PR.
  • Authority order: accepted evidence on this issue decides release readiness; each individual card decides its scope and acceptance; Project Does it support ie9 #2 reflects the current queue/status. PLAN.md is local control guidance only and does not record dynamic status or evidence.
  • A card is Done only after its evidence is attached, reviewed, and merged to v1. Code or a merged branch alone is not evidence.

Current integration snapshot

  • Integration branch: v1
  • Current remote v1 tip checked 2026-07-30: d2512454f74893df14225db9fcfcc43556d3b5f0. This is the accepted merge commit for v1: validate candidate issue #102 mobile grid overflow #132; release readiness still requires the remaining Week 2 evidence contract.
  • Owner: repository owner
  • Week 1 foundation is accepted. Week 2 acceptance is governed by the cards below; do not infer it from a historical project status.

Accepted Week 1 evidence

Card Evidence Status
#122 Support policy matches browserslist, MIGRATION.md, and browser-support baseline. Accepted
#123 Isolated v1@9ee307b archive passed yarn install --frozen-lockfile && yarn test && yarn build using Volta Node 24.18.0 and Yarn 1.22.22. Accepted
#125 Current build baseline: 3310 gzip bytes; ceiling: 4096 bytes. Accepted
#126 Architecture and contributor docs match the build, public API, Volta workflow, and branch policy. Accepted
#127 zlib size gate passes at 3310 bytes; deliberate incompressible artifact reached 14904 bytes and correctly failed the 4096-byte ceiling. Accepted
#128 Dependabot proposes monthly updates; maintainers review/batch quarterly. Accepted

Week 2 acceptance contract

Coordination

  • A worker executes one card and returns changed files, commands/results, artifact links, API impact, and unresolved risk.
  • The coordinator owns branches, commits, PRs, board state, and this evidence record.
  • Public API changes, VRT baseline updates, size exceptions, scope decisions, and release actions require owner review.
  • A failed card stays In Progress. Its retry, re-scope, cancellation, or defer decision is recorded on the card; it is never silently removed.

Final exit criteria

Close this issue only after #145 has completed: owner-approved v1 -> main release PR merged; matching v1.0.0 tag and package published; package/CDN verification recorded; and #146 contains post-v1 dispositions.

Evidence control addendum

This issue is coordinator-only. Dynamic status and accepted evidence must be updated here only after the coordinator verifies the linked card's exact diff, current command output, artifact paths, and commit SHA.

For every accepted card, record: card/PR, merged SHA, changed files, required commands and exit statuses, browser/OS matrix where relevant, artifact links, disposition, owner decision, and unresolved risk. “Done,” a green unrelated workflow, a screenshot, or a stale plan snapshot is not acceptance evidence.

When a card fails or evidence is incomplete, keep it In Progress and record retry, re-scope, defer, or cancel. Do not close an issue or promote a fix based only on a worker recommendation.
\n

Accepted Week 2 evidence — #132

  • Card: v1: validate candidate issue #102 mobile grid overflow #132 — mobile grid overflow validation
  • PR: #165, merged into v1
  • Merge SHA: d2512454f74893df14225db9fcfcc43556d3b5f0
  • Validation: Chromium card-specific test passed 4/4 with 0px overflow at 320, 375, 414, and 1280px
  • Disposition: Col overflow in mobile devices #102 closed as not reproducible under the support policy
  • Changed files: fixture, validation spec, and two evidence screenshots only
  • Risk: exact reporter device/browser remains unverified

Accepted Week 2 evidence — #129

Accepted Week 2 evidence — #124

  • Card: v1: establish Chromium visual regression testing #124 — establish Chromium visual regression testing
  • PR: #154 (initial macOS baselines), #158 (Linux Chromium baselines), merged into v1
  • Merge SHAs: cd117d1418 (vrt: establish Chromium visual regression testing #154), 6e2e139025 (chore(vrt): add Linux Chromium baseline screenshots for #124 #158)
  • Coverage: index.html and components.html at desktop 1280×720 and mobile 375×667
  • Baselines: 4 macOS (*-darwin.png) + 4 Linux (*-linux.png) Chromium references; platform suffixes preserved (separate rendering environments)
  • Command: yarn test:vrt runs screenshot specs only, Chromium-pinned
  • Deliberate regression: a temporary local visual change produced a screenshot failure and reviewable diff (restored before handoff)
  • VRT output: not published in the npm package
  • Owner decision: reviewed macOS vs Linux screenshot pairs; approved visual equivalence (minor font-rendering difference on sun emoji only)
  • Disposition: accepted
  • Risk: none

Accepted Week 2 evidence — #130

  • Card: v1: establish fixture accessibility baseline #130 — fixture accessibility baseline
  • PR: #156, merged into v1
  • Merge SHA: be9f1c7e84
  • Baseline: reviewed finding inventory (not a zero-violation claim); 9 real axe-core findings documented with owner-approved dispositions (fix in v1 via v1: restore visible keyboard focus #139, documented limitation, or defer post-v1)
  • Command: yarn test:a11y fails on a new finding, severity increase, or changed affected node unless the owner reviews the baseline update on v1: establish fixture accessibility baseline #130
  • Keyboard observations: recorded separately for visible focus, links, native <details> disclosure, and form controls
  • Deliberate violation: a temporary violation proved the checker detects a regression and was restored before handoff
  • CI: a11y step runs against built fixtures, required and fail-closed
  • Disposition: accepted
  • Risk: none

Accepted Week 2 evidence — #131

  • Card: v1: add built CSS public API contract check #131 — built CSS public API contract check
  • PR: #157 (manifest approval), #168 (enforce built-CSS contract), merged into v1
  • Merge SHAs: 44b4273856 (fix(a11y): #131 review and approve public API manifest #157), 6340e831e4 (fix: enforce built CSS public API contract #168)
  • Manifest: test/vrt/api-manifest.json — 14 owner-approved custom properties, 185 owner-approved selectors
  • Command: yarn test:api — parser-based check of built dist/chota.css (not substring matching); insensitive to declaration order, whitespace, and minifier formatting
  • Deliberate-failure demonstrations: removing .card from a built-CSS copy and removing --grid-maxWidth from :root both reported missing through the real contract assertion; state restored, no committed dist/ artifact
  • CI: API contract step required and fail-closed; green on PR test: harden Week 2 regression coverage (#177) #178 pre-merge commit 5c589e5c93
  • Owner decision: 14 custom properties and 185 selectors approved as the public v1 CSS API; future manifest changes require explicit review
  • Disposition: accepted
  • Risk: none

Accepted Week 2 evidence — #134

Accepted Week 2 evidence — #135

Accepted Week 2 evidence — #136

  • Card: v1: validate candidate issue #61 spacing utilities #136 — validate no margin and padding #61 (spacing utilities)
  • PR: #176, merged into v1
  • Merge SHA: fd2a7ccfec
  • Coverage: test/spacing-utilities.html + test/vrt/validations/spacing-utilities.spec.js, loaded via <link rel="stylesheet" href="/dist/chota.css">
  • Assertions: computed-style checks for default 10px half gutter, -10px row gutters, and zeroed spacing from .is-marginless / .is-paddingless on container, row, column, numbered column, and nested grid markup; stable data-test-id locators
  • Command: npx playwright test test/vrt/validations/spacing-utilities.spec.js --project=chromium and yarn test:vrt both exit 0
  • VRT policy: no screenshot baseline added — computed-style assertions are the regression proof for this spacing contract
  • Disposition: close — utilities deliver their documented semantics; no production CSS change
  • Risk: none

Accepted Week 2 evidence — #177

  • Card: test: harden Week 2 regression coverage #177 — harden Week 2 regression coverage
  • PR: #178, merged into v1
  • Merge SHA: bf82373315; final pre-merge commit 5c589e5c93
  • Linux CI proof: CI run 31239828832 — all required steps SUCCESS on ubuntu-latest: Lint, Build + size gate, API Contract, VRT (Chromium), a11y, Firefox + WebKit smoke (artifact-upload steps correctly skipped — no failures)
  • Completed work: mobile-grid spec converted to toMatchSnapshot(); 7 direct-screenshot calls classified (6 orphaned removed); test/vrt/dark-mode.spec.js (2 tests) and test/vrt/breakpoints.spec.js (32 tests at 480/481, 599/600, 899/900, 1199/1200px) added; package.json test:vrt whitelist updated 4→6 specs with owner-approved impact matrix; suites remain Chromium-pinned
  • Local results: 62 VRT + 7 a11y + 5 API tests pass
  • Changed files: 10 total (4 added, 2 modified, 4 deleted) — test/** and package.json only; no src/ or dist/ changes
  • Disposition: accepted
  • Risk: none

Accepted Week 2 evidence — #172, #173 (test-harness follow-ups)

Week 2 closeout note — #133

Accepted Week 2 evidence — #180

  • Card: test(vrt): full-page and per-section docs-page coverage before #137/#138 #180 — full-page and per-section docs-page VRT coverage before v1: migrate root font sizing without visual regression #137/v1: normalize existing hardcoded design tokens #138
  • PR: #181, merged into v1 (squash)
  • Merge SHA: 39659b8e57a04094b0562f515327918989d09270
  • Problem solved: VRT captured only the first fold (fullPage: false) of index.html and components.html; 22 of 23 sub-sections on index.html and all 7 sections on components.html had no screenshot baseline. A rem-derived regression from v1: migrate root font sizing without visual regression #137/v1: normalize existing hardcoded design tokens #138 could shift .card padding, .tag font-size, .button height, or .col-* widths without being caught.
  • Added coverage:
    • 4 full-page screenshots (fullPage: true, desktop + mobile × both pages)
    • 8 per-section element screenshots (desktop only; 5 on components.html, 3 on index.html)
    • 4 focused computed-style assertions pinning exact rem-derived values: .card padding 10px 20px and border-radius 4px; .tag font-size 16px and padding 5px; .button height 38px; .col-6 width 580px at 1280px
  • Section locators: index.html uses existing id attributes; components.html got additive data-test-id on 7 <section> blocks (no visible/behavior change)
  • index.html #embedded determinism: native <audio>/<video> controls, <canvas>, <meter>, <progress>, recursive <iframe> render non-deterministically when scroll-stitched and carry no Chota CSS contract; full-page tests inject #embedded { visibility: hidden } via page.addStyleTag (test-only, fixture unchanged, layout box preserved)
  • Linux baselines: generated from CI failure artifacts (run 31319866165); all 12 failures were "snapshot doesn't exist, writing actual" — no real visual diffs. 12 -chromium-linux.png baselines committed in the same PR.
  • CI: run 31319995485 on bde8c33 — all required steps SUCCESS on ubuntu-latest: Lint, Build + size gate, API Contract, VRT (Chromium), a11y, Firefox + WebKit smoke
  • Local: yarn build 3321 bytes (no production CSS change); yarn test:vrt 88 passed (was 62; +26 new tests)
  • Scope: 4 files modified (test/components.html, test/vrt/index.spec.js, test/vrt/components.spec.js, test/vrt/README.md) + 24 new baselines (12 darwin + 12 linux); no src/, dist/, playwright.config.js, .github/, test/index.html, AGENTS.md, test/AGENTS.md, PLAN.md, or package.json changes
  • Disposition: accepted
  • Risk: components.html full-page capture includes external images (Google logo, icongr.am icons); if those hosts are down/slow on CI, the full-page baseline could fail. The per-section captures and computed-style assertions cover the actual Chota contracts and are deterministic. Pre-existing risk (first-fold capture already included the nav's Google logo).

Accepted Week 3 evidence — #139

  • Card: v1: restore visible keyboard focus #139 — restore visible keyboard focus via :focus-visible
  • PR: #182, merged into v1 (squash)
  • Merge SHA: 78fbcf4e6f6e907b2acc8f11e73e3fecdf292e62
  • This is the first production CSS change in v1 touching shared form CSS. Reviewed via a 4-developer subagent workflow (D1 investigate, D2 CSS, D3 tests, D4 review) before merge.
  • CSS change (src/_form.css): removed outline: none + subtle 1px box-shadow :focus rule; added grouped :focus-visible rule on a, button, input, select, textarea, summary, [tabindex] with outline: 2px solid var(--color-primary); outline-offset: 2px;; added form-control :focus-visible rule preserving border-color + box-shadow (switched from :focus to :focus-visible so it no longer fires on mouse click — fixes a latent bug). Two rules split to satisfy stylelint no-descending-specificity.
  • Browser support: :focus-visible supported across the entire browserslist (Safari 15.4+, iOS 15.4+, latest Chrome/Firefox/Edge); no :focus fallback needed.
  • a11y baseline fixes: .icon-only buttons got aria-label="Search" + img alt="Search" (resolves button-name + image-alt); .brand link with decorative img got aria-label="Brand" (resolves link-name). test/vrt/a11y-baseline.json untouched — disappearing nodes auto-pass.
  • Tests: test/vrt/keyboard-focus.spec.js (NEW, 12 tests: 9 computed-style :focus-visible assertions on real Tab navigation + 3 focus-state VRT baselines); test/vrt/a11y-keyboard.spec.js (DELETED, was observation-only); package.json updated to wire keyboard-focus.spec.js into test:vrt and remove stale a11y-keyboard.spec.js from test:a11y.
  • Size: 3326 → 3372 gzip bytes (+46, within 4096 ceiling). baselines/size-baseline.json bumped with rationale citing v1: restore visible keyboard focus #139.
  • Linux baselines: 3 focus-state -chromium-linux.png baselines generated from CI failure artifacts (run 31321260633); all 3 failures were "snapshot doesn't exist, writing actual" — no real visual diffs.
  • CI: run 31321382755 on da4f650 — all required steps SUCCESS on ubuntu-latest: Lint, Build + size gate (3372 bytes), CSS Public API Contract, Visual Regression Tests (Chromium), Accessibility (axe-core — button-name/image-alt/link-name gone), Browser smoke coverage (Firefox + WebKit)
  • Local: yarn build PASS; yarn test:vrt 100 passed (was 88; +12 new); yarn test:a11y 4 passed; yarn test:api 5 passed
  • Scope: 13 files changed (src/_form.css, dist/chota.css, dist/chota.min.css, baselines/size-baseline.json, test/index.html, test/components.html, test/vrt/keyboard-focus.spec.js, test/vrt/a11y-keyboard.spec.js deleted, test/vrt/README.md, package.json, 6 focus-state baselines darwin+linux); no other source partials, a11y-baseline.json, playwright.config.js, .github/, AGENTS.md, test/AGENTS.md, or PLAN.md changes
  • Disposition: accepted
  • Risk: behavior change — :focus-visible shows outline on keyboard focus only, not mouse click (intended). Form-control border+box-shadow now keyboard-only (previously fired on mouse click too — latent bug fixed). No unresolved risk.

Accepted Week 3 evidence — #140

  • Card: v1: document dark-mode customization convention #140 — document dark-mode customization convention
  • PR: #184, merged into v1 (squash)
  • Merge SHA: 9ceb7707c3c930a17fc216980170871b715b262e
  • Problem solved: docs/index.html Customizing section showed a body.dark example that conflated the selector with prefers-color-scheme and implied adding the class alone activates dark mode. The truth: Chota ships NO body.dark rule; it is a consumer-owned convention where the consumer supplies the custom-property overrides AND decides when to apply the class.
  • Documentation changes:
    • docs/index.html lines 120–192: replaced the misleading block with a corrected Dark mode subsection (anchor #dark-mode) that (a) explicitly states Chota ships no built-in dark theme and no body.dark rule, (b) separates the two independent consumer decisions — "what overrides to apply" (the body.dark custom-property block, any selector works) and "when to apply it" (media query, JS toggle, stored preference, manual class), (c) makes clear the class does nothing without the overrides, (d) provides two alternative "when to apply" mechanisms (Option A media-query-only, Option B JS-adds-class).
    • docs/examples/dark-mode.html (NEW, 196 lines): standalone runnable side-by-side example using a deterministic checkbox toggle (no OS-preference dependency). Light pane never gets .dark; dark pane toggled via a demo-only .demo-pane.dark mirror (clearly labeled as NOT part of the contract; a page has only one <body>). Uses only the 14 documented Chota custom properties. Includes a "What this example proves" section.
  • Evidence verification:
    • grep -rn "body.dark" src/*.css → NONE (proves consumer convention)
    • grep "body.dark" dist/chota.css dist/chota.min.css → NONE in dist/
    • Example custom properties ⊆ test/vrt/api-manifest.json (14-token API): YES
    • test/vrt/dark-mode.spec.js (unchanged) is the contract evidence: fixture inline <style> supplies overrides, body.classList.add('dark'), asserts .card/.tag reflect --bg-color/--color-grey
  • No production changes: no src/*.css, no dist/, no test files, no baselines/, no package.json, no playwright.config.js. Size unchanged (3372/3372).
  • Consistency: README.md reviewed (no dark-mode mention, no contradiction); MIGRATION.md line 25 lists body.dark as preserved non-breaking contract (consistent with corrected docs).
  • CI: run 31321903880 — all required steps SUCCESS on ubuntu-latest: Lint, Build + size gate (3372), API Contract, VRT (Chromium), a11y, Firefox + WebKit smoke
  • Scope: 2 files (1 modified docs/index.html, 1 added docs/examples/dark-mode.html); no AGENTS.md, PLAN.md, test/AGENTS.md, src/, dist/, or test changes
  • Disposition: accepted
  • Risk: none — documentation only

Accepted Week 3 evidence — #141

  • Card: v1: document CSS-only interaction boundaries #141 — document CSS-only interaction boundaries
  • PR: #183, merged into v1 (squash)
  • Merge SHA: 3e1f65e0d9b13ccdbe1a50e2385969083b9c766d
  • Problem solved: Chota styles <details>/<summary> (.dropdown) and <a> links inside .tabs, but ships no JavaScript widget behavior. Users could mistake the visual styles for managed widgets (ARIA menus / tabpanels). The docs did not state the boundary.
  • Documentation changes:
    • docs/_includes/utilities.html lines 120–153: added "CSS-only interaction boundary" subsection to the Details section. States <details>/<summary> provides native disclosure (Tab focus, Enter/Space toggle — browser-native, not Chota). Lists what Chota does NOT provide: roving focus, role="menu"/role="menuitem"/aria-haspopup management, focus trapping/restoration, Escape-to-close, dismiss-on-blur, app ARIA state. Notes :focus-visible ring on <summary> (and all interactive elements). Links to WAI-ARIA APG Menu & Menubar for the contract Chota does not own.
    • docs/_includes/navs.html lines 97–124: added "CSS-only interaction boundary" subsection to the .tabs section. States .tabs styles visual nav links, NOT an ARIA Tabs widget (no role="tablist"/role="tab"/role="tabpanel"). Lists what Chota does NOT provide: arrow-key switching, panel management, focus movement semantics. Notes :focus-visible ring on tab links (keyboard only, not mouse-click). Links to WAI-ARIA APG Tabs.
  • Evidence verification:
    • Native <details> keyboard behavior verified via one-off Playwright script: after Tab, document.activeElement.tagName === "SUMMARY"; Enter → open=true; Enter again → open=false; Space → open=true. Browser-native.
    • grep -n "role=|aria-|haspopup|tablist|roving|focus-trap" src/*.css → only [aria-current="page"] selectors in _nav.css:57, _tab.css:18,25 (active-link styling hook, not widget roles). No role="*", no aria-haspopup, no tablist, no roving-focus, no focus-trap.
    • :focus-visible rule at src/_form.css lines 84–92: a, button, input, select, textarea, summary, [tabindex] → outline: 2px solid var(--color-primary); outline-offset: 2px;. Evidence: test/vrt/keyboard-focus.spec.js uses real Tab navigation, asserts :focus-visible matches + visible outline.
  • No production changes: no src/*.css, no dist/, no test files, no baselines/, no package.json, no playwright.config.js. Size unchanged (3372/3372).
  • Consistency: README.md reviewed (no JS-widget claims, "Good Semantics" bullet consistent); MIGRATION.md lines 25–26 reviewed (no contradiction). No edits to either.
  • CI: run 31321803912 — all required steps SUCCESS on ubuntu-latest: Lint, Build + size gate (3372), API Contract, VRT (Chromium), a11y, Firefox + WebKit smoke
  • Scope: 2 files modified (docs/_includes/navs.html, docs/_includes/utilities.html); no AGENTS.md, PLAN.md, test/AGENTS.md, src/, dist/, or test changes
  • Disposition: accepted
  • Risk: none — documentation only

Accepted Week 3 evidence — #137

  • Card: v1: migrate root font sizing without visual regression #137 — migrate root font sizing without visual regression
  • PR: #188, merged into v1 (squash)
  • Merge SHA: 9b9aee08961a113417892518df0105fe9561a27b
  • This is the first production CSS change touching shared base/token CSS (root font-size + all rem-derived values). Reviewed via a 4-developer subagent workflow (D1 investigate → D2 CSS implement → D3 tests/fixtures → D4 review) before merge.
  • Problem solved: Chota set html { font-size: 62.5% } (making 1rem = 10px), which hijacked the consumer's root font-size. The migration removes the override and divides all 35 Chota-owned rem tokens by 1.6, so at a 16px consumer root the rendered pixels are identical to before, while respecting the consumer's root (accessibility zoom, consumer overrides).
  • CSS changes (D2): src/_base.css removed font-size: 62.5% from html, added a source comment ("Chota does not set the root font-size. All rem values are relative to the consumer's html font-size..."), converted 9 rem tokens including --grid-maxWidth: 120rem→75rem, --grid-gutter: 2rem→1.25rem, --font-size: 1.6rem→1rem. src/_card.css, _form.css, _nav.css, _tab.css, _tag.css converted the remaining 26 rem tokens (all ÷1.6). em/%/px/vh values unchanged. _dropdown.css, _grid.css, _util.css, chota.css untouched (no rem / import-only). .container/.row/.col-* consume --grid-gutter via var(), so the value change propagates without source edits.
  • Tests & fixtures (D3 + coordinator fix):
    • test/vrt/root-font-scaling.spec.js (NEW, 3 tests): (1) 16px root rendered pixels match design intent (.card padding 10px 20px, .tag font-size 16px, .col-6 width 580px, .button height 38px); (2) 10px root scales proportionally by 0.625 (.card padding 6.25px 12.5px, .tag font-size 10px, .col-6 width 362.5px); (3) 10px/16px ratio = 0.625 for rem-derived properties. No toMatchSnapshot (no second baseline, per card requirement). Not wired into test:vrt (shared-config change requires owner approval — follow-up).
    • test/mobile-grid-overflow.html, test/nav-logo-full-height.html: converted fixture-authored inline rem values (÷1.6) including .demo-label (0.8rem→0.5rem, 0.5rem→0.3125rem) and 14 nav min-height/margin values in nav-logo-full-height (3rem→1.875rem ×7, 4rem→2.5rem ×3, 6rem→3.75rem ×3, 0.5rem→0.3125rem ×1). The nav-logo conversions were a coordinator scope correction — D3's brief limited the fixture edit to .demo-label, but the full inline-rem conversion was necessary for VRT to be green.
    • test/vrt/index.spec.js, components.spec.js: comment blocks updated to reflect new source rem values; assertion VALUES unchanged (rendered pixels still correct at 16px root).
    • test/vrt/README.md: documented the new spec.
  • Docs: MIGRATION.md new "Root Font-Size Migration" section with consumer impact (3 cases: no override, 62.5% override, different root) and reference table for --grid-maxWidth/--grid-gutter/--font-size. docs/index.html Customizing code blocks updated (75rem, 1.25rem, 1rem, 67.5rem) + explanatory sentence.
  • Size: 3372 → 3373 gzip bytes (+1, longer decimal tokens partially offset by removing the 62.5% declaration). baselines/size-baseline.json bumped with v1: migrate root font sizing without visual regression #137 rationale. Ceiling 4096 unchanged.
  • VRT baselines: NO regeneration needed — the rendered pixels at 16px root are identical (the key invariant: 0.625rem × 16px = 10px = old 1rem × 10px). All 100 existing VRT tests pass unchanged.
  • API contract: test/vrt/api-manifest.json NOT modified — custom property names unchanged; only values changed (values not in the manifest). yarn test:api 5 passed.
  • CI: run 31323976666 — all required steps SUCCESS on ubuntu-latest: Lint, Build + size gate (3373), CSS Public API Contract, Visual Regression Tests (Chromium), Accessibility (axe-core), Browser smoke coverage (Firefox + WebKit)
  • Local: yarn build PASS; yarn test:vrt 100 passed (no baseline regeneration); yarn test:a11y 4 passed; yarn test:api 5 passed; npx playwright test test/vrt/root-font-scaling.spec.js 3 passed
  • D4 review: APPROVE WITH NOTES — merge as-is. All card requirements met, all Done-checklist items pass with evidence, no excluded files touched.
  • Scope: 17 files changed (6 src CSS, 2 dist, 1 size-baseline, 2 docs, 2 fixtures, 3 test specs, 1 README); no AGENTS.md, PLAN.md, test/AGENTS.md, playwright.config.js, package.json, .stylelintrc, postcss.config.js, api-manifest.json, a11y-baseline.json changes
  • Disposition: accepted
  • Risk: none — the migration is mathematically pixel-preserving at a 16px consumer root (verified by 100 VRT tests passing without baseline regeneration). Consumers who set html { font-size: 62.5% } will see Chota render at 0.625× scale (proportional, documented in MIGRATION.md). Follow-up: wire root-font-scaling.spec.js into test:vrt (requires shared-test-config impact matrix).

Activity

  1. reopened this on Jul 20, 2026
  2. reopened this on Jul 20, 2026
  3. jenil commented on Aug 18, 2026

    @jenil
    OwnerAuthor

    Week 3 — COMPLETE (7/7)

    Card #142 (write migration guide and public API reference) is merged and marked Done. Week 3 is now 7/7 (100%).

    #142 acceptance

    Week 3 summary

    Card Title PR Merge SHA Status
    #137 Migrate root font sizing #188 9b9aee0 Done
    #138 Normalize design tokens #189 3efaa00 Done
    #139 Restore visible keyboard focus #182 78fbcf4 Done
    #140 Document body.dark convention #184 9ceb770 Done
    #141 Document CSS-only interaction boundary #183 3e1f65e Done
    #190 test:vrt discovery mechanism #191 7d2da71 Done
    #142 Migration guide and public API reference #192 a695d40 Done

    Follow-up cards filed (not blocking Week 4)

    1. v1: normalize existing hardcoded design tokens #138 follow-up: stale "14 tokens" comment in docs/examples/dark-mode.html:13 should reflect the 17-token API after v1: normalize existing hardcoded design tokens #138.
    2. Test-harness follow-up: test/vrt/README.md:82 a11y coverage row says "index.html" but the spec runs on both index.html and components.html. Pre-existing; test(vrt): full-page and per-section docs-page coverage before #137/#138 #180 touched the same table.

    Next: Week 4

    Card Title Status
    #143 Prepare release candidate package Todo
    #144 Run release-candidate compatibility validation Todo
    #145 Publish chota 1.0.0 Todo
    #146 Create post-v1 roadmap Todo

    Feature scope freezes at #143 except owner-approved release blockers. #145 is the sole v1 → main integration path.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions