conceptadev / conceptadev/remix
Track direct and transitive Material boundaries for published Remix packages
- Dominant language
- Dart
- Stars
- 18
- Forks
- 4
- Avg merge
- 18h 37m
- Merged PRs (30d)
- 52
Description
## Problem
[PR #134](https://github.com/conceptadev/remix/pull/134) removes Remix-owned Material imports, Material default icons, and `uses-material-design` from the published `remix` and `remix_fortal` packages. That establishes an important **direct-source** boundary, but it does not yet make the resolved dependency graph Material-free.
The current [`check_material_independence.dart`](https://github.com/conceptadev/remix/blob/9b0dafaa597e26598df80224ad9d2b190a24ee38/tool/check_material_independence.dart) scans only the two packages' own `lib` trees and pubspecs, then reports that the libraries “are independent of Material.” After the chart work merged to `main`, `remix_fortal` also depends on `mix_chart`, so the distinction matters:
- `mix` has both replaceable broad imports and real Material theme integration. Tracked in [conceptadev/mix#1021](https://github.com/conceptadev/mix/issues/1021).
- `naked_ui` uses Material selection controls and magnifier defaults as well as broad imports. Tracked in [conceptadev/naked_ui#86](https://github.com/conceptadev/naked_ui/issues/86).
- `mix_chart` can remove its own direct Material color usage, but `fl_chart` remains a known transitive Material dependency unless or until its boundary changes.
This is a follow-up dependency-graph tracker, not a reopening of the host and navigation work from #82 or #96.
## Target boundary
Use two explicit milestones:
1. **Direct independence:** published Remix source and manifests do not import, export, depend on, or enable Flutter Material themselves.
2. **Transitive independence:** the resolved runtime dependency graph also contains no Material-backed package code.
PR #134 should claim and enforce the first milestone. The second remains tracked here until compatible upstream releases exist.
## Coordination plan
1. Rebase #134 after the merged chart work and migrate the new Fortal chart recipe off its direct Material import and `Colors.transparent`.
2. Keep the source-level validator blocking for `remix` and `remix_fortal`, but change its success/error language and documentation to say **direct Material independence**.
3. Reuse existing canonical values for implementation code:
- design tokens first for themed values;
- `MixColors` for exact shared constants such as transparent, white, black, and black54 where Mix is already a dependency;
- local constants only when adding a dependency would be unjustified.
4. Do not mechanically rewrite generated Radix color/icon source-of-truth files merely to deduplicate literals.
5. Track the first compatible Mix and Naked UI releases from the linked upstream issues, then update Remix constraints and tests deliberately.
6. Record `fl_chart` as a known transitive exception; do not require a fork or replacement without a separate evidence-backed decision.
7. Add a dependency-graph validation step when the transitive milestone becomes achievable.
The complete generated `FortalIcons` Radix catalog remains intentionally integrated in `remix_fortal`. Removing `uses-material-design` removes the Material icon-font contract; it does not mean the package must contain no font assets, and this tracker does not require extracting a separate icon package.
## Acceptance criteria
### Direct milestone
- [ ] #134 is rebased onto the chart changes and has no unresolved Material drift.
- [ ] `packages/remix/lib` and `packages/remix_fortal/lib` contain no direct `package:flutter/material.dart` imports or exports.
- [ ] Their manifests do not enable `uses-material-design` or declare a Material UI dependency.
- [ ] Validator output and public documentation consistently say “direct Material independence.”
- [ ] `WidgetsApp`-based tests cover representative Remix, Fortal, overlay, and chart usage without a Material host.
- [ ] Implementation defaults reuse tokens or canonical `MixColors` values when exact equivalents already exist.
- [ ] The integrated `FortalIcons` font behavior and release-size cost are documented accurately.
### Transitive milestone
- [ ] Remix consumes compatible releases produced from [Mix #1021](https://github.com/conceptadev/mix/issues/1021) and [Naked UI #86](https://github.com/conceptadev/naked_ui/issues/86).
- [ ] The resolved dependency graph is audited for runtime Material imports, including `mix_chart` and `fl_chart`.
- [ ] Any remaining exceptions are named precisely; no validation or documentation overclaims the achieved boundary.
- [ ] Once no exceptions remain, CI blocks transitive Material reintroduction.
## Non-goals
- Moving Mix's intentional Material-theme APIs before Mix approves that design.
- Forking or replacing `fl_chart` as part of #134.
- Extracting `FortalIcons` into a standalone package without a separate consumer or release-management need.
- Rewriting generated Radix data solely to replace literal colors.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with tool/check_material_independence.dart, PR #134, and the manifests and lib trees for packages/remix and packages/remix_fortal. Review the existing WidgetsApp-based tests and the linked Mix and Naked UI issues; done requires accurate direct-independence validation and documentation, with transitive checks added only when compatible upstream releases exist.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- dart
- Domain
- build-system, ci-cd
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 28/100