Repository navigation
Components workstream #4274
Description
Goal
Make packages/agentic/components trustworthy for beta adoption and eventually
production use. A consumer should be able to tell which components are ready,
every component should follow the same React Native contract and test model, and
the remaining Fluent catalog should be delivered in dependency order with real
macOS and Windows evidence.
Status
In progress. Three of nine direct work items are closed; six remain open.
PR #4296
completed the spec-system foundation and a substantial implementation-alignment
pass:
- Replaced copied web-oriented source specs with independently authored React
Native contracts backed by a pinned Flex Marketplace release, immutable x3
provenance, source locks, local contract validation, and authenticated drift
reporting. This closes #4252. - Added
TabListwith controlled and uncontrolled selection, roving focus,
orientation-aware keyboard navigation, disabled-item skipping, and native set
metadata. There are now 19 reviewed local component contracts. - Fixed ten component-local defects and four shared or parent-infrastructure
gaps, including focus modality and phase-locked shared animation behavior. - Preserved repaired divergence IDs as resolved history. Ten reviewed
divergences remain deferred: four need platform or interaction validation and
six need separately reviewed public API decisions. - Passed the complete uncached repository graph after merging current
main
(165 Lage tasks).
The FURN-only primitive boundary
(#4250) and
Callout platform inconsistencies
(#4291) are
also closed.
What is left
- Define and publish the component readiness model and initial assessment
(#4251). - Finish the uniform component-test contract and accessibility conformance
registry (#4216,
#4214). - Resolve Button versus ToggleButton API ownership before generating
ToggleButton (#4215). - Complete Fabric FocusZone for macOS and React Native Windows while
preserving Win32 Paper behavior
(#4217). - Reconcile the missing-component catalog with the pinned 49-component release,
the current 52-entry candidate catalog, and the newly implemented TabList,
then deliver the remaining waves
(#4273). - Record real macOS and React Native Windows Fabric keyboard, focus, and
screen-reader evidence for every component promoted to beta.
Work items
| Status | Issue | Outcome or remaining work |
|---|---|---|
| Open | #4214 - Accessibility conformance suite | Add the typed applicability registry and shared conformance runner across exported components. |
| Open | #4215 - Button and ToggleButton alignment | Decide selected state, shape, icon placement, and ownership of toggle behavior. |
| Open | #4216 - Component tests | Define and enforce uniform type, behavior, snapshot, and platform coverage. |
| Open | #4217 - Fabric FocusZone | Complete macOS and Windows Fabric support and preserve the Win32 Paper path. |
| Done | #4250 - Primitive boundary | FURN-only primitive ownership and publication boundary settled. |
| Open | #4251 - Readiness model | Persist objective readiness levels and prevent promotion above available evidence. |
| Done | #4252 - Spec patterns | Plugin-first React Native contract workflow merged in PR #4296. |
| Open | #4273 - Missing components | Refresh the rollup and deliver the remaining catalog in dependency order. |
| Done | #4291 - Callout platform inconsistencies | Platform inconsistency work completed. |
Beta exit criteria
- The component contract source is pinned, provenance is recorded, and
fork-safe validation plus authenticated drift reporting are available. - All currently implemented components have reviewed local React Native
contracts, usage guidance, and explicit web divergences. - Every exported primitive has an explicit ownership and contract policy.
- Every exported component and primitive satisfies one enforced test
coverage contract on the supported test platforms. - Every exported higher-order component passes the shared accessibility
conformance suite. - Every exported component carries a consumer-visible readiness level
computed from objective evidence. - Button and ToggleButton have non-overlapping approved contracts.
- FocusZone works on macOS Fabric and React Native Windows Fabric, and its
Win32 Paper coverage remains green. - The refreshed wave 1 and wave 2 catalog is implemented at beta readiness
or has an evidence-backed blocker. - Every beta-marked component has documented macOS and React Native Windows
Fabric validation.
Production exit criteria
- Every component in the approved catalog is production-ready or explicitly
declined with rationale. - Readiness is CI-gated so a component cannot be marked above its evidence.
- Keyboard, focus, and screen-reader behavior is validated on every
supported desktop endpoint. - Local contract integrity fails CI; authorized source drift is reviewed
against the immutable pin without requiring private source access in
public or fork CI. - Every replacement for a legacy component has migration guidance and an
explicit legacy-package disposition.
Agent context
Contract authority
Use this order of authority:
- The pinned Flex Marketplace payload is the exact authoring input.
- The pinned x3 commit provides immutable design lineage.
- The reviewed local React Native
SPEC.mdis authoritative for FURN behavior,
usage, accessibility, and intentional web divergence. - Mutable Marketplace or x3 HEAD is candidate drift for review, not an
automatic contract update.
The merged source lock uses Marketplace commit
206c4996205b027f4d806ac4ac7366f1f0ab0d5a and x3 commit
334d3b82a08b610b0002fe922ce9b4dac4db64f2. Public and fork CI validate
committed contract metadata without reading private sources; authorized
maintainers run source refresh and candidate-drift discovery.
Remaining reviewed divergences
Platform or interaction validation is still required for Input whole-field
hover/focus treatment, ProgressBar determinate animation, and Switch keyboard
activation. Separately reviewed API decisions remain for Avatar and Skeleton
focusability, Checkbox-owned native props, Button/ToggleButton separation,
Button icon positions, and Divider sizing.
Dependencies and sequencing
- Readiness depends on the enforced component-test and accessibility evidence.
- ToggleButton depends on the Button contract decision.
- Focus-orchestrated components depend on FocusZone or an explicitly approved
component-owned navigation model. - Overlay components should establish Popover, anchoring, light-dismiss, and
focus-trap foundations before dependent menus, dialogs, tooltips, and
teaching surfaces. - Platform readiness depends on the desktop-driver and Storybook work in
#4275. - Component styling depends on the unified theme contract tracked by
#4276.
Merged evidence
- PR #4296 - Pivot agentic component specs and align implementations
- PR #4295 - Add appearance-aware Flex theme sources
- PR #4294 - Infrastructure: land the public desktop driver
packages/agentic/components/SPEC-SOURCE.mdpackages/agentic/components/SPEC-MIGRATION.mdpackages/agentic/components/spec-source-lock.jsonpackages/agentic/components/scripts/spec-contracts/
Activity
JasonVMo commentedon Oct 16, 2026
The remaining native-core modernization work is now tracked as direct sub-issues: #4374 (FocusZone request/lifetime qualification), #4375 (Callout geometry, resources, and assistive technology), #4377 (popup-family transactions, owner-relative Tab/restoration, and disabled MenuItem discoverability), #4378 (renderer-owned text fragments), and #4379 (modal focus/accessibility isolation). Existing Menu #4232, Popover #4236, Dialog #4222, and Drawer #4223 remain their component delivery owners. #4373 remains open for the Win32 Button press-out regression; its one failing authored case is being quarantined only on Win32, not treated as fixed. Infrastructure admission/publishing and real-module gates are #4376/#4380 under #4275. Each new issue retains native evidence limits and acceptance criteria from the retiring modernization handoff.
JasonVMo commentedon Oct 17, 2026
Blocked popup-prerequisite handoff — October 16, 2026
Pushed commit 54887b3 on
user/jasonvmo/menu-popover.menu-popover-plan.mdsection 12 contains the complete per-platform handoff and exact validation matrix.Delivered independently usable prerequisites: Framework Base/MenuItem disabled-focusable targets with activation refusal and exactly-once release cleanup; Input's outline/underline focus-visible treatment; modern Callout first/last focus, observed dismissal causes, and duplicate/late-event fences. The changed native command is wired through generated Windows bindings and both macOS adapters.
/legacystays stable.Not delivered: Popover #4236, Menu #4232, MenuButton #4231, and Dropdown #4224 remain unimplemented/unexported behind P0/P1 and the remaining native family/continuation/semantics work. No component issue is closed or declared release-ready. Reviewed R1-R3 are applied; #4384 is the consolidated Win32 host follow-up, including the approved Tab close-and-return interim.
Executed evidence
yarn workspace @fluentui-react-native/framework-base test: passed 205 tests, 6 snapshots.yarn workspace @fluentui-react-native/components test: passed 484 tests, 8 snapshots, contract checks and strict story types.yarn workspace @fluentui-react-native/native-core test: passed 18 ownership/entrypoint checks plus 37 Jest tests, 1 snapshot, build and story types.codegen:windows --check,yarn build,yarn check-agent-instructions, andyarn change:check: passed.STORYBOOK_SMOKE_STORY='native-modern-callout--*', tagstory): 176 stories rendered; 3 cases passed, 8 input-dependent cases skipped.STORYBOOK_SMOKE_STORY='components-*--*focus*', tagstory): each 2 passed / 16 skipped; Win32 rendered 154 stories. New MenuItem native menuitem/disabled semantics passed on both endpoints. Physical navigation, activation, Input focus treatment, and Callout entry focus remain unqualified because the runtime did not advertise the required input capabilities. Helper doctor readiness was not treated as permission to bypass that gate.yarn clean-lage-cachethenyarn lage buildci: failed on 11 Knip findings in untouched workspaces; no unrelated dependencies were removed or ignored.yarn lage testthen completed 37 tasks but hit two Storybook worker deadlines; both affected contracts passed the bounded--runInBand --testNamePattern "representative desktop story tests|executes isolated inline code"retry. The aggregate is not reported as green.Next platform actions
macOS native, Office integration, actual UIA/AX actions and speech/visual matrices were not run. All owned Metro/channel/driver listeners were shut down after smoke.