| id | components.classification | ||||
|---|---|---|---|---|---|
| kind | instruction-reference | ||||
| owner_paths |
|
Classify every changed surface before choosing a workflow or recipe. A single package, or a single diff, can contain more than one generation; Button ships both v0 and v1 implementations.
- R-CLASSIFY-001: Classify an implementation by its imports and component structure together. Paths such as
deprecated/orlegacy/, export suffixes, the JSX pragma, and individual helpers such asdirectComponentorstagedComponentare hints, not proof. - R-CLASSIFY-002: Record the task mode, implementation model, public compatibility surface, and native obligations separately for each changed surface. Load each applicable recipe for a mixed change; never force the whole change into one generation.
| Task | Workflow |
|---|---|
| Create a new component | agentic-component-authoring |
| Change, or plan a change to, an existing agentic component or primitive | agentic-component-authoring |
| Agentic contract-only or contract-feasibility work | agentic-component-contract-authoring |
| Fix or maintain an existing v0 or v1 component | maintain-v0-v1-component |
| Review a component change of any generation | review-component |
Native component, TurboModule, native service, codegen, or native-core /legacy wrapper change |
implement-native-component |
| Cross-component agentic extraction or dependency direction | agentic-component-optimization |
| Desktop test configuration, execution, reporting, helpers, or CI | desktop-testing |
| Change or review the desktop testing package source | maintain-desktop-testing |
| Storybook app catalog, Metro, CocoaPods, or native builds | agentic-storybook-development |
| Dependency vulnerability remediation | fix-security-issues |
v0 and v1 are maintenance-only (R-V0-001, R-V1-001). A request for a new component uses the agentic workflow even when a v0 or v1 component with a similar name exists.
| Model | Decisive evidence | Representative source | Recipe |
|---|---|---|---|
| v0 | Imports from @uifabricshared/foundation-compose (or foundation-settings/foundation-tokens); IComposeSettings, usePrepareProps, mergeSettings, _overrides, _precedence |
deprecated Button | v0 |
| v1 compose | compose from @fluentui-react-native/framework with a { props, tokens, slotProps } descriptor and useRender |
Button | v1 |
| v1 compressible | compressible from @fluentui-react-native/framework; it may return a framework-base directComponent continuation |
Text | v1 |
| Agentic higher-order | Under packages/agentic/components/src/components; <component>.types.ts, use<Component>.ts, use<Component>Styles.ts, render<Component>.tsx, and <component>.ts; _unstable stage exports; React 19 ref prop |
agentic Button | agentic skill |
| Agentic primitive | Under packages/agentic/components/src/primitives; colocated CONTRACT.md; unstyled; often a hook-free directComponent |
Icon | primitive instructions |
| Framework-base pattern | phasedComponent, modern directComponent, useSlot/useOptionalSlot, and Slot<typeof View> outside the agentic package |
component patterns | framework-base instructions |
| No component model | Native modules, services, utilities, or tooling | native-core | Owning package documentation |
Framework-base utilities such as mergeProps, useSlot, directComponent, and the JSX runtime appear inside v1 and
v0 implementations for compatibility. Their presence does not change the component's generation. Both v0 and v1 use
the @jsxImportSource @fluentui-react-native/framework-base pragma.
Record the API obligations independently of the implementation model:
- Legacy unsuffixed exports beside
V1exports, such asButtonandButtonV1. - v0 and v1
componentRefAPIs, versus the agentic React 19refprop. - The agentic package root versus its
@fluentui-react-native/components/primitivesentrypoint. - Native-core's
/legacyentrypoint. Its Callout is a modern implementation that preserves a legacy public API andcomponentRef. - Native registration names, which must not change during maintenance.
Treat the change as native work, and add the implement-native-component checklist as an overlay, when it touches any of:
- Swift, Objective-C, Objective-C++, C++, IDL, headers, podspecs, or Windows project files;
codegenNativeComponentor TurboModule specifications, native registration, or native event/command shapes;- a platform wrapper whose root is a native component, such as the macOS experimental Checkbox;
- accessibility actions, focus targets, or refs that cross a native boundary.
File suffixes are not the only trigger: a TypeScript-only change to a native prop, ref, or event contract is native work.