Bloxwap / HIG0.1.1
GuidelinesFoundations

Pinned source reconciliation

Issues #2, #6–#9, #11–#18. See evidence/issue-1-18/monorepo-sha.txt for the exact monorepo commit and monorepo-source-fetch.json for all 129 audited paths. This supersedes the earlier 404 source-access limitation; it does not turn old unperformed product/device checks into passes.

The audit covers tokens, shared web/native primitives, plain-ui and app/Pro-owned controls. monorepo-audit.json records byte-identical duplicate groups, source bytes, repository asset totals and explicit source component dispositions. The existing catalog/platform matrix defines the HIG destination families. The authenticated organization inventory now includes monorepo, .github-private, taptradetv and tapsiren; their complete observed trees and explicit applicability decisions are recorded in new-repositories.json and planning/adoption.json. Joe Blau accepted the recorded source and applicability decisions on 2026-10-27; see evidence/adoption/owner-approval-2026-10-27.md. Confetti, signal strength, animated number backends and overlay layering internals stay optional host integrations; they are not silently added to base imports. Migration owners remain the owning product teams; HIG cannot claim their source forks have been deleted.

Tokens and platform units

packages/hig/tokens/upstream-palette.json preserves the complete authored semantic OKLCH palette and brand sRGB/P3 channels. sourceColors exports web strings plus converted Android sRGB and iOS Display-P3 channel values; generated CSS exposes authored --hig-source-* variables. The HIG surface, nested, text and muted roles now retain their corresponding authored OKLCH values and tested sRGB fallback. Brand green and blue preserve upstream P3 channels. HIG focus green, market sell red, warning gold, opaque border and faint text are intentional intent/accessibility mappings rather than mislabeled exact source copies; direction remains distinct from destructive intent.

Native views default to sRGB and use nativeColors.android/ios. A host that explicitly configures RN iOS default color space as Display-P3 sets HIGProvider colorSpace='display-p3', so HIG components paint nativeColors.iosDisplayP3 (also exported alone as nativeDisplayP3). It reads useColors() for its own views and converts third-party sRGB assets (#93). Never send CSS functions to native views or use P3 channel hex in an sRGB host. These are mathematical conversion checks, not physical wide-gamut display certification.

Source spacing.ts and type.ts explicitly set both rem roots to 16; native spacing md=12 and base type=16 match HIG. Radius 6/8/10/14 and motion 180/260/320 ms also match. HIG caption line-height 18, title 30 and display 52 intentionally provide readable role leading versus the stock utility steps. Comfortable 48-unit native targets and compact 36-pixel desktop targets remain distinct; compact native buttons still retain 48-unit hit targets. Source native sheets use optional Gorhom/Reanimated gesture backends, 320 ms card transitions and separate 500 ms opening motion. HIG's basic Sheet stays a static, scrollable Modal alternative. The isolated gesture-sheet entry now supplies an optional Gorhom adapter with detents, cancellation delegation, native back, safe-area/keyboard configuration, reduced-motion mapping and focus requests. Its mocked lifecycle and real Metro imports are software-verified; actual worklet, pan interruption and assistive-technology behavior still require a booted native target.

Native font generation and registration

Install fonttools[woff]==4.61.1 and brotli==1.2.1, then run npm run generate:fonts before native consumer commands. scripts/generate-native-fonts.py derives static faces exclusively from the installed @bloxwap/font@0.1.4 variable WOFF2 files, verifying all four input hashes before writing. Those four sources are byte-identical to 0.1.1 and 0.1.2, so the derived faces, their SHA-256 and their 0.1.1 unique IDs are unchanged. It adapts the monorepo's generator and preserves its naming/weight metadata. The generated manifest contains input/output SHA256, PostScript names, Expo registration keys, weights, scripts and byte counts; OFL attribution ships beside the faces. Generated TTF files are build outputs, not per-repository committed binary copies. Local tarballs include them through @bloxwap/hig/native-fonts/fonts/* (moved out of the web tokens package in #64); consumers register only needed faces.

The Expo fixture registers Sans Regular/SemiBold and Mono Regular through expo-font, waits for loading, exposes failure visibly and passes explicit 400/600 family keys to the native provider. Text, headings and buttons select registered static weight families, avoiding an invalid variable family name or synthesized weight. Expo web uses feedback.web.ts browser adapters; Android/iOS retain the native backend. Korean/Simplified Chinese Regular/SemiBold faces can be registered by host locale policy; other scripts use an explicit host/system fallback. Pixel remains a scoped web accent, not a native body-font requirement. Font registration in Expo web and Metro builds does not certify native rasterization, native Dynamic Type, or multilingual physical-device layout.

Observation boundaries

Headless browser synthetic composition checks preserve raw negative/decimal locale strings without formatting or precision loss; real on-screen IME composition is a separate device check. Browser 200% root text, narrow width and RTL checks exercise DOM reflow, not OS text scaling. Jest inspects RN roles, states and handlers with native modules mocked; Expo web exercises RN web rendering; neither is TalkBack. Android emulator installation, startup and any observed OS semantics are reported separately in evidence/issue-1-18/. Physical iOS/Android, tactile output and real VoiceOver/TalkBack observations remain unperformed on this Linux VM.

The root build now compiles contracts/tokens before feedback and platform renderers, so clean builds cannot rely on stale dist output. The expanded browser flow runs in Chromium/Firefox/WebKit under 320-pixel width, translated RTL tabs and 200% root text. It checks required validation, synthetic composition/raw precision, keyboard range/radio/menu/search, nested focus restoration, persistence/retry and zero automated axe WCAG findings. The Expo-web gallery separately checks registered faces, Modal picker, labels and range keyboard values. The native Slider web backend needs explicit ARIA min/max/now and keyboard actions; native OS builds retain adjustable role/state/value semantics. Checkbox/radio/tab web aliases likewise preserve native-renderer state in RN web. None of these observations is labeled as TalkBack. Quality gates verify every generated native face hash and cap the three selected fixture faces at 1.4 MB; optional CJK/other weight faces are available but are not imported by the default fixture.

On this page