Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: communicating package convergence status #16772

Closed

Conversation

ecraig12345
Copy link
Member

@ecraig12345 ecraig12345 commented Feb 2, 2021

Splitting out parts of #16577 since the discussion got very long. The split is a bit awkward but having everything in the one RFC was becoming unwieldy.

The unifying theme of this RFC is essentially steps that we should take in the very near future to clearly communicate to consumers which of our packages are old vs. converged. (Open to suggestions on naming and/or better ways to split.)

See an HTML rendered version of the RFC here.

Points this RFC covers:

  • Moving v8 component code back into @fluentui/react (removing react-internal)
  • Add badges to package readmes to clarify status
  • Open question: what to do about legacy Card in react-cards
  • Open question: should we move legacy packages back to old names so react-* means converged?

@ecraig12345 ecraig12345 changed the title Add RFC for communicating converged package status RFC: communicating package convergence status Feb 2, 2021
@ecraig12345 ecraig12345 force-pushed the rfc-communicating-status branch from 8efb2dd to a5ea76d Compare February 2, 2021 20:06
@ecraig12345 ecraig12345 force-pushed the rfc-communicating-status branch from a5ea76d to 6bab3a1 Compare February 2, 2021 20:15
@ecraig12345 ecraig12345 force-pushed the rfc-communicating-status branch from 6bab3a1 to d821715 Compare February 2, 2021 20:16
@codesandbox-ci
Copy link

codesandbox-ci bot commented Feb 2, 2021

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit 10f294e:

Sandbox Source
Fluent UI Button Configuration
codesandbox-react-template Configuration
codesandbox-react-northstar-template Configuration

@size-auditor
Copy link

size-auditor bot commented Feb 2, 2021

Asset size changes

Size Auditor did not detect a change in bundle size for any component!

Baseline commit: 6b02081f476ecf005a9cee37ba0cad7ac3ff1190 (build)

@fabricteam
Copy link
Collaborator

fabricteam commented Feb 2, 2021

Perf Analysis

No significant results to display.

All results

Scenario Render type Master Ticks PR Ticks Iterations Status
Avatar mount 812 831 5000
BaseButton mount 889 887 5000
Breadcrumb mount 44042 46594 5000
ButtonNext mount 666 657 5000
Checkbox mount 1510 1467 5000
CheckboxBase mount 1238 1256 5000
ChoiceGroup mount 4619 4673 5000
ComboBox mount 946 948 1000
CommandBar mount 10040 10019 1000
ContextualMenu mount 6148 6122 1000
DefaultButton mount 1132 1139 5000
DetailsRow mount 3586 3594 5000
DetailsRowFast mount 3607 3547 5000
DetailsRowNoStyles mount 3400 3382 5000
Dialog mount 1433 1442 1000
DocumentCardTitle mount 1835 1820 1000
Dropdown mount 3248 3275 5000
FocusTrapZone mount 1777 1765 5000
FocusZone mount 1820 1774 5000
IconButton mount 1710 1711 5000
Label mount 337 338 5000
Layer mount 1729 1761 5000
Link mount 459 457 5000
MakeStyles mount 1945 1951 50000
MenuButton mount 1427 1430 5000
MessageBar mount 1982 1987 5000
Nav mount 3230 3251 1000
OverflowSet mount 1045 1021 5000
Panel mount 1429 1423 1000
Persona mount 880 883 1000
Pivot mount 1370 1384 1000
PrimaryButton mount 1277 1254 5000
Rating mount 7296 7352 5000
SearchBox mount 1289 1293 5000
Shimmer mount 2507 2507 5000
Slider mount 1880 1849 5000
SpinButton mount 4945 4874 5000
Spinner mount 418 406 5000
SplitButton mount 3136 3084 5000
Stack mount 487 486 5000
StackWithIntrinsicChildren mount 1536 1581 5000
StackWithTextChildren mount 4431 4453 5000
SwatchColorPicker mount 10239 10307 5000
Tabs mount 1391 1376 1000
TagPicker mount 2761 2746 5000
TeachingBubble mount 11510 11561 5000
Text mount 406 400 5000
TextField mount 1353 1348 5000
ThemeProvider mount 1416 1410 5000
ThemeProvider virtual-rerender 598 595 5000
ThemeProviderNext mount 2153 2183 5000
Toggle mount 799 800 5000
buttonNative mount 111 107 5000

Perf Analysis (Fluent)

Perf comparison
Status Scenario Fluent TPI Fabric TPI Ratio Iterations Ticks
🦄 Avatar.Fluent 0.18 0.53 0.34:1 2000 354
🦄 Button.Fluent 0.12 0.2 0.6:1 5000 575
🔧 Checkbox.Fluent 0.64 0.34 1.88:1 1000 641
🎯 Dialog.Fluent 0.16 0.23 0.7:1 5000 802
🔧 Dropdown.Fluent 3.14 0.4 7.85:1 1000 3141
🔧 Icon.Fluent 0.14 0.06 2.33:1 5000 706
🦄 Image.Fluent 0.08 0.13 0.62:1 5000 419
🔧 Slider.Fluent 1.6 0.44 3.64:1 1000 1598
🔧 Text.Fluent 0.08 0.03 2.67:1 5000 375
🦄 Tooltip.Fluent 0.11 0.89 0.12:1 5000 573

🔧 Needs work     🎯 On target     🦄 Amazing

Perf tests with no regressions
Scenario Current PR Ticks Baseline Ticks Ratio
TreeWith60ListItems.default 193 171 1.13:1
RefMinimalPerf.default 257 238 1.08:1
AvatarMinimalPerf.default 210 199 1.06:1
DropdownManyItemsPerf.default 761 727 1.05:1
Avatar.Fluent 354 339 1.04:1
Image.Fluent 419 403 1.04:1
BoxMinimalPerf.default 386 373 1.03:1
ButtonMinimalPerf.default 186 180 1.03:1
FlexMinimalPerf.default 317 307 1.03:1
LabelMinimalPerf.default 446 431 1.03:1
ListMinimalPerf.default 539 523 1.03:1
SegmentMinimalPerf.default 381 371 1.03:1
IconMinimalPerf.default 709 688 1.03:1
TextMinimalPerf.default 382 370 1.03:1
ToolbarMinimalPerf.default 994 968 1.03:1
Button.Fluent 575 559 1.03:1
AccordionMinimalPerf.default 169 165 1.02:1
AnimationMinimalPerf.default 430 420 1.02:1
CarouselMinimalPerf.default 499 488 1.02:1
ChatMinimalPerf.default 645 632 1.02:1
GridMinimalPerf.default 371 365 1.02:1
ImageMinimalPerf.default 402 395 1.02:1
ListCommonPerf.default 664 651 1.02:1
ProviderMinimalPerf.default 995 979 1.02:1
SkeletonMinimalPerf.default 393 386 1.02:1
TextAreaMinimalPerf.default 500 492 1.02:1
Icon.Fluent 706 693 1.02:1
AttachmentMinimalPerf.default 179 178 1.01:1
AttachmentSlotsPerf.default 1238 1223 1.01:1
ButtonSlotsPerf.default 589 582 1.01:1
ButtonUseCssPerf.default 842 835 1.01:1
CheckboxMinimalPerf.default 2863 2843 1.01:1
DialogMinimalPerf.default 809 803 1.01:1
DropdownMinimalPerf.default 3133 3114 1.01:1
FormMinimalPerf.default 444 440 1.01:1
HeaderMinimalPerf.default 390 385 1.01:1
HeaderSlotsPerf.default 799 795 1.01:1
InputMinimalPerf.default 1332 1314 1.01:1
LoaderMinimalPerf.default 746 738 1.01:1
PopupMinimalPerf.default 728 722 1.01:1
SplitButtonMinimalPerf.default 3832 3806 1.01:1
TableManyItemsPerf.default 2062 2042 1.01:1
TreeMinimalPerf.default 800 795 1.01:1
Dialog.Fluent 802 793 1.01:1
Dropdown.Fluent 3141 3105 1.01:1
AlertMinimalPerf.default 305 304 1:1
CardMinimalPerf.default 566 564 1:1
DatepickerMinimalPerf.default 46936 46861 1:1
ItemLayoutMinimalPerf.default 1243 1237 1:1
ListNestedPerf.default 582 584 1:1
ListWith60ListItems.default 650 649 1:1
MenuButtonMinimalPerf.default 1598 1597 1:1
ReactionMinimalPerf.default 412 411 1:1
StatusMinimalPerf.default 738 735 1:1
CustomToolbarPrototype.default 3814 3800 1:1
TooltipMinimalPerf.default 841 843 1:1
Checkbox.Fluent 641 639 1:1
Tooltip.Fluent 573 575 1:1
ButtonOverridesMissPerf.default 1706 1722 0.99:1
ButtonUseCssNestingPerf.default 1084 1094 0.99:1
ChatWithPopoverPerf.default 455 458 0.99:1
LayoutMinimalPerf.default 429 434 0.99:1
ProviderMergeThemesPerf.default 1616 1634 0.99:1
RadioGroupMinimalPerf.default 453 458 0.99:1
SliderMinimalPerf.default 1616 1638 0.99:1
Slider.Fluent 1598 1610 0.99:1
EmbedMinimalPerf.default 4252 4348 0.98:1
TableMinimalPerf.default 430 437 0.98:1
Text.Fluent 375 384 0.98:1
MenuMinimalPerf.default 898 925 0.97:1
ChatDuplicateMessagesPerf.default 366 381 0.96:1
RosterPerf.default 1139 1185 0.96:1
VideoMinimalPerf.default 656 682 0.96:1
PortalMinimalPerf.default 167 175 0.95:1
DividerMinimalPerf.default 368 393 0.94:1

@ecraig12345 ecraig12345 added the Type: RFC Request for Feedback label Feb 2, 2021

<!-- Optional section, but useful for first drafts. Use this section to track open issues on unanswered questions regarding the design or proposal. -->

### Should we change anything about `react-cards`?
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@khmakoto I'd appreciate your input on this section in particular

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should delete it from version 8. To my understanding there was one partner using it and they knew it wasn't officially released. We could still provide support in the 7.0 branch and, honestly, there's not much in terms of influx of Card related issues.

@JustSlone
Copy link
Collaborator

Quick question, @ecraig12345 how much of the proposed changes here will block V8 release? Will this push out V8 release date? (that would be quite unfortunate)

@ecraig12345
Copy link
Member Author

Quick question, how much of the proposed changes here will block V8 release? Will this push out V8 release date? (that would be quite unfortunate)

@JustSlone Any major renames or code moves would block the release. I don't think it will push out the date.

- Get rid of `react-internal`
- `react-internal` components move back to `react`
- To break a cycle: `react-date-time` components move into `react`, and `react-date-time` re-exports them
- Open question: should we make code location or naming changes to any other `react-*` packages which still contain legacy components?
Copy link
Collaborator

@JustSlone JustSlone Feb 5, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say it would be ideal if the only react-* packages were converged components, but I don't think it's a high priority. I would certainly not suggest we delay v8 release for moving additional react-* packages.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keep this because we will have a variety of other platforms (inside and outside our repo) under @fluentui scope.

Would be nice if it could mean "converged" but that's not realistic.


Another sneaky way out would be moving the new card to a new package `react-card` (singular), which is a more standard name but could definitely lead to confusion having both.

### Should `@fluentui/react-*` mean converged? (remove `react-` prefix from old packages?)
Copy link
Collaborator

@JustSlone JustSlone Feb 5, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wasn't part of the reason to prefix with react- to make it clear these packages were associated with @fluentui/react instead of northstar or web-components? Would we be losing that if we go back?

I don't have a strong preference, but wanted to make sure we aren't forgetting the reasons we prefixed with react-.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion:

I'd go with complete isolated approach in terms of folder structure (if we don't wanna do it in new repo/next branch - very common in OSS)

/packages
  /react-next (>= v9)
     /react     - `name: @fluentui/react; version: 9.0.0-alpha.1`
          -> ```
                bundle which re-exports everything 
                export * from '@fluentui/react-button'
                export * from '@fluentui/react-avatar'
              ....
       ```
     /button - `name: @fluentui/react-button; version: 9.0.0-alpha.1`
     /avatar- `name: @fluentui/react-avatar; version: 9.0.0-alpha.1`
     /text- `name: @fluentui/react-text; version: 9.0.0-alpha.1`
     /theme- `name: @fluentui/theme; version: 9.0.0-alpha.1`
     /theme-provider - `name: @fluentui/theme-provider; version: 9.0.0-alpha.1`
  /react (v8)
  /react-button (v8)
  /react-avatar (v8)
  /fluentui (v0)
  /web-components

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hah just realised that this wouldn't allow users to use both 8/next in hybrid mode ...

Anyways I'd still keep it "isolated" from folder structure perspective:

question/thought:

What about following?:

  • consumers are using v7/8
  • they have in their deps(package.json) "@fluentui/react": "7.x"
  • we have converged Button -> publish "@fluentui/react-button": "9.0.0-alpha.1"
  • consumer want to use converged button
  • he adds "@fluentui/react-button": "9.0.0-alpha.1"
  • now he can use both buttons:
import {Button} from '@fluentui/react'
import {Button as ConvergedButton} from '@fluentui/react-button'
  • convergence continues
  • some initial feature set of components is converged
  • we publish - "@fluentui/react": "9.0.0-alpha.1", "dist-tag": "next"
  • consumer continues migration/hybrid mode
  • consumer comes to state that he is not using any v7/8 anymore (convergence continues)
  • we have new converged components -> publish - "@fluentui/react": "9.0.0-alpha.2", "dist-tag": "next"
  • consumer installs new converged suite, and removes atomic converged packages
-"@fluentui/react": "7.x"
+"@fluentui/react": "9.0.0-alpha.2"
-"@fluentui/react-button": "9.0.0-alpha.2"
-"@fluentui/react-avatar": "9.0.0-alpha.2"
import {Button} from '@fluentui/react'
- import {Button as ConvergedButton} from '@fluentui/react-button'
  • initial convergence feature set is stable
  • we release "@fluentui/react": "9.0.0", "dist-tag": "latest"

Summary:

Pros:

  • no need for temporary name for fluentui react barrel
  • "less" confusion to consumers what is what
  • explicit folder and single source of truth for devs working on convergence

Cons:

  • Until consumer have not fully migrated to v9 they won't be able to use just whole barrel rather than granular installs.
    • I wouldn't say it's a con necessarily rather than more "verbose" syntax to consumers

WDYT?

Copy link
Member Author

@ecraig12345 ecraig12345 Feb 5, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reasoning we went with at the time of the name changes was literally "any package which uses React should have react- prefix" (not association with a particular parent package). But we can revisit that reasoning if it makes sense.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Hotell I think that will work at the broad strokes level.
Here's some useful context from later last year: [RFC] Increasing focus and iteration speed in convergence - Lean the Towers v2.0

To summarize what I think will work, and what I think you're saying here

  • Ship react-button 9.0-alpha (could it also be react-button 0.0.x-alpha?)
  • Customers use v7/v8/v0 and [email protected]
  • Later we roll react-button into @fluentui/[email protected]
    • Addition: when we do this I think we need to update components in @fluentui/react that use button to use react-button 9.0
  • Eventually @fluentui/react is mostly converged components
    • At this point we could choose one of this options:
      • Make minimal updates to legacy components to use tokens/styling making them "converged enough"
      • Spin out remaining legacy components to their own packages, making @fluentui/react 100% converged
      • Some other great idea we come up with later

Regarding:

/packages/react-next/button (>= v9)

react-next is a folder name that will only be accurate for a period of time, which means we'll have to move the components out of this folder at some point. Do we really want to force ourselves to do file moves in the repo? I'd recommend we name this something more durable such as: react-components which could eventually become a place where we put all the component packages for the @fluentui/react library. We could then re-export these wherever we need to.

Another question on packages/react-next/button wouldn't this make it harder to find the folder which exports @fluentui/react-button? I think that's one of the benefits of having a flat packages/* folder there is a 1:1 mapping between released packages and folders in the repo. I could be wrong though.

Regarding:

consumer comes to state that he is not using any v7/8 anymore (convergence continues)

The point at which consumers are not using any v7/v8/v0 components is probably a long distance in the future. The goal for now is to build out a baseline set of converged components such that the converged components cover the common components needed to build an application. While the desire is to eventually deprecate all 80 legacy components, the time frame on that is likely exceedingly long, and the number of technical challenges that must be solved to do that is daunting.

Another thing to consider is that the cost of doing a major upgrade of @fluentui/react for both us and our partners (though mostly partners) is fairly high. I would suggest we plan on v9.0 being much later and mix-matching the converged packages with both @fluentui/[email protected] and @fluentui/react-northstar for some time.

I honestly think it wouldn't be a bad idea to keep our options open about how specifically components fold back into @fluentui/react (as long as we have multiple workable options). The number one priority we have right now is getting to a useful set of baseline components. We have partners looking to build entirely on top of converged components right now. This is a great opportunity to test out our converged model in real use cases and iterate on it quickly. Folding back into @fluentui/react is of less importance right now. As we go forward we will learn more which likely will lead us to a particular implementation.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another question on packages/react-next/button wouldn't this make it harder to find the folder which exports @fluentui/react-button?

I don't think so:

  • you can directly point user from npm overview to implementation in any particular folder
  • whole convergence is gonna be powered by TS path aliases, one click away to be redirected to right direction
  • the sandboxing/separation is explicit by next folder

With that a question may arise:

  • So how will we able to "gradually" add converged component to "v8" react suite? -> Well only option that I see here is to specify it within direct dependencies -> thus consuming it from npm (as we'll have different versions of same pkg name in same branch) or leveraging "old" build upfront. I'll need to investigate this when the right time comes. (other thing that comes to my mind is to extend react tsconfig with new tsconifg.base.json ...)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think so:

  • you can directly point user from npm overview to implementation in any particular folder
  • whole convergence is gonna be powered by TS path aliases, one click away to be redirected to right direction
  • the sandboxing/separation is explicit by next folder

Sounds good. I can see how a subfolder to organize things would go a long way to cleaning things up (just today someone contributing changes to slider changed packages/react-slider rather than packages/react-internal/src/components/slider, I'm not surprised they fell into that trap).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For purposes of reducing further scope creep of this RFC, I think any repo structure changes like subfolders that don't affect package naming should be considered separately (I tried to call this out at the beginning of the doc). Totally agree that it's a possible helpful tool for clarifying to contributors what's what, but it's a whole separate discussion for another RFC. Also it can be changed at any time without impact on consumers, so it doesn't block version 8.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The naming of a future suite package for consuming only converged components is also intended to be covered by #16577, not this RFC.

- Possible sub-badge: [![stable (legacy)](<https://img.shields.io/badge/stability-stable%20(legacy)-green>)](https://github.com/microsoft/fluentui/wiki/Package-status)
- [![deprecated](https://img.shields.io/badge/stability-deprecated-red)](https://github.com/microsoft/fluentui/wiki/Package-status)

We might also want separate badges for category/convergence/??? (naming suggestions welcome)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer the separate badges for convergence (if we need them).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: I'd add explicit annotations to public APIS as well - ideally have automation that would take that as source of truth and generate those badges.

eg:

/**
 * @experimental
 */
export function Button(props){....}

/**
 * @stable
 */
export function Avatar(props){....}

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was going to suggest using the @packageDocumentation comment for this purpose and including a status annotation in the comment, but at least according to the API Extractor docs that's explicitly not supported. 🙄

On individual APIs we could use release tags but that has to be done on each API individually. While this is definitely something we should consider using, I'm not sure offhand how you'd set up automation to determine the overall release status of a particular package based on individual API tags.

Another possibility for communicating release status is to just use semver, like staying on a prerelease (-dev followed by -beta?) until it's ready. I guess in theory 0.x is also supposed to communicate this but it's a bit less explicit.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah those annotations will definitely not "solve" the general status. but it's always a good idea to include them for particular apis to explicitly communicate.

I'm all for semver and prerelase tags 👍

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may be too quick to "release" unstable/semi-stable things to partners--okay during iteration but we should keep the heaviest churn internal.

@alpha/@beta tags on individual APIs could be good if we have unstable APIs within an overall stable package, but having to add annotations on every API in a new package is less useful.

Copy link
Member Author

@ecraig12345 ecraig12345 Feb 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should ensure that before we "ship" anything, need agreement from relevant parties on both sub-teams. Don't repeat what we did with react-compose where we release too soon and not all parties are aware.

Consider quarterly planning for breaks and new releases for converged stuff only (separate RFC?). Won't affect v0 or v8.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make an RFC or something discussing previous issues we hit with versioning a suite package.

- Possible sub-badge: [![stable (legacy)](<https://img.shields.io/badge/stability-stable%20(legacy)-green>)](https://github.com/microsoft/fluentui/wiki/Package-status)
- [![deprecated](https://img.shields.io/badge/stability-deprecated-red)](https://github.com/microsoft/fluentui/wiki/Package-status)

We might also want separate badges for category/convergence/??? (naming suggestions welcome)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: I'd add explicit annotations to public APIS as well - ideally have automation that would take that as source of truth and generate those badges.

eg:

/**
 * @experimental
 */
export function Button(props){....}

/**
 * @stable
 */
export function Avatar(props){....}


Another sneaky way out would be moving the new card to a new package `react-card` (singular), which is a more standard name but could definitely lead to confusion having both.

### Should `@fluentui/react-*` mean converged? (remove `react-` prefix from old packages?)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion:

I'd go with complete isolated approach in terms of folder structure (if we don't wanna do it in new repo/next branch - very common in OSS)

/packages
  /react-next (>= v9)
     /react     - `name: @fluentui/react; version: 9.0.0-alpha.1`
          -> ```
                bundle which re-exports everything 
                export * from '@fluentui/react-button'
                export * from '@fluentui/react-avatar'
              ....
       ```
     /button - `name: @fluentui/react-button; version: 9.0.0-alpha.1`
     /avatar- `name: @fluentui/react-avatar; version: 9.0.0-alpha.1`
     /text- `name: @fluentui/react-text; version: 9.0.0-alpha.1`
     /theme- `name: @fluentui/theme; version: 9.0.0-alpha.1`
     /theme-provider - `name: @fluentui/theme-provider; version: 9.0.0-alpha.1`
  /react (v8)
  /react-button (v8)
  /react-avatar (v8)
  /fluentui (v0)
  /web-components

| `@fluentui/react-button` | Was previously considered ready for release (and therefore ready to export from `@fluentui/react`), but we've decided that while it's ready for partners to try out and should be stable within this major release, there will be some significant changes in the next major release. |
| `@fluentui/react-cards` | Weird case since there's an old version (built on `@uifabric/foundation` `createComponent` patterns) but it never officially graduated from experimental status and isn't exported from the suite. It also has a `next` folder where the converged version is currently being worked on. |
| `@fluentui/react-date-time` | Previously `@uifabric/date-time`. It's a rewrite (mostly by OWA folks, started awhile ago) of the original OUFR Calendar and DatePicker, but still using older patterns. New for v8, the Calendar and DatePicker from this package are exported from `@fluentui/react` by default. |
| `@fluentui/react-focus` | Current version of FocusZone with most of the work needed to converge with v0's FocusZone. Still differs in are some default values and things that are pulled from the theme. |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit:

Suggested change
| `@fluentui/react-focus` | Current version of FocusZone with most of the work needed to converge with v0's FocusZone. Still differs in are some default values and things that are pulled from the theme. |
| `@fluentui/react-focus` | Current version of FocusZone with most of the work needed to converge with v0's FocusZone. Still differs in some default values and things that are pulled from the theme. |


<!-- Optional section, but useful for first drafts. Use this section to track open issues on unanswered questions regarding the design or proposal. -->

### Should we change anything about `react-cards`?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should delete it from version 8. To my understanding there was one partner using it and they knew it wasn't officially released. We could still provide support in the 7.0 branch and, honestly, there's not much in terms of influx of Card related issues.


### Use semver to help communicate status

New packages should be created with version `0.1.0`. While the open source community (and even this repo) is extremely inconsistent in its use of `0.x` versions, that is in theory the "standard" way to indicate that a package is not production-ready.
Copy link
Member Author

@ecraig12345 ecraig12345 Feb 11, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add:
0.x means not ready. Badges will help clarify this due to inconsistent usage of 0.x in ecosystem.

When things are close to ready, we should release 1.0.0-alpha (may break, frequent revisions). -beta once it's closer (close to stable, time to try out). Release once it's final.

Start everything at 1.0.0-alpha. Disadvantage is you can't go back to 0.x. Advantage is it can be consistent across all packages. Communicates that we're actively iterating and you should not use this.

Maybe: Go to -beta when it's almost stable. It's still NOT ready to go in your production pipeline and be pushed out to customers, but it's ready to try out in a branch to verify that the component generally works. Still need more consideration of whether this phase should exist.

Doesn't have to be perfect to be 1.0. Major release is more about when we're ready to commit to it on an initial version.

Larger versioning discussion: how to major bump in a monorepo, and how hard it is

@ecraig12345 ecraig12345 marked this pull request as draft March 9, 2021 22:36
@msft-fluent-ui-bot
Copy link
Collaborator

Because this pull request has not had activity for over 150 days, we're automatically closing it for house-keeping purposes.

The pull request will still be available for reference. If it's still relevant to merge at some point, you can reopen or make a new version based on the latest code.

@msft-fluent-ui-bot msft-fluent-ui-bot added the Resolution: Soft Close Soft closing inactive issues over a certain period label Sep 28, 2021
@ecraig12345
Copy link
Member Author

Leaving this closed since it's a mix of implemented and abandoned. The badge idea might be worth picking up again, but not essential immediately (and we improved the state of that using prerelease tags).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Resolution: Soft Close Soft closing inactive issues over a certain period Type: RFC Request for Feedback
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants