Skip to content

chore(web): retire the v1 front end, keeping its design tokens - #84

Merged
InstaZDLL merged 4 commits into
mainfrom
chore/retire-v1-web-frontend
Aug 9, 2026
Merged

chore(web): retire the v1 front end, keeping its design tokens#84
InstaZDLL merged 4 commits into
mainfrom
chore/retire-v1-web-frontend

Conversation

@InstaZDLL

@InstaZDLL InstaZDLL commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Removes web/, the TanStack Start + Better Auth client for the v1 server, after salvaging the one part worth keeping.

Why it goes

Its routes address a profiles/$profileId/libraries/$libraryId hierarchy that no longer exists, and its server functions assume a Node runtime the single binary does not have. It has been neither built, served nor tested since the v2 rebuild — and since M4 it is outside CI entirely. Keeping it meant a half-application in the tree that every review kept flagging.

What is kept

packages/design-tokenswebapp/src/design-tokens/: 14 theme presets (6 light, 8 dark), accent palettes and the DOM apply helper. No dependencies, its own tests. Its shape deliberately mirrors the desktop's ThemePreset, so a dump of the desktop preference hydrates the web side without translation — which is what M6 ("studio-nocturne, bilingual") will need. webapp/ currently has a handful of hand-written CSS variables.

vitest gains a jsdom environment, since applyTheme writes onto document.documentElement.

Tooling

Biome rather than the inherited eslint + prettier + husky + commitlint chain: one dependency and one pass, for a client of a handful of files. Flagged by the user as a preference to weigh, and I took it — noting it diverges from what web/ used.

It found real problems: every non-submit <button> lacked an explicit type, which inside a <form> means submit. Fixed. The web workflow now lints.

Configuration

Dependabot and the labeler both tracked /web. They now point at webapp. Rules targeting Better Auth routes, or the old husky/eslint/prettier files, are dropped rather than remapped onto files that do not exist.

Verification

  • Rust: 32 tests, fmt and clippy clean — unchanged by this PR
  • Web: biome clean, 21 vitest tests (16 salvaged + 5 redirect guards), build OK
  • No reference to web/ remains outside git history

Closes #81, closes #73 — both bumped dependencies of the removed front end.

Summary by CodeRabbit

  • Nouvelles fonctionnalités

    • Le client web actif propose des thèmes et palettes d’accent partagés, avec une application cohérente des styles.
  • Changements

    • L’ancienne interface web, l’authentification, la navigation musicale, les playlists, le partage et les réglages ne sont plus disponibles.
    • Les contrôles de qualité couvrent désormais le formatage, le linting, la vérification des types et les tests automatisés.
  • Tests

    • Les tests couvrent l’application des thèmes, les palettes et les principaux comportements du client.

web/ was the TanStack Start + Better Auth client for the v1 server. Its routes
address a profile/library hierarchy that no longer exists and its server
functions assume a Node runtime the single binary does not have, so it has been
neither built, served nor tested since the v2 rebuild. Keeping it meant a
half-application in the tree that every review kept flagging.

packages/design-tokens is the part worth keeping: 14 theme presets, accent
palettes and the DOM apply helper, with no dependencies and its own tests. Its
shape mirrors the desktop's ThemePreset so a dump of the desktop preference
hydrates the web side without translation, which is what M6 needs. It moves to
webapp/src/design-tokens with its suite; vitest gains a jsdom environment,
since applyTheme writes onto document.documentElement.

Tooling comes back as Biome rather than the inherited eslint + prettier +
plugins chain: one dependency and one pass for a client of a handful of files.
It surfaced real issues — every non-submit button lacked an explicit type,
which inside a form means submit — now fixed. The web workflow lints.

Dependabot and the labeler tracked /web; both now point at webapp, and the
rules that targeted Better Auth routes or the old husky/eslint/prettier config
are dropped rather than remapped onto files that do not exist.

Signed-off-by: InstaZDLL <github.105mh@8shield.net>
@github-actions github-actions Bot added ignore-for-release Excluded from release notes scope: deps Dependencies scope: web Embedded web player (React) scope: auth Authentication, tokens, sessions scope: routes Web routes scope: components Web UI components scope: design-tokens Design tokens / theming scope: tooling Build / dev tooling scope: docs Docs, README, assets size: xl > 500 lines labels Aug 8, 2026
@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e5b34d2b-6b05-4ff4-a46e-5fcb85bd69c8

📥 Commits

Reviewing files that changed from the base of the PR and between 60bbc9a and 27a8a29.

📒 Files selected for processing (2)
  • .github/dependabot.yml
  • docs/M4-handoff.md

📝 Walkthrough

Walkthrough

Le client historique web/ et ses services associés sont supprimés. webapp/ devient le client React maintenu. La CI, les scripts racine, Biome, Vitest et les palettes de design tokens sont mis à jour.

Changes

Migration du client web

Layer / File(s) Summary
Migration des chemins et de la CI
.github/*, package.json, AGENTS.md, CLAUDE.md, docs/M4-handoff.md
Les configurations et la documentation ciblent désormais webapp/. La CI ajoute le lint web. Les scripts racine exécutent les contrôles serveur et web en parallèle. L’ancien client web/ et ses services sont supprimés.
Outillage et validation de webapp
webapp/biome.json, webapp/package.json, webapp/vitest.config.ts, webapp/src/*
Biome, Vitest et jsdom sont ajoutés. Les tests de design tokens sont intégrés. Les fichiers existants adoptent les directives Biome et des types de bouton explicites.
Palettes et contrats de thèmes
webapp/src/design-tokens/*
Sept palettes OKLCH, leurs types et ACCENT_PALETTES sont ajoutés. Les presets et la résolution des thèmes sont reformatés et testés.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested labels: scope: db

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning Les objectifs des issues [#81] et [#73] ne sont pas réalisés : les dépendances Better Auth et la migration demandées ne sont pas mises à jour. Mettre à jour les dépendances Better Auth et appliquer la migration demandée, ou retirer les issues liées si leur périmètre est abandonné.
Out of Scope Changes check ⚠️ Warning Le PR supprime presque entièrement web/ et migre les design tokens, alors que les issues [#81] et [#73] demandent uniquement des mises à jour Better Auth. Limiter le PR aux mises à jour Better Auth liées aux issues, ou créer un PR distinct pour retirer web/ et migrer les design tokens.
Docstring Coverage ⚠️ Warning Docstring coverage is 46.15% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed Le titre décrit clairement le retrait du frontend v1 et la conservation des design tokens.
Description check ✅ Passed La description explique le contexte, les changements, les choix techniques et la vérification, malgré l’absence du format exact du modèle.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/retire-v1-web-frontend

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added ignore-for-release Excluded from release notes and removed ignore-for-release Excluded from release notes labels Aug 8, 2026

@coderabbitai coderabbitai 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.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/dependabot.yml:
- Around line 30-34: Update the Dependabot entry for the webapp directory to use
package-ecosystem: bun instead of npm, ensuring the configuration targets
webapp/bun.lock directly while preserving the existing directory and update
settings.

In @.github/labeler.yml:
- Around line 52-59: Remove the obsolete authentication-pattern comments in the
scope: auth block of labeler.yml, or restore the corresponding sign-in.tsx and
sign-up.tsx globs if those files are still intended to receive the
authentication label. Keep the comments aligned with the active configured
patterns.

In `@webapp/package.json`:
- Around line 12-14: Align the lint and format script scope with the patterns
defined in webapp/biome.json: if root-level TypeScript and JSON configuration
files are intended to be checked, update both scripts from src to the repository
root using Biome’s recursive check; otherwise narrow the biome configuration
patterns to src and preserve the scripts.

In `@webapp/src/pages.tsx`:
- Line 42: Move the biome-ignore directive from inside the effect callback to
immediately before the useEffect(() => { call in the affected component, so it
suppresses useExhaustiveDependencies for that hook while preserving the
caller-supplied dependency list.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 5cafae27-da6f-48fa-beb5-907ee558c850

📥 Commits

Reviewing files that changed from the base of the PR and between 5f4a2f2 and bf39c63.

⛔ Files ignored due to path filters (5)
  • web/bun.lock is excluded by !**/*.lock
  • web/public/favicon.ico is excluded by !**/*.ico
  • web/public/logo192.png is excluded by !**/*.png
  • web/public/logo512.png is excluded by !**/*.png
  • webapp/bun.lock is excluded by !**/*.lock
📒 Files selected for processing (132)
  • .dockerignore
  • .github/dependabot.yml
  • .github/labeler.yml
  • .github/workflows/ci-web.yml
  • AGENTS.md
  • CLAUDE.md
  • docs/M4-handoff.md
  • package.json
  • web/.coderabbit.yaml
  • web/.commitlintrc.cjs
  • web/.env.example
  • web/.gitignore
  • web/.husky/commit-msg
  • web/.prettierignore
  • web/.prettierrc.json
  • web/.vscode/settings.json
  • web/CLAUDE.md
  • web/CONTRIBUTING.md
  • web/LICENSE
  • web/README.md
  • web/db/README.md
  • web/db/migrations/0001_better_auth_initial.sql
  • web/db/migrations/0002_jwt_plugin.sql
  • web/eslint.config.js
  • web/package.json
  • web/packages/design-tokens/package.json
  • web/packages/design-tokens/src/apply.test.ts
  • web/packages/design-tokens/src/palettes.ts
  • web/packages/design-tokens/src/themes.test.ts
  • web/packages/design-tokens/tsconfig.json
  • web/public/manifest.json
  • web/public/robots.txt
  • web/scripts/db-migrate.ts
  • web/src/components/DeletePlaylistDialog.test.tsx
  • web/src/components/DeletePlaylistDialog.tsx
  • web/src/components/Footer.tsx
  • web/src/components/Header.tsx
  • web/src/components/NowPlayingOverlay.test.tsx
  • web/src/components/NowPlayingOverlay.tsx
  • web/src/components/OAuthButtons.tsx
  • web/src/components/PlayableTrackList.test.tsx
  • web/src/components/PlayableTrackList.tsx
  • web/src/components/PlayerBar.tsx
  • web/src/components/PlaylistFormDialog.test.tsx
  • web/src/components/PlaylistFormDialog.tsx
  • web/src/components/QueuePanel.test.tsx
  • web/src/components/QueuePanel.tsx
  • web/src/components/ThemePicker.test.tsx
  • web/src/components/ThemePicker.tsx
  • web/src/components/ThemeProvider.test.tsx
  • web/src/components/ThemeProvider.tsx
  • web/src/components/ThemeStyle.tsx
  • web/src/components/ThemeToggle.tsx
  • web/src/components/TrackFilterBar.test.tsx
  • web/src/components/TrackFilterBar.tsx
  • web/src/components/WaveflowLogo.tsx
  • web/src/lib/auth-client.ts
  • web/src/lib/auth.ts
  • web/src/lib/db.ts
  • web/src/lib/format-time.ts
  • web/src/lib/player-context.test.tsx
  • web/src/lib/player-context.tsx
  • web/src/lib/server/waveflow-server.test.ts
  • web/src/lib/server/waveflow-server.ts
  • web/src/lib/share-format.test.ts
  • web/src/lib/share-format.ts
  • web/src/lib/use-focus-trap.test.tsx
  • web/src/lib/use-focus-trap.ts
  • web/src/router.tsx
  • web/src/routes/-sign-in.test.ts
  • web/src/routes/__root.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.albums.$albumId.test.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.albums.$albumId.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.albums.test.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.albums.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.artists.$artistId.test.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.artists.$artistId.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.artists.test.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.artists.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.tsx
  • web/src/routes/_authed.profiles.$profileId.playlists.$playlistId.test.tsx
  • web/src/routes/_authed.profiles.$profileId.playlists.$playlistId.tsx
  • web/src/routes/_authed.profiles.$profileId.playlists.test.tsx
  • web/src/routes/_authed.profiles.$profileId.playlists.tsx
  • web/src/routes/_authed.profiles.$profileId.tsx
  • web/src/routes/_authed.profiles.tsx
  • web/src/routes/_authed.settings.test.tsx
  • web/src/routes/_authed.settings.tsx
  • web/src/routes/_authed.tsx
  • web/src/routes/about.tsx
  • web/src/routes/api/auth/$.ts
  • web/src/routes/desktop-login.tsx
  • web/src/routes/index.tsx
  • web/src/routes/p.$token.tsx
  • web/src/routes/sign-in.tsx
  • web/src/routes/sign-up.test.tsx
  • web/src/routes/sign-up.tsx
  • web/src/server-fns/_internal.ts
  • web/src/server-fns/albums.ts
  • web/src/server-fns/artists.ts
  • web/src/server-fns/desktop-login.test.ts
  • web/src/server-fns/desktop-login.ts
  • web/src/server-fns/libraries.ts
  • web/src/server-fns/playlists.ts
  • web/src/server-fns/profiles.ts
  • web/src/server-fns/providers.test.ts
  • web/src/server-fns/providers.ts
  • web/src/server-fns/session.ts
  • web/src/server-fns/share.test.ts
  • web/src/server-fns/share.ts
  • web/src/server-fns/stream.ts
  • web/src/server-fns/theme.ts
  • web/src/server-fns/tracks.ts
  • web/src/styles.css
  • web/tsconfig.json
  • web/vite.config.ts
  • web/vitest.config.ts
  • webapp/biome.json
  • webapp/package.json
  • webapp/src/api.test.ts
  • webapp/src/api.ts
  • webapp/src/design-tokens/apply.test.ts
  • webapp/src/design-tokens/apply.ts
  • webapp/src/design-tokens/index.ts
  • webapp/src/design-tokens/palettes.ts
  • webapp/src/design-tokens/themes.test.ts
  • webapp/src/design-tokens/themes.ts
  • webapp/src/main.tsx
  • webapp/src/pages.tsx
  • webapp/src/player.tsx
  • webapp/src/styles.css
  • webapp/vitest.config.ts
💤 Files with no reviewable changes (110)
  • web/.husky/commit-msg
  • web/public/robots.txt
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.albums.test.tsx
  • web/src/components/TrackFilterBar.test.tsx
  • web/.prettierrc.json
  • web/.vscode/settings.json
  • .dockerignore
  • web/src/lib/format-time.ts
  • web/src/lib/auth-client.ts
  • web/src/routes/sign-up.test.tsx
  • web/src/components/DeletePlaylistDialog.tsx
  • web/src/routes/api/auth/$.ts
  • web/eslint.config.js
  • web/tsconfig.json
  • web/src/components/QueuePanel.test.tsx
  • web/public/manifest.json
  • web/packages/design-tokens/tsconfig.json
  • web/README.md
  • web/db/migrations/0001_better_auth_initial.sql
  • web/.coderabbit.yaml
  • web/src/components/Header.tsx
  • web/src/routes/-sign-in.test.ts
  • web/.gitignore
  • web/src/lib/player-context.test.tsx
  • web/src/components/PlayerBar.tsx
  • web/packages/design-tokens/src/apply.test.ts
  • web/src/components/DeletePlaylistDialog.test.tsx
  • web/scripts/db-migrate.ts
  • web/src/components/NowPlayingOverlay.test.tsx
  • web/src/components/ThemePicker.test.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.artists.$artistId.test.tsx
  • web/src/components/Footer.tsx
  • web/src/styles.css
  • web/db/migrations/0002_jwt_plugin.sql
  • web/vite.config.ts
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.albums.$albumId.tsx
  • web/src/server-fns/libraries.ts
  • web/db/README.md
  • web/src/routes/_authed.profiles.$profileId.playlists.test.tsx
  • web/src/server-fns/providers.test.ts
  • web/CLAUDE.md
  • web/.prettierignore
  • web/src/server-fns/desktop-login.test.ts
  • web/src/lib/share-format.ts
  • web/.commitlintrc.cjs
  • web/src/routes/p.$token.tsx
  • web/src/components/ThemeProvider.test.tsx
  • web/src/routes/index.tsx
  • web/src/router.tsx
  • web/src/routes/desktop-login.tsx
  • web/src/server-fns/profiles.ts
  • web/src/lib/share-format.test.ts
  • web/src/components/PlaylistFormDialog.test.tsx
  • web/src/server-fns/stream.ts
  • web/src/lib/use-focus-trap.ts
  • web/src/components/PlaylistFormDialog.tsx
  • web/src/routes/_authed.tsx
  • web/package.json
  • web/CONTRIBUTING.md
  • web/src/components/OAuthButtons.tsx
  • web/.env.example
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.artists.test.tsx
  • web/src/routes/_authed.settings.test.tsx
  • web/src/server-fns/share.ts
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.tsx
  • web/src/components/NowPlayingOverlay.tsx
  • web/packages/design-tokens/src/themes.test.ts
  • web/src/routes/__root.tsx
  • web/src/lib/server/waveflow-server.test.ts
  • web/src/components/ThemePicker.tsx
  • web/src/routes/_authed.profiles.$profileId.playlists.$playlistId.test.tsx
  • web/src/components/PlayableTrackList.test.tsx
  • web/src/lib/db.ts
  • web/src/routes/about.tsx
  • web/src/routes/_authed.profiles.tsx
  • web/src/server-fns/providers.ts
  • web/src/server-fns/share.test.ts
  • web/src/components/QueuePanel.tsx
  • web/src/server-fns/_internal.ts
  • web/src/server-fns/tracks.ts
  • web/src/lib/server/waveflow-server.ts
  • web/src/components/WaveflowLogo.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.artists.$artistId.tsx
  • web/src/components/ThemeToggle.tsx
  • web/vitest.config.ts
  • web/src/routes/_authed.settings.tsx
  • web/src/lib/auth.ts
  • web/src/components/PlayableTrackList.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.albums.$albumId.test.tsx
  • web/src/routes/sign-up.tsx
  • web/packages/design-tokens/src/palettes.ts
  • web/src/server-fns/session.ts
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.albums.tsx
  • web/LICENSE
  • web/src/lib/use-focus-trap.test.tsx
  • web/src/server-fns/artists.ts
  • web/src/routes/_authed.profiles.$profileId.playlists.$playlistId.tsx
  • web/src/routes/sign-in.tsx
  • web/src/routes/_authed.profiles.$profileId.libraries.$libraryId.artists.tsx
  • web/src/components/TrackFilterBar.tsx
  • web/src/routes/_authed.profiles.$profileId.tsx
  • web/src/server-fns/albums.ts
  • web/src/routes/_authed.profiles.$profileId.playlists.tsx
  • web/src/components/ThemeProvider.tsx
  • web/src/server-fns/playlists.ts
  • web/src/server-fns/desktop-login.ts
  • web/src/lib/player-context.tsx
  • web/src/components/ThemeStyle.tsx
  • web/packages/design-tokens/package.json
  • web/src/server-fns/theme.ts

Comment thread .github/dependabot.yml Outdated
Comment thread .github/labeler.yml Outdated
Comment thread webapp/package.json Outdated
Comment thread webapp/src/pages.tsx
…andoff

Review findings, verified one by one.

The labeler still routed sixteen paths that the v1 removal deleted: scope: auth
pointed at src/auth.rs and src/middleware.rs, scope: sync at the apply pipeline,
scope: artwork at the object_store modules. Those labels could no longer fire.
Scopes now name the v2 files, sync and artwork give way to subsonic and scanner,
and no configured path is missing from the tree.

Biome's config declared root-level TypeScript and JSON in scope while the
scripts only passed src, so nothing checked them — including biome.json itself,
which was using the deprecated `recommended` field. Both scripts now run over
the package, 17 files instead of 12.

Skipped, with reasons:

- Switching Dependabot to the `bun` ecosystem. It exists now, but supports
  version updates only: no security updates. npm reads package.json + bun.lock
  correctly here and does raise security PRs. The stale claim that Dependabot
  has no Bun parser is corrected in place.
- Moving the biome-ignore above useEffect. Tried it: the rule fires on the
  dependency argument, and the directive stops suppressing anything from the
  higher line — two warnings came back. It stays where it works, with a comment
  saying why.

Handoff records that M4 is merged, that main is green again, and how the front
tooling now works.

Signed-off-by: InstaZDLL <github.105mh@8shield.net>
@github-actions github-actions Bot added ignore-for-release Excluded from release notes and removed ignore-for-release Excluded from release notes labels Aug 9, 2026

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/dependabot.yml:
- Around line 30-36: Vérifiez le comportement réel de la configuration
Dependabot pour l’écosystème npm dans /webapp en recherchant une PR de mise à
jour de dépendance transitive qui modifie également bun.lock. Si ce comportement
n’est pas confirmé, remplacez npm par l’écosystème officiellement associé à
bun.lock ou ajustez la configuration pour utiliser un couple écosystème/lockfile
documenté, puis mettez à jour le commentaire pour refléter le choix validé.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 35622ceb-0f6f-46af-8333-adbc19eb9242

📥 Commits

Reviewing files that changed from the base of the PR and between bf39c63 and 60bbc9a.

📒 Files selected for processing (6)
  • .github/dependabot.yml
  • .github/labeler.yml
  • docs/M4-handoff.md
  • webapp/biome.json
  • webapp/package.json
  • webapp/src/pages.tsx

Comment thread .github/dependabot.yml Outdated
@InstaZDLL InstaZDLL self-assigned this Aug 9, 2026
@github-actions github-actions Bot added ignore-for-release Excluded from release notes and removed ignore-for-release Excluded from release notes labels Aug 9, 2026
Signed-off-by: InstaZDLL <github.105mh@8shield.net>
Signed-off-by: InstaZDLL <github.105mh@8shield.net>
@github-actions github-actions Bot added ignore-for-release Excluded from release notes and removed ignore-for-release Excluded from release notes labels Aug 9, 2026
@InstaZDLL
InstaZDLL merged commit 6db8a71 into main Aug 9, 2026
16 checks passed
@InstaZDLL
InstaZDLL deleted the chore/retire-v1-web-frontend branch August 9, 2026 10:07
InstaZDLL added a commit that referenced this pull request Aug 10, 2026
…cisions

The Desktop still talks entirely to the v1 server: its six endpoints have zero
occurrences in the v2 codebase, and its login flow depends on the web front
removed in #84. This is not a sync update but a paradigm change — a
client-arbitrated peer protocol (Lamport/HLC clocks, digest reconciliation, LWW
backfill) gives way to a linear journal the server owns.

The document inventories the ~6000 affected lines, maps each v1 route to its v2
counterpart or records that none exists, and separates what becomes moot from
what stays necessary.

It also records the three decisions now settled, each verified against the
server code rather than assumed:

- A Desktop profile maps to a server account; profile_canonical_id becomes
  purely local. Nothing to add server-side: login already returns the account id
  and device id, and library_id is an existing catalogue filter.
- Authorization Code + PKCE over loopback replaces the /desktop-login handshake.
- The Desktop streams with a Bearer header; sealed tickets stay reserved for
  consumers that cannot send one.

The queue constraints are spelled out because one of them is easy to miss and
fails on an ordinary gesture: the server rejects a reused operation id whose
canonical fingerprint differs, so a queued mutation must be immutable once
enqueued. Correcting an action before the queue drains requires a new operation
id, not an edited entry.

Claude-Session: https://claude.ai/code/session_01NJBwjsQ17Bx2PgvPbBGNpM
Signed-off-by: InstaZDLL <github.105mh@8shield.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ignore-for-release Excluded from release notes scope: auth Authentication, tokens, sessions scope: components Web UI components scope: deps Dependencies scope: design-tokens Design tokens / theming scope: docs Docs, README, assets scope: routes Web routes scope: tooling Build / dev tooling scope: web Embedded web player (React) size: xl > 500 lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant