- Closes #807 [TEST] Fuzz Test File Upload Validation
- Added
fast-checkproperty-based fuzz testing suite intests/fuzz/upload.fuzz.test.ts. - Validates random file names, extensions, declared MIME types, magic byte headers, and 500 MB boundary file sizes across 1000 generated cases.
- Closes #808 [TEST] Add Playwright Visual Regression Tests
- Added visual regression testing suite in
tests/e2e/visual.spec.ts. - Configured snapshot baseline path
tests/visual-baselines/and max diff pixel ratio threshold of 1% (maxDiffPixelRatio: 0.01). - Added NPM scripts
test:visualandtest:visual:update. - Captures visual baselines for dashboard, projects (with clips), wallet portfolio, and earnings table.
- Closes #809 [FEAT] Add Clip Quality Score Breakdown Tooltip
- Extended clip data model with
scoreBreakdown: { hook: number, retention: number, emotional: number, trending: number }. - Updated AI backend callback schema and job store payload processing.
- Created
ScoreBreakdownTooltipcomponent showing mini bars for hook, retention, emotional, and trending sub-scores. - Made tooltip keyboard accessible (
tabIndex={0}, focus/blur triggers, ARIA attributes). - Added Storybook story in
components/projects/ScoreBreakdownTooltip.stories.tsx.
- Closes #810 [FEAT] Add StellarWalletProvider and EmbeddedWalletProvider Components
- Created
EmbeddedWalletProviderexposing{ wallet, isLoading, error }context anduseEmbeddedWallethook. - Updated
StellarWalletProviderto callCryptoSaltInitializeron mount and wrap children inEmbeddedWalletProvider. - Ensured SSR safety on both providers.
- Created comprehensive unit tests in
__tests__/components/StellarWalletProvider.test.tsxverifying wallet creation and retrieval.
- Naming conventions: ensure files, components, types, variables, and hooks follow the project's naming conventions (see
docs/naming-conventions.md).- Files: kebab-case
- Components/Types: PascalCase
- Variables/Functions: camelCase
- Hooks: start with
use