Skip to content

Add remaining adoption APIs, upstream feedback support and clean candidates - #126

Merged
joeblau merged 32 commits into
mainfrom
hig/roadmap-followups
Oct 19, 2026
Merged

joeblau merged 32 commits into
mainfrom
hig/roadmap-followups

Conversation

@joeblau

@joeblau joeblau commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Remaining native and product surfaces need canonical controls that preserve host layout, accessible names, focus, raw values and pending state. This adds those adoption APIs, connects merged upstream feedback capabilities, and packs a clean coordinated candidate.

  • Native: styled numeric readouts; multilingual radio options and script fonts; persistent bounded toasts; busy-label spacing; custom/dynamic/inline GestureSheet; formatted static values and EmptyState; custom Dialog with one native Modal, Back and focus return; optional SwitchRow for host labels, descriptions and decorative tracks with one HIG switch owner.
  • Web: Table and MarketRow host slots; Dialog title/content/ref/close composition; explicit Badge severity; optional Vaul GestureSheet isolated from ordinary imports.
  • Feedback: per-root SFX AbortSignal cancellation and optional canonical Haptic imperative injection, tested against exact merged upstream sources and actual released 0.1.0 packages. The release limitations and unavailable imperative iOS output remain explicit. Source follow-up #127 passed every remote check.
  • Docs: interactive previews avoid shipping duplicate chapter/API content. JavaScript remains below the unchanged 650,000-byte gzip budget. The ordinary Switch import stays at 2,153 gzip bytes; SwitchRow is 921 bytes, both under the unchanged 2,200-byte cap.

Latest source validation: full build/docs/lint/types; 174 web and 165 native tests; quality/SSR; 212 public-import examples; Chromium/WebKit SwitchRow keyboard, pointer, repeated-key, pending, focus and axe checks. Clean exact candidate consumers export SwitchRow/default Switch/Button/provider for Android and iOS on both RN 0.81 / Expo 54 and RN 0.83 / Expo 55. Seven staged packages clean-install with aligned versions and pass SSR/feedback.

Clean candidate: 0.1.0-candidate.shac32d8408, source c32d8408881cdd99344a66a0d25761312b19a621, eight SHA-256-verified archives, sourceTreeDirty=false. Report SHA-256: d4d20c10175aa7655b263a1d14da908c6d55b045ddf2eb87e33e23febf136d01. Only native and feedback payloads change from the preserved 0e239442 candidate after excluding coordinated package manifests. Source, archive and profile evidence retains the exact scope. Earlier owning simulator/emulator/production measurements retain their original 0e source scope. All twelve current-head source/native/browser/candidate/docs/security checks pass at e5cc5c2, with the expected main-only docs deployment skip; the full browser/catalog/Next gates pass for this source too.

Owning migrations remain reviewable in combined monorepo #4619, integrating #4607–#4618. Its normal gate passed 3,683 app and 269 Pro tests; the exact native subtree passed 3,080 tests and simulator/emulator flows. Equal-toolchain web/native production measurements and unchanged font/asset payloads are retained for owner review. Latest #124 head passed three consecutive remote attempts. Additional native ordinary fields/actions/switches and controls within TapTrade's existing sponsor pilot are undergoing their own caller/runtime checks. Separate TapTrade #219 keeps StreamViewer controls visible during keyboard focus; four component cases and eight actual browser cases pass, with unchanged resting pixels and media behavior. Its required quality and Worker HTTP checks pass; configured automatic previews continue independently.

Chart #58, SFX #55, agent-cli #55, TapTrade #216/#217 and Tapsiren #401 contain coordinated consumer/host migrations. Hyperliquid #183, Font #15 and Pages #31 fix Callout/OG imports, canonical font ownership and CSS function detection. Their remote checks passed. Tapsiren cyan/HIG-action review options preserve identical geometry; the product mark awaits owner choice.

The user explicitly accepted combined #4619's exact historical public Git tree hash finding as a GitGuardian false positive on 2026-10-18 and instructed continuing. It does not block this work; the provider result is retained unchanged.

Physical certification (#55), npm setup/publication (#56), owner visual/density/bundle/motion decisions (#57), product brand decisions (#100/#101), upstream feedback releases (#70), main-branch review/integration and future rollback retirement remain. A unique unsigned iPhone/iPad gallery is prepared; physical installation/certification is pending. No npm publication, release, tag, manual deployment or main-branch merge is included.

Closing native follow-ups

This PR delivers the HIG-side asks of the five native component follow-ups. Each is validated by automated renderer tests, iOS Simulator flows and the owning consumer drafts recorded in planning/roadmap-followups.md; physical-device observations remain in #55 and consumer rollout in #110/#115.

Closes #117, Closes #118, Closes #119, Closes #120, Closes #121

@joeblau joeblau changed the title Implement native adoption contracts and Pro data customization Complete HIG adoption APIs and validate remaining consumer migrations Oct 18, 2026
@joeblau joeblau changed the title Complete HIG adoption APIs and validate remaining consumer migrations Add remaining HIG adoption contracts and validate clean candidates Oct 18, 2026
@joeblau joeblau changed the title Add remaining HIG adoption contracts and validate clean candidates Add remaining adoption APIs, upstream feedback support and clean candidates Oct 19, 2026
@joeblau
joeblau marked this pull request as ready for review October 19, 2026 01:41
joeblau and others added 4 commits October 19, 2026 08:45
…1.0 workarounds (#128)

* chore: upgrade to @bloxwap/[email protected] and @bloxwap/[email protected]

- Update dependencies to ^0.2.0 for both sfx and haptic packages
- Remove upstream-feedback fixtures that were vendored for unreleased APIs
- Update tests to use published APIs directly
- Remove 0.1.0 compatibility workarounds from documentation
- Update evidence documentation to reflect published packages

Co-authored-by: Joe Blau <[email protected]>

* test: add local fake-audio for testing without vendored fixtures

- Create tests/test-utils/fake-audio.ts for Web Audio API mocking
- Update feedback-upstream tests to use local test utilities
- Fix haptic test to track vibrate calls correctly without spying on ES module exports

Co-authored-by: Joe Blau <[email protected]>

* chore: update fixtures to use @bloxwap/sfx@^0.2.0 and @bloxwap/haptic@^0.2.0

- Update native and web fixtures to match feedback package peer dependencies
- Fixes native smoke test peer dependency conflicts

Co-authored-by: Joe Blau <[email protected]>

* fix: update packed-smoke test to use @bloxwap/sfx@^0.2.0 and @bloxwap/haptic@^0.2.0

- Fixes ERESOLVE peer dependency conflict in packed consumer smoke test

Co-authored-by: Joe Blau <[email protected]>

---------

Co-authored-by: Cursor Agent <[email protected]>
Remove leading space from busy suffix text to eliminate double spacing
when combined with the row gap. The suffix now renders as '· Working'
instead of ' · Working', using only the 8dp gap for spacing before the
middot.

The iOS accessibility label retains the full spaced format
'Log out · Working' as required. Android omits the suffix to avoid
duplication with the system's localized busy state description.

Adds test to verify correct Text run separation and accessibility labels.

Co-authored-by: Cursor Agent <[email protected]>
Add verification documentation confirming that the native sound adapter
dispatch latency is well within the one-frame (16ms) budget when using
pre-loaded players.

The implementation already includes:
- preload() method that configures audio session and caches players
- Synchronous dispatch after preload (no awaited bridge calls)
- Test verifying p95 < 16ms with simulated bridge delays

Test results show p95 latency of 0.003-0.007ms across 400 dispatches,
demonstrating that reusing pre-loaded players eliminates the 47-595ms
latency that was observed before preloading was implemented.

Co-authored-by: Cursor Agent <[email protected]>
@joeblau
joeblau merged commit 727a4d0 into main Oct 19, 2026
13 checks passed
@joeblau
joeblau deleted the hig/roadmap-followups branch October 19, 2026 22:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment