Skip to content

chore(lab): remove MobileTokenizer and MobilePowerSearch, whose flows Core ships behind experimental.presentation - #9790

Merged
imdreamrunner merged 1 commit into
mainfrom
chore/lab-remove-mobile-sheets
Nov 3, 2026
Merged

imdreamrunner merged 1 commit into
mainfrom
chore/lab-remove-mobile-sheets

Conversation

@imdreamrunner

@imdreamrunner imdreamrunner commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Maintainer impact

Two Lab components, MobileTokenizer and MobilePowerSearch, were the prototypes of the touch sheet flows that Core's Tokenizer and PowerSearch now ship behind experimental.presentation. Keeping them means two copies of each flow to maintain, two sets of tests that drift, Lab-only internal entries in Core, and records that describe Core by comparing it with a prototype.

Intended invariant

One owner per flow: Core's TokenizerBottomSheet and PowerSearchBottomSheet are the touch sheet presentations; Lab holds no copy; Core's internal sheet modules are imported only inside Core by relative path; the component records state Core's behavior on its own.

Change

  • Removed packages/lab/src/MobileTokenizer/* and packages/lab/src/MobilePowerSearch/* (component, value editor, utils, tests, .doc.mjs, index) and their exports from packages/lab/src/index.ts.
  • Removed apps/storybook/stories/MobileTokenizer.stories.tsx and MobilePowerSearch.stories.tsx, their two RTL-audit targets, and their three file entries in the comment-provenance lint baseline (the baseline only shrinks).
  • Regenerated the CLI discover inventory (packages/cli/assets/discover/official-packages.json) without the two names, with a [chore] changeset for @astryxdesign/cli.
  • Refreshed the reviewed ShadCN route lock (internal/shadcn-registry/routes.lock.json): the two Lab registry items (components/lab/mobile-tokenizer, components/lab/mobile-power-search) drop out. No alias is kept: @astryxdesign/lab is private and canary-only with no stability promise, and no record (spec:AST-026, spec:AST-039) asks removed Lab routes to keep aliases.
  • Removed the Core internal entry @astryxdesign/core/internal/touch-sheet (its package.json export and sync-exports registration), which existed only for these two Lab components; a [chore] patch changeset for @astryxdesign/core names the removed internal entry. Core's sheets import SheetConfirmation, useDismissSearchOnTouchDrag and sheetDraft by relative path as before; sheetDraft.ts's header no longer names the entry. architecture:react-component-runtime INV13 stays true as written: the ./internal/touch entry remains for Lab (no Lab file imports it today), and no import of @astryxdesign/core/internal/* exists outside Core and Lab.
  • Records, present tense, stating Core without the prototype:
    • component:Tokenizer — verified_by drops the Lab test and adds packages/core/src/internal/sheetDraft.test.ts, which covers the Save rule and dirty check it covered; the FR16–FR27 rationale cells read "touch-flow evidence" (DEC-3/DEC-4); six row statuses read "Verified current behavior."; FR27's remaining action-group gap no longer cites the prototype; the FR16–FR27 verification-map row names the sheet's own draft, Save, footer, confirmation and drag tests.
    • component:PowerSearch — Public concepts and DEC-3 no longer name MobilePowerSearch or the naming of it as Core's target; the "differs from the prototype in eight places" passage becomes the eight details the flow fixes, stated once; the rejected "steps replace one another" alternative names "an earlier draft of the flow"; the INV7 element-count exception drops the prototype's measurements and keeps Core's; FR10–FR17 rationale cells read "touch-flow evidence".
    • component:Indicator — the current-state note on direct indicator imports names the Tokenizer bottom sheet and the PowerSearch value step.
    • spec:AST-056 — the Lab example of the search-prop drift no longer counts MobileTokenizer.
    • component:BottomSheetSwitcher — the downstream row no longer says the two Lab components are migrated; Lab has no switcher consumer.
  • Not changed: apps/sandbox/.../motion-lab/__generated__/motionAudit.ts still lists the two names; it is a dated measurement snapshot (core 0.7.5) whose regeneration rewrites 1,600 unrelated lines, so it is left to its own generate:motion-audit run. CI script fixtures (.github/scripts/touched-components.test.mjs, ci-test-routing.test.mjs) and the v0.7.0 codemod test use MobileTokenizer only as example strings. No other Lab component duplicates a Core experimental presentation.

Coordination: #9655 (fix/powersearch-date-zone) and #9639 (feat/calendar-formatters) currently edit packages/lab/src/MobilePowerSearch/*. Whichever lands second drops its Lab parts; since this PR deletes the files, a rebase of either onto it means dropping their Lab hunks.

Evidence

  • Lab builds, typechecks and tests without the two components; Storybook typechecks and builds without the stories; sync-exports --check and verify-exports pass without the entry; the CLI goldens pass on the regenerated inventory; pnpm check:knowledge aligned.
  • Counts for the head are in the PR thread.

Writing rubric results

  • R1 narration: none; the removed sentences were present-tense comparisons with a component that no longer exists.
  • R2 research in the record: none; the prototype's element-count measurements, research evidence, are removed.
  • R3 evidence naming a change: none; statuses cite the Core test files.
  • R4 rejected alternatives over one line or outside a decision: unchanged.
  • R5 pull request or issue references: none added.
  • R6 ruled open questions still listing options: unchanged.

Scope

  • No intended public API, product behavior, visual direction, or policy change. (@astryxdesign/lab is private and canary-only; Core's public surface is unchanged, and internal/touch-sheet was an undocumented internal entry outside the compatibility promise.)
  • Product changes discovered during the work were removed or split.
  • Public text and artifacts contain no internal Meta context.

Testing

  • pnpm exec vitest run packages/lab; pnpm -F @astryxdesign/lab typecheck:docs; lab tsc --noEmit
  • pnpm -F @astryxdesign/storybook typecheck; pnpm storybook:build
  • pnpm exec vitest run packages/core/src/Tokenizer packages/core/src/PowerSearch packages/core/src/internal packages/cli/test; core typecheck
  • pnpm build; pnpm check:repo; node scripts/sync-exports.js --check; node scripts/verify-exports.mjs; pnpm check:knowledge; pnpm check:changesets and scripts/release/changeset-coverage.mjs pr --base origin/main --head HEAD --released v0.7.6 (ships to core and cli, each named; Lab is private and needs none); strict ESLint on the touched files; Prettier; git diff --check

@vercel

vercel Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
astryx Ready Ready Preview Nov 3, 2026 7:42pm UTC

Request Review

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Nov 3, 2026
@imdreamrunner

Copy link
Copy Markdown
Contributor Author

/approve-spec 85d2c36

@imdreamrunner

Copy link
Copy Markdown
Contributor Author

@astracat-bot review

@astracat-bot

astracat-bot Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
🟢 Reviewed (for maintainers only) Nov 3, 2026, 7:50 PM UTC

@imdreamrunner

Copy link
Copy Markdown
Contributor Author

/approve-spec 4ed1e41

@imdreamrunner

Copy link
Copy Markdown
Contributor Author

@astracat-bot review

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Requesting changes: the removal is in scope, and two small fixes remain before it can merge.

  • docs/specs/components/BottomSheet/BottomSheetSwitcher.spec.md:99 still says Lab's MobileTokenizer and MobilePowerSearch "are migrated", so please reword it (for example "Lab has no switcher consumer, so no maintained surface uses the switcher"), and the new head will need a fresh /approve-spec.
  • apps/storybook/rtl-audit/targets.json re-wraps 37 untouched entries (202 of its 220 changed lines), so please run node apps/storybook/rtl-audit/sort-targets.mjs --fix, which leaves only the two Lab deletions and avoids conflicts with other open target edits.

Optional: the new @position line in packages/core/src/internal/sheetDraft.ts says the PowerSearch sheet shares the module, but only the Tokenizer sheet imports it.

[Automated review]

Comment thread apps/storybook/rtl-audit/targets.json Outdated
Comment on lines +6 to +8
"setup": {
"click": "button:has-text(\"Delete item\")"
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This re-wraps an untouched target, as do 36 others (202 of this file's 220 changed lines). node apps/storybook/rtl-audit/sort-targets.mjs --fix puts the file back in the base layout minus the two Lab entries, so the next --fix run would revert all of it. Running --fix here leaves only the two deletions.

Comment on lines +7 to +8
* @position Core-internal, shared by the Tokenizer and PowerSearch sheets;
* not a public export

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Non-blocking: only Tokenizer.tsx and TokenizerBottomSheet.tsx import this module; PowerSearch reaches it only through the Tokenizer sheet its list-value step renders. Suggested: @position Core-internal. The Tokenizer sheet uses it, and PowerSearch's list-value step renders that sheet. Not a public export.

@imdreamrunner
imdreamrunner force-pushed the chore/lab-remove-mobile-sheets branch from 4ed1e41 to b38cf46 Compare November 3, 2026 19:01
@imdreamrunner

Copy link
Copy Markdown
Contributor Author

/approve-spec b38cf46

@imdreamrunner

Copy link
Copy Markdown
Contributor Author

@astracat-bot review

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Approving: the removal is in scope, Core's runtime is unchanged, and the stale BottomSheetSwitcher row and the targets.json reformat flagged earlier are both fixed.

Before this can merge, please rebase onto main. Main added ./internal/selectable-card immediately after the removed ./internal/touch-sheet entry in packages/core/package.json and scripts/sync-exports.js, so keep that entry and drop touch-sheet. CI has not run while the branch conflicts, and the rebased head will need its own /approve-spec.

[Automated review]

… Core ships behind experimental.presentation

Core's Tokenizer and PowerSearch sheet presentations are the touch flows
these two Lab prototypes carried, so the Lab components, their stories,
RTL-audit targets, lint-baseline entries and discover inventory rows go.
The Core internal entry `internal/touch-sheet` existed only for them and
goes too; Core's sheets import the modules by relative path. The
Tokenizer, PowerSearch, Indicator and AST-056 records state Core's
behavior without the prototype, and Tokenizer's verification names the
draft rule's own tests.
@imdreamrunner
imdreamrunner force-pushed the chore/lab-remove-mobile-sheets branch from b38cf46 to 7a2efc3 Compare November 3, 2026 19:28
@imdreamrunner

Copy link
Copy Markdown
Contributor Author

/approve-spec 7a2efc3

@imdreamrunner

Copy link
Copy Markdown
Contributor Author

@astracat-bot review

@astracat-bot astracat-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Approving: the two Lab prototypes and Core's Lab-only internal/touch-sheet entry are removed cleanly, Core's runtime is unchanged, and the rebase keeps main's new internal/selectable-card entry.

There are no blocking findings. Two small description notes, for accuracy only:

  • The INV13 note says Lab still reaches the touch modules through ./internal/touch, but no Lab file imports that subpath; the invariant holds either way.
  • The record list leaves out the BottomSheetSwitcher downstream-row edit that the diff carries.

[Automated review]

This branch was successfully deployed

1 active deployment
Preview — 7a2efc30 Deployed Nov 3, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant