chore(frontend): remove the icon library nothing imports, and the migration language around it - #774
Merged
Merged
Conversation
The annotation workspace was the last place drawing `lucide-react`, and it moved to Tabler two phases ago. Nothing in the repository imports it now - not the product, not the annotator, not the demo, not a test, not the benchmark - so the two manifests that still declared it were describing a dependency the frontend had stopped having. The lockfile is resolved from scratch against the new manifests and a clean frozen install runs from an empty tree, so this is not a manifest edit hoping the lock agrees with it. The frontend dependency bump (#768) raises this package's version on the same two lines. It will want a rebase that drops the entry rather than a merge; the other four bumps it carries are unaffected.
…orts The gate added when the workspace migrated scanned that one directory for the old package's name. That was the right shape while the dependency was still declared and a stray import would resolve, build and render. With the dependency gone such an import fails outright, so the loud half no longer needs guarding - and the quiet half now does: a manifest that declares the package again restores the whole problem, and nothing else in the repository would notice. So the invariant moves beside the other design gates and asserts both halves over the whole tracked tree rather than one directory. Both were checked by breaking them, separately: a manifest that declares the package fails it, and a source that imports it fails it naming the file. `iconSet.test.ts` goes with it, subsumed - the new scan reads the directory it watched, and two tests for one rule is one of them going stale unnoticed.
Six places still described a migration that had finished. `DESIGN.md` and the frontend setup skill both said Lucide survived in the annotation workspace, and both were wrong the day they were written: the change that wrote them is the one that migrated that directory. The architecture note repeated it, the `ui-core` barrel still credited "Radix + lucide only (decision H)", and the demo's tool strip explained its hand-drawn glyphs by citing a pin `DESIGN.md` dropped when the preset landed. Each now says what is true, and `DESIGN.md` points at the gate rather than at a directory, so the claim cannot go stale the same way twice. The demo's note says less than the one it replaces, deliberately. The tempting explanation - that the demo runs without `@visionset/ui-core` - is also false: it imports `AnnotatorPanel` and the theme helpers from there. What holds is narrower, and is what the note now says: this strip imports only the engine.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The migration is finished, so this removes what only made sense while it was
running: an icon library nothing imports, a gate shaped for a dependency that no
longer exists, and six statements describing a state the product left behind.
Seventeen categories were audited. Three produced changes. The rest were already
clean, and saying so with evidence is part of the result - a cleanup phase that
deletes something from every category it opens is a phase that deleted things it
did not understand.
What was removed
The icon library.
lucide-reacthas no importer anywhere: not the product, notthe annotator, not the demo, not a test, not the benchmark. Both manifests that
declared it are cleaned, the lockfile is resolved from scratch against them, and a
frozen install runs from an empty tree - so this is not a manifest edit hoping the
lockfile agrees.
A gate that had outlived its shape. The scan added when the workspace migrated
read one directory for the package's name. That was right while the dependency was
declared and a stray import would resolve, build and render. With the dependency
gone such an import fails outright, and the half that now needs guarding is the
manifest: declare the package again and the whole problem returns with nothing to
say so. The invariant moves beside the other design gates, asserts both halves over
the whole tracked tree, and was checked by breaking each half separately.
Six stale statements.
DESIGN.mdand the frontend setup skill both said Lucidesurvived in the annotation workspace. Both were wrong the day they were written:
the change that wrote them is the change that migrated that directory. The
architecture note repeated it, the
ui-corebarrel still credited "Radix + lucideonly (decision H)", and the demo's tool strip explained its hand-drawn glyphs by
citing a pin
DESIGN.mddropped when the preset landed.DESIGN.mdnow points atthe gate rather than at a directory, so the claim cannot go stale the same way.
What was audited and kept, with the evidence
Four dependencies that looked unused are not.
tw-animate-css,shadcnandboth
@fontsource-variablepackages have no TypeScript importer, and all fourarrive through
@importinstyles.css.shadcnin particular is a runtime CSSdependency here, not only the CLI. An import scan that reads only TypeScript is
exactly the false positive this phase is most likely to act on.
Every extension token is live. All seven -
stage,brand,success,warningand the threeorigin-*marks - are declared in both themes and usedbetween one and ten times. None is dead.
No dead components, and no export removals. Every module under
frontend/ui-core/srchas a consumer. The barrels were left alone on purpose:@visionset/ui-coreand@visionset/annotatorareprivate: falsewithfilesand
mainset, anddocs/content/releasing.mddescribes publishing them, so theirexports are an external contract that in-repo usage cannot declare dead.
The
/inferenceredirect stays. Its own comment argues it - a bookmarked URL isa promise. A deliberate redirect is compatibility, not dead code.
The retired token vocabulary is already absent, the primitives carry no
compatibility branch or deprecated variant, and the remaining "workaround" comments
explain why today's code differs from what came before, which is the kind that
earns its place.
Test plan
Every command ran inside Docker/Linux; no repository validation ran natively on the
host.
A cleanup is behaviour-neutral or it is not cleanup, so eleven surfaces were loaded
and watched: Home, Projects, Models, Overview, Schema, Batches, Dataset, Ingest,
Gallery, the styleguide and the demo. All render, every one paints Tabler glyphs
(2 to 22 of them), no module fails to resolve and no style is missing.
Two console errors turned up and neither belongs to this branch. Thumbnail reads
were answering 500 from a
PermissionErroron/data/dev/blobs- a developmentworkspace whose blob directory is owned by root, which is the same environment
fault that made the API refuse to open its database earlier today, and not
something the repository can fix. The other is a 404 on
schema/drafts/curated: the screen asking whether a draft exists and being told itdoes not, which
ui-corealready covers with a test that resolves that 404 to nullin exactly one request.
Overlap
The frontend dependency bump (#768) edits
frontend/app/package.json,frontend/ui-core/package.jsonandpnpm-lock.yaml- the three files this branchtouches, on the same lines, to raise the version of the package being removed.
DEPENDENCY OVERLAP. It should be rebased rather than merged around: the entry
it raises is gone, and the four other bumps it carries are unaffected by this.
Scope
Remaining debt
Nothing legacy. What is left is product work rather than migration residue: a
visual-regression baseline still wants stabilised fixtures before it is worth
having, and hostile-content coverage beyond a long name and description - a long
class name, a long model reference, a large annotation count - wants a fixture
because the schema write path refuses the shape an API call would use to seed it.