Skip to content

chore(deps): bump the production-dependencies group with 4 updates#129

Closed
dependabot[bot] wants to merge 33 commits intomainfrom
dependabot/npm_and_yarn/production-dependencies-7fd896668b
Closed

chore(deps): bump the production-dependencies group with 4 updates#129
dependabot[bot] wants to merge 33 commits intomainfrom
dependabot/npm_and_yarn/production-dependencies-7fd896668b

Conversation

@dependabot
Copy link
Copy Markdown

@dependabot dependabot bot commented on behalf of github Mar 18, 2026

Bumps the production-dependencies group with 4 updates: @fastify/cors, bcryptjs, dotenv and zod.

Updates @fastify/cors from 10.1.0 to 11.2.0

Release notes

Sourced from @​fastify/cors's releases.

v11.2.0

What's Changed

New Contributors

Full Changelog: fastify/fastify-cors@v11.1.0...v11.2.0

v11.1.0

What's Changed

New Contributors

Full Changelog: fastify/fastify-cors@v11.0.1...v11.1.0

v11.0.1

What's Changed

New Contributors

Full Changelog: fastify/fastify-cors@v11.0.0...v11.0.1

v11.0.0

Breaking Change

... (truncated)

Commits
Maintainer changes

This version was pushed to npm by gurgunday, a new releaser for @​fastify/cors since your current version.


Updates bcryptjs from 2.4.3 to 3.0.3

Release notes

Sourced from bcryptjs's releases.

v3.0.3

Bug fixes

  • Always yield to event loop before nextTick for async versions (#164) (1211e9a2213e0b3ee232a204b3ce899beebce31a)

v3.0.2

Bug fixes

  • Use upstream fix to emit interop helpers (28e510389374f5736c447395443d4a6687325048)

v3.0.1

Bug fixes

  • Separate ESM and UMD type definitions (e7055caf0c723cbcf8bc3f0784b8c30ee332380f)

v3.0.0

Breaking changes

  • Modernize project structure (2f45985738604c743c4b8cc8464e3e7d3e04c73d) The project now exports an ECMAScript module by default, albeit with an UMD fallback, ships with types, the dist/ directory no longer exists in version control, and Closure Compiler externs have been removed.
  • Generate 2b hashes by default (d36bfb42fa642b6d6986a84ce106a7110e5824db) This library was not affected by the bug that led to incrementing the bcrypt version from 2a to 2b, but nowadays most implementations use 2b, including the native bcrypt binding, so this change aligns with them. Existing hashes will continue to work, but test logic that generates hashes and compares them literally might need to be updated to account for the new default.

Features

  • Add helper to check for password input length (d5656b39e2e368c87724a312e4e454456a4e5d1b)

Other

  • Update publish workflow (2a9bea9e276e6be04dbd403f9695937788b3b10a)
  • Add note on using the ESM variant in the browser (e09eb9afb14170069aaea19631b763307ee7b480)
  • Update types (58333a1533dd53838e2697628f84b98d54a5c079)
  • Merge lint and test workflows (2e3b17659e8856696acfe3015631ce2989eb3084)
  • Fix tests (ec02e8a0ada7a8f6c71a91df164db8c25bbbb7b4)
  • Update legacy fallback to handle crypto dependency (9db275fa10b1b40da4a6844480d7f8ae8df27fb8)
  • Update lint workflow title (ac70ac57c2f99ad5639eddf54578e5fdd07b9c4c)
  • Adapt crypto module usage for ESM environments (574d690d4972bcebbd5ca07880a62abab9ae3c0b)
  • Format with prettier (e7465479282d8155852ce88d6407eccb14adc106)
  • Rename default branch to 'main' (548559d032d7dd5ac3e4e16d7afd87b36ebe96ca)
  • Update description to mention TypeScript support (4977df0849eaf8cad5b0d0b543fe452432a2d761)
  • Add stale action for issues and PRs (a84d4e45487df0972d8781feafa477d5db4c1dbd)
  • Fix typo (c8c9c01799bbc13092fcbb20cfab4d9015d14c61)
  • Fix Node.js version in CI (1b54cc48d4120b50e1d9058e5a67f326102fd744)

Backlog from v2

  • Added externs to .npmignore (#124) (7e2e93af99df2952253f9cf32db29aefa8f272f7) The npm package does not need externs as it is needed only for closure compiler. Added it in .npmignore since bcryptjs overrides global module and process in WebStorm IDE.
  • Make sure the bin script uses LF (684fac6814a81d974c805a15e22fd69922c7ca6e)
  • Post-merge; Clean up a bit (b09f7f266a7015456b7b36deeb026dc636f64542)

... (truncated)

Commits
  • 1211e9a fix: Always yield to event loop before nextTick for async versions (#164)
  • 28e5103 fix: Use upstream fix to emit interop helpers
  • e7055ca fix: Separate ESM and UMD type definitions
  • 2a9bea9 Update publish workflow
  • d5656b3 Add helper to check for password input length
  • e09eb9a Add note on using the ESM variant in the browser
  • 58333a1 Update types
  • 2e3b176 Merge lint and test workflows
  • ec02e8a Fix tests
  • 9db275f Update legacy fallback to handle crypto dependency
  • Additional commits viewable in compare view

Updates dotenv from 16.6.1 to 17.3.1

Changelog

Sourced from dotenv's changelog.

17.3.1 (2026-02-12)

Changed

  • Fix as2 example command in README and update spanish README

17.3.0 (2026-02-12)

Added

  • Add a new README section on dotenv’s approach to the agentic future.

Changed

  • Rewrite README to get humans started more quickly with less noise while simultaneously making more accessible for llms and agents to go deeper into details.

17.2.4 (2026-02-05)

Changed

  • Make DotenvPopulateInput accept NodeJS.ProcessEnv type (#915)
  • Give back to dotenv by checking out my newest project vestauth. It is auth for agents. Thank you for using my software.

17.2.3 (2025-09-29)

Changed

  • Fixed typescript error definition (#912)

17.2.2 (2025-09-02)

Added

  • 🙏 A big thank you to new sponsor Tuple.app - the premier screen sharing app for developers on macOS and Windows. Go check them out. It's wonderful and generous of them to give back to open source by sponsoring dotenv. Give them some love back.

17.2.1 (2025-07-24)

Changed

  • Fix clickable tip links by removing parentheses (#897)

17.2.0 (2025-07-09)

Added

  • Optionally specify DOTENV_CONFIG_QUIET=true in your environment or .env file to quiet the runtime log (#889)
  • Just like dotenv any DOTENV_CONFIG_ environment variables take precedence over any code set options like ({quiet: false})
# .env
</tr></table> 

... (truncated)

Commits

Updates zod from 3.25.76 to 4.3.6

Release notes

Sourced from zod's releases.

v4.3.6

Commits:

  • 9977fb0868432461de265a773319e80a90ba3e37 Add brand.dev to sponsors
  • f4b7bae3468f6188b8f004e007d722148fc91d77 Update pullfrog.yml (#5634)
  • 251d7163a0ac7740fee741428d913e3c55702ace Clean up workflow_call
  • edd4132466da0f5065a8e051b599d01fdd1081d8 fix: add missing User-agent to robots.txt and allow all (#5646)
  • 85db85e9091d0706910d60c7eb2e9c181edd87bd fix: typo in codec.test.ts file (#5628)
  • cbf77bb12bdfda2e054818e79001f5cb3798ce76 Avoid non null assertion (#5638)
  • dfbbf1c1ae0c224b8131d80ddf0a264262144086 Avoid re-exported star modules (#5656)
  • 762e911e5773f949452fd6dd4e360f2362110e8e Generalize numeric key handling
  • ca3c8629c0c2715571f70b44c2433cad3db7fe4e v4.3.6

v4.3.5

Commits:

  • 21afffdb42ccab554036312e33fed0ea3cb8f982 [Docs] Update migration guide docs for deprecation of message (#5595)
  • e36743e513aadb307b29949a80d6eb0dcc8fc278 Improve mini treeshaking
  • 0cdc0b8597999fd9ca99767b912c1e82c1ff2d6c 4.3.5

v4.3.4

Commits:

  • 1a8bea3b474eada6f219c163d0d3ad09fadabe72 Add integration tests
  • e01cd02b2f23d7e9078d3813830b146f8a2258b4 Support patternProperties for looserecord (#5592)
  • 089e5fbb0f58ce96d2c4fb34cd91724c78df4af5 Improve looseRecord docs
  • decef9c418d9a598c3f1bada06891ba5d922c5cd Fix lint
  • 9443aab00d44d5d5f4a7eada65fc0fc851781042 Drop iso time in fromJSONSchema
  • 66bda7491a1b9eab83bdeec0c12f4efc7290bd48 Remove .refine() from ZodMiniType
  • b4ab94ca608cd5b581bfc12b20dd8d95b35b3009 4.3.4

v4.3.3

Commits:

  • f3b2151959d215d405f54dff3c7ab3bf1fd887ca v4.3.3

v4.3.2

Commits:

  • bf96635d243118de6e4f260077aa137453790bf6 Loosen strictObjectinside intersection (#5587)
  • f71dc0182ab0f0f9a6be6295b07faca269e10179 Remove Juno (#5590)
  • 0f41e5a12a43e6913c9dcb501b2b5136ea86500d 4.3.2

v4.3.1

Commits:

  • 0fe88407a4149c907929b757dc6618d8afe998fc allow non-overwriting extends with refinements. 4.3.1

v4.3.0

This is Zod's biggest release since 4.0. It addresses several of Zod's longest-standing feature requests.

... (truncated)

Commits

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore <dependency name> major version will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
  • @dependabot ignore <dependency name> minor version will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
  • @dependabot ignore <dependency name> will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
  • @dependabot unignore <dependency name> will remove all of the ignore conditions of the specified dependency
  • @dependabot unignore <dependency name> <ignore condition> will remove the ignore condition of the specified dependency and ignore conditions

Madhav Chauhan and others added 30 commits March 17, 2026 00:23
…ewModels

Replaced all placeholder screens with complete implementations matching
Android feature parity. Added data models, seed data, presentation
helpers, and reactive ViewModels. Enhanced GlassCard with tint/frosted/
press animation. Added AppBackdrop with radial glows.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…schemas

Wave 0 contract definitions for Spotify provider integration:
- provider.ts: ProviderName enum, OAuth connect/callback/disconnect schemas,
  connection state, and typed ProviderErrorCode enum
- mapping.ts: Canonical Artist/Album schemas, MappingStatus/Provenance enums,
  ProviderMapping, lookup and resolve request/response schemas
- sync.ts: SyncType/SyncStatus enums, SyncJob with progress tracking,
  SyncCursor for incremental syncs, SyncListeningEvent, cancel request
- compliance.ts: AttributionRequirement, ComplianceViolation/Check,
  DataRetentionPolicy schemas
- index.ts: barrel exports for all new modules

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- APIClient with URLSession, auto Bearer token injection, 401 refresh retry
- AuthManager singleton with login/signup/refresh/logout, UserDefaults persistence
- SoundScoreAPI covering all backend endpoints (catalog, ratings, reviews, lists, feed, social, recaps, push, trust)
- OutboxStore + SyncEngine for offline-first mutations with exponential backoff
- SoundScoreRepository singleton binding SeedData defaults to live API data
- AuthScreen with glass morphism login/signup form
- All 5 ViewModels rewired to observe repository via Combine
- ContentView gates on auth state, injects environment objects
- SoundScoreApp.swift entry point and SSTypography theme definitions
…111, #123)

Add full provider connection lifecycle:
- Migration 003: provider_connections and oauth_states tables
- ProviderAdapter interface + SpotifyAdapter (OAuth URL, token exchange, refresh)
- Provider registry for multi-provider support
- POST /v1/providers/:provider/connect — generate OAuth state + URL
- POST /v1/providers/:provider/callback — exchange code, store tokens
- GET /v1/providers/:provider/status — check connection status
- POST /v1/providers/:provider/disconnect — revoke + soft-disconnect + optional purge
- Token refresh utility (ensureFreshToken) with 5-minute buffer
- 17 unit tests covering adapter, registry, state, and token logic
- Remove phase-1 stub 501 routes from trust.ts
…t worker (#115, #119)

Add canonical ID mapping (provider IDs → SoundScore canonical albums) with
confidence-scored fuzzy matching, and a background sync worker that imports
listening history with 10-minute-bucket deduplication and resumable cursors.

New tables: canonical_artists, canonical_albums, provider_mappings, sync_cursors,
sync_jobs. Adds dedup_key column to listening_events.

New endpoints: GET /v1/mappings/lookup, POST /v1/mappings/resolve,
POST /v1/sync/start, GET /v1/sync/status/:sync_id, POST /v1/sync/cancel.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nd animation polish

- Add AlbumDetailScreen with hero artwork, interactive rating, review
  button, "in your lists" section, and "also by artist" section
- Add ReviewSheet with TextEditor, character count, and star rating
- Add SettingsScreen with account, notifications, quiet hours, data,
  and about sections using glass morphism cards and toggle rows
- Add SkeletonView reusable shimmer loading placeholder
- Create missing SSTypography.swift (font scale) and SoundScoreApp.swift
- Expand SeedData: 12 albums (was 6), 8 feed items (was 3), 5 lists
  (was 3), updated profile with new genres and favorite albums
- Wrap app in NavigationStack with .navigationDestination for albums
  and settings — all album artwork/cards now navigate to detail
- Add staggered entrance animations on FeedScreen and ProfileScreen
- Make Album conform to Hashable for value-based navigation
- All screens accept onSelectAlbum callback for navigation
- Haptic feedback on all interactive tap targets
…nd hardening (#112, #116, #120, #124)

- Add audit_events and dead_letter_events tables (migration 003)
- Add logAuditEvent utility with PII scrubbing for sensitive fields
- Wire audit events into auth (signup/login), trust (export/delete),
  opinions (rating/review create/update), and lists (create)
- Add per-route rate limiting: auth 10/min, writes 30/min,
  sensitive 3/hour, reads 100/min (global default)
- Add withRetry utility with exponential backoff and max cap
- Add dead letter queue for failed async operations
- Harden input validation: review body max 5000, list title max 200,
  handle max 30 alphanumeric+underscore, reaction max 50
- Add integration test covering full 14-step user journey
- Add error-handling tests (invalid JSON, missing auth, 404, SQL
  injection, XSS, validation limits, idempotency)
- Add unit tests for audit (with scrubbing) and retry utilities
# Conflicts:
#	backend/src/server.ts
# Conflicts:
#	ios/SoundScore/SoundScore.xcodeproj/project.pbxproj
#	ios/SoundScore/SoundScore/ContentView.swift
#	ios/SoundScore/SoundScore/SoundScoreApp.swift
#	ios/SoundScore/SoundScore/Theme/SSTypography.swift
…cross iOS and Android

iOS:
- Wire ReviewSheet save → repository → outbox → API pipeline
- Add createReview outbox operation type
- Add loading skeletons, error banners, pull-to-refresh on all screens
- Wire Share via ShareLink, Export Data, Delete Account with confirmation
- Wire LogScreen FAB to open album search sheet
- Wire View Recap to deep link, Share recap via ShareLink
- Wire SettingsScreen notification toggle persistence
- Add sign out button to Settings
- Fix FeedItem mapping to resolve album from activityObject ID
- Add formatTimeAgo helper for human-readable timestamps
- Replace hardcoded avatar colors with hash-based deterministic palette
- Remove permanent "coming soon" placeholders, make sections conditional
- Add empty search results state
- Wire genre cards to filter search
- Make list create button disabled when title is empty
- Add quiet hours stepper controls

Android:
- Replace hardcoded avatar colors with hash-based palette selection
- Remove "Popular lists", "Friends listening", "Achievements" placeholders
- Add "No results found" empty state for search
- Wire recent activity section in ProfileScreen from feed data
- Add recentActivity to ProfileUiState with feedItems binding
- Move hardcoded dev credentials to System.getenv() with fallbacks
- Add TODO for FCM token replacement

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Wire repository errorMessage to SearchViewModel for consistent
error state propagation across all screens.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add ErrorBanner to ListsScreen and SearchScreen (iOS)
- Add errorMessage binding to ProfileViewModel and SearchViewModel
- Update iOS components (ActionChip, AlbumArtwork, FloatingTabBar, etc.) with theme refinements
- Update Android components (GlassCard, StarRating, AlbumArtPlaceholder) with polish
- Expand Android SeedData with more albums and feed items
- Update Android theme colors, typography, and navigation
- Update AuthManager init to check for stored token
- Backend auth module refinements

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Consistent error state display across all iOS screens.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The loading indicator was not dismissed after successful login/signup
because isLoading was only reset in the error path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Show "No results" empty state before the results section for better
UX when a search yields no matches.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prevents creating empty-titled lists. Mirrors the iOS behavior.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Support disabled state with reduced opacity for container and content.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The floating action button now opens a ModalBottomSheet with album
search for quick logging, matching the iOS implementation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use max(0, ...) to prevent likes count from going below zero
when toggling likes rapidly.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Documents all changes made during the autonomous improvement run:
audit findings, iOS/Android fixes, architecture notes, and remaining items.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Expanded report with 8 specific issues found and fixed, verification
notes for items confirmed correct, and known remaining items.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove iOS auth bypass flag (isAuthenticated default was true)
- Gate Android HTTP body logging behind BuildConfig.DEBUG
- Disable Android backup (allowBackup=false) to prevent credential extraction

Addresses CRIT-03, HIGH-02, HIGH-06 from security review.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…heme picker

## Theme System
- Replaced partial accent-only theming with full-screen theme swap
- 6 renamed themes: Emerald, Bonfire, Rose, Amethyst, Midnight, Gilt
- Each theme has unique dark base/surface/elevated background colors
- Multi-layer radial glow backdrop with primary + secondary color wash
- SSColors.darkBase/darkSurface/darkElevated are now dynamic computed
  properties that read from ThemeManager, so the entire UI re-themes
- ContentView now observes ThemeManager via @ObservedObject, forcing
  the full view tree to re-render on theme change
- Legacy theme rawValues (mint/sunset/coral/etc.) auto-migrate
- textTertiary contrast bumped from 0.43 → 0.55 for WCAG AA compliance

## Swipeable Theme Picker (Settings)
- Replaced 6 small circles with a horizontal TabView carousel
- Each card shows a mini UI mockup with the theme's background gradient,
  accent colors, glass card, and tab bar preview
- Swiping between cards shows contrast between adjacent themes
- Page indicator dots below the carousel
- Theme applies instantly on swipe with haptic feedback

## Spotify Album Art Integration
- New SpotifyService.swift using Client Credentials OAuth flow
- On app launch, automatically enriches all seed albums missing artwork
  by searching Spotify's catalog (rate-limited to avoid throttling)
- SearchViewModel now queries Spotify remotely in addition to local data,
  merging results with deduplication
- All 12 seed albums now display real cover art instead of gradient placeholders

## Production Readiness
- Spotify API credentials extracted to Config/Secrets.swift (gitignored)
- Secrets.swift.template committed with placeholder values for onboarding
- .gitignore updated to exclude Secrets.swift globally
- Screenshots of Emerald, Midnight, and Amethyst themes added to docs/

## Files Changed (16 files, +490 -70)
- ThemeManager.swift — full rewrite: ThemeColorScheme, 6 themes, legacy migration
- SSColors.swift — darkBase/darkSurface/darkElevated now dynamic
- AppBackdrop.swift — multi-layer glow with @ObservedObject ThemeManager
- ContentView.swift — added @ObservedObject themeManager for tree-wide reactivity
- SettingsScreen.swift — swipeable TabView theme picker + ThemePreviewCard
- SpotifyService.swift — new: Client Credentials auth, album search, art cache
- SoundScoreRepository.swift — auto-enriches albums with Spotify artwork
- SearchViewModel.swift — async Spotify search merged with local results
- FeedItem.swift — album property made mutable for artwork enrichment
- Secrets.swift.template — placeholder config for Spotify API credentials
- project.pbxproj — added SpotifyService, Config group, Secrets references
Security: session expiry (24h TTL), CORS allowlist, helmet headers,
HTML sanitization for user content, env var validation with Zod.

Infrastructure: Dockerfile with multi-stage build, prod docker-compose,
graceful shutdown handler, real health check with DB/Redis probes.

Performance: cursor-based pagination on feed/search/recently-played,
missing DB indexes (ratings, reviews, activity_events), full-text
search with tsvector/GIN index on albums.

API: correct 201 status codes on creation, structured JSON logging
with request IDs, OpenAPI/Swagger docs at /docs.

DevOps: npm audit in CI, engines field in package.json, Dependabot
config, migration naming conflicts fixed (003_ duplicates).

Tests updated for new status codes + production readiness test suite.

https://claude.ai/code/session_01HXWnSTisXW9rizJZW4mV7X
- Env validation: restore dev defaults for DATABASE_URL/REDIS_URL so
  tests work without running services; enforce explicit values in prod
- DB client: add connection timeout (5s), Redis retry limit (3 attempts),
  robust close() that handles disconnected state
- Server: clean up DB on migration failure to prevent orphaned connections
- Pagination: guard against undefined cursor on empty result sets,
  validate cursor length (max 128 chars)
- Sanitize: encode remaining HTML entities after tag stripping
- Migration: add COALESCE for null-safe tsvector generation
- Tests: fix setup() to close app on failure (prevents ioredis retry
  loops hanging the process), tighten status code assertions (201 exact)

https://claude.ai/code/session_01HXWnSTisXW9rizJZW4mV7X
Madhav Chauhan and others added 3 commits March 18, 2026 18:14
… 6-star system

## Splash + Auth
- Animated splash screen with waveform logo (scale + fade → auth/main)
- Dev auth bypass via devLogin() for rapid testing (signup skips API)
- Real auth restored for production use

## 6-Star Rating System
- All rating schemas bumped from max(5) → max(6) across contracts, backend, iOS
- StarRating component: dynamic animateScale array, default maxStars=6
- All callsites (Feed, Log, AlbumDetail, ReviewSheet) inherit 6 stars automatically

## Per-Track Data + Ratings
- Backend: 004_tracks_and_track_ratings.sql migration (PostgreSQL)
- Contracts: TrackSchema, TrackRatingSchema, CreateTrackRatingRequestSchema
- iOS: Track model, TrackDto/TrackRatingDto, 3 new API endpoints
- OutboxStore: .rateTrack operation type
- Repository: tracksByAlbum, trackRatings dictionaries, fetchTracks(), updateTrackRating()
- Spotify track fetching: fetchAlbumTracks() via Client Credentials
- Seed data: sample tracks for CHROMAKOPIA, GNX, Short n' Sweet

## AlbumDetail Screen Redesign
- Fixed: rating text vertical layout → .lineLimit(1).fixedSize()
- Fixed: waveform icon → music.note.list
- Fixed: share button double .ultraThinMaterial overlay → SSColors.darkElevated.opacity(0.8)
- Fixed: year "2,024" comma formatting → String(album.year) across all screens
- Album/Songs segmented tab: glass-style toggle between album rating and tracklist views
- Song rating modal: tap track → .medium sheet with large 6-star rating + note field
- Album rating modal: tap rating card → .medium/.large sheet with artwork, rating, review editor
- Tracklist: alternating row backgrounds, rating badges, tappable rows
- Songs breakdown card: avg rating, highest/lowest rated track stats
- Softened rate/review tint, renamed to "Your Album Rating"
- Lists section: violet tint for themed consistency
- Taller hero (340pt), larger "Also by Artist" cards (120×120)

## AI Music Agent — Cadence (Gemini 2.5 Flash)
- Replaced broken OpenAI OAuth flow with direct Gemini API key (Secrets.swift)
- Model: gemini-2.5-flash via REST API with systemInstruction
- Agentic system prompt: Cadence gets full album catalog with IDs, user's ratings,
  genres, and is instructed to output [RATE:id:title:score] and [REVIEW:id:title:text]
  action tags that get parsed into interactive UI cards

### Agentic Action Cards
- CadenceReviewCard: album artwork, editable review draft, star rating,
  Send/Edit/Discard buttons, animated confirmation on save
- CadenceBatchRatingCard: multi-album rating list with staggered checkmark
  animation on "Apply All", haptic feedback per album
- CadenceQuickRateCard: single album mini-card with artwork, stars, Confirm pill
- All cards collapse into green confirmation banners after execution
- Actions execute real mutations: updateRating(), saveReview() via outbox

### Smart Suggestion Chips
- Context-aware: "Draft a review for [top album]", "Rate my unrated albums",
  "Roast my taste", "Deep cuts from [top artist]"
- Follow-up suggestions regenerate after each response
- Gradient-bordered capsules with themed styling, staggered entrance animation

### Cadence Character
- SwiftUI-drawn: rounded body, dot eyes, arc headphones
- Three animated states: idle (gentle bob), thinking (bounce + eyes up), happy (bounce + smile)
- 80pt in AI buddy screen, themed primary color

## Feed Improvements
- Trending cards: 220×280, rank badge pill (#1, #2), colored shadow glow,
  colored inner border stroke, dramatic gradient overlay
- Collections section: horizontal scroll of CompactListCards between trending and activity
- ListCards extracted to Components/ListCards.swift (FeaturedListHero, CompactListCard)

## Tab Restructuring
- Replaced .lists tab with .aiBuddy (icon: sparkles, label: "Cadence")
- FloatingTabBar auto-updates via Tab.allCases
- ListsScreen preserved but moved to Feed's Collections section

## Log/Diary Simplification
- Replaced GlassCard stats bar with single-line summary text

## Profile Screen Redesign
- Hero banner (280pt): blurred 2×2 composite of favorite album artworks,
  dark gradient overlay, 96pt avatar with primary-color ring + glow shadow
- Stats row: 4 glass stat cards (Albums, Lists, Following, Followers)
- Action bar: Edit Profile capsule, Share link, Settings gear
- Favorites: 140×180 horizontal carousel with gradient overlay + staggered animation
- Taste DNA: gradient genre cards with AlbumColors palettes
- Weekly Recap: tinted GlassCard with Share Recap button
- Recent Activity: colored left borders matching album art gradients

## Album Artwork
- All 12 seed albums now have hardcoded Spotify artwork URLs (no enrichment delay)
- Covers load immediately on app launch

## New Files (14)
- backend/src/db/schema/004_tracks_and_track_ratings.sql
- ios/.../Models/Track.swift
- ios/.../Screens/SplashScreen.swift
- ios/.../Screens/AIBuddyScreen.swift
- ios/.../Components/CadenceCharacter.swift
- ios/.../Components/CadenceActionCards.swift
- ios/.../Components/ListCards.swift
- ios/.../Components/SongRatingSheet.swift
- ios/.../Components/AlbumRatingSheet.swift
- ios/.../Services/AIBuddyService.swift
- ios/.../ViewModels/AIBuddyViewModel.swift
- ios/.../ViewModels/AlbumDetailViewModel.swift

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Merges claude/audit-production-readiness-Uc304 into main.
No conflicts — PR changes are backend-only, our recent commit was iOS + contracts.

PR contents:
- Helmet security headers, CORS allowlist, request ID tracking
- Enhanced /health endpoint with DB + Redis probes (503 on degraded)
- Fastify Swagger for OpenAPI 3.1.0 docs at /docs
- Cursor-based pagination on /v1/search, /v1/feed, /v1/log/recently-played
- HTML sanitization (stripHtml) on reviews and list descriptions
- Migration 006: session expiry, full-text search vectors, performance indexes
- Zod-validated env config (enforces explicit URLs in production)
- Multi-stage Dockerfile + docker-compose.prod.yml with resource limits
- Production-readiness test suite
- 201 Created status codes for POST endpoints
- Dependabot config for automated dependency updates

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bumps the production-dependencies group with 4 updates: [@fastify/cors](https://github.com/fastify/fastify-cors), [bcryptjs](https://github.com/dcodeIO/bcrypt.js), [dotenv](https://github.com/motdotla/dotenv) and [zod](https://github.com/colinhacks/zod).


Updates `@fastify/cors` from 10.1.0 to 11.2.0
- [Release notes](https://github.com/fastify/fastify-cors/releases)
- [Commits](fastify/fastify-cors@v10.1.0...v11.2.0)

Updates `bcryptjs` from 2.4.3 to 3.0.3
- [Release notes](https://github.com/dcodeIO/bcrypt.js/releases)
- [Commits](dcodeIO/bcrypt.js@2.4.3...v3.0.3)

Updates `dotenv` from 16.6.1 to 17.3.1
- [Changelog](https://github.com/motdotla/dotenv/blob/master/CHANGELOG.md)
- [Commits](motdotla/dotenv@v16.6.1...v17.3.1)

Updates `zod` from 3.25.76 to 4.3.6
- [Release notes](https://github.com/colinhacks/zod/releases)
- [Commits](colinhacks/zod@v3.25.76...v4.3.6)

---
updated-dependencies:
- dependency-name: "@fastify/cors"
  dependency-version: 11.2.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: production-dependencies
- dependency-name: bcryptjs
  dependency-version: 3.0.3
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: production-dependencies
- dependency-name: dotenv
  dependency-version: 17.3.1
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: production-dependencies
- dependency-name: zod
  dependency-version: 4.3.6
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: production-dependencies
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code labels Mar 18, 2026
@madhavcodez madhavcodez force-pushed the main branch 2 times, most recently from 2a4794b to 7780298 Compare March 21, 2026 18:49
@dependabot @github
Copy link
Copy Markdown
Author

dependabot bot commented on behalf of github Mar 25, 2026

Looks like these dependencies are updatable in another way, so this is no longer needed.

@dependabot dependabot bot closed this Mar 25, 2026
@dependabot dependabot bot deleted the dependabot/npm_and_yarn/production-dependencies-7fd896668b branch March 25, 2026 12:27
@github-project-automation github-project-automation bot moved this from Todo to Done in Soundscore Mar 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update javascript code

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant