chore: remove obsolete planning documents

Remove outdated planning and session prompt files that are no longer
needed after completing the TanStack Query migration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Justin Edmund 2025-11-29 02:22:03 -08:00
parent 65f5521c74
commit 6dcc517cc6
3 changed files with 0 additions and 604 deletions

View file

@ -1,147 +0,0 @@
# Svelte-Main Branch Cleanup Plan
## Overview
This document outlines the remaining work needed to clean up the `svelte-main` branch and get the build green.
## Completed Fixes
### 1. Environment/Generated Module Issues
- Ran Paraglide codegen to generate translation files in `src/lib/paraglide/`
- Added type declarations for `$env/static/public` module in `src/lib/types/declarations.d.ts`
### 2. Broken Imports from Removed Legacy API Layer
- Updated `SearchSidebar.svelte` to use new adapter layer
- Updated `Party.svelte` to use new adapter layer
- Updated `teams/new/+page.svelte` to use new adapter layer
### 3. Type Shims for External Libraries
- Added comprehensive type declarations for `wx-svelte-grid` in `src/lib/types/declarations.d.ts`
### 4. RequestOptions Cache Type Incompatibility
- Fixed `RequestOptions` interface in `src/lib/api/adapters/types.ts` to exclude 'cache' from RequestInit extension
- Added both `cacheTime?: number` and `cache?: RequestCache` properties
- Updated `base.adapter.ts` to use `cacheTime` instead of `cache` for duration
### 5. Users Resource Module
- Updated `src/lib/api/resources/users.ts` to use `userAdapter` instead of removed `../core` module
- Changed function signature from `update(fetch, userId, params)` to `update(userId, params)`
### 6. UserSettingsModal.svelte Fixes
- Fixed Switch import path (case sensitivity: `switch.svelte` -> `Switch.svelte`)
- Fixed `users.update` call signature
- Removed invalid footer snippet definition
- Removed unused `Snippet` import
### 7. Character Type in Entity Adapter
- Added missing properties to Character type in `entity.adapter.ts`:
- `gender?: number`
- `proficiency?: number[]`
- `race?: number[]`
- `hp?: { minHp, maxHp, maxHpFlb }`
- `atk?: { minAtk, maxAtk, maxAtkFlb }`
- `uncap?: { flb, ulb, transcendence }`
### 8. Adapters Index File
- Created `src/lib/api/adapters/index.ts` to export all adapters and types
### 9. Character Type in Entities
- Added missing properties to Character type in `src/lib/types/api/entities.ts`:
- `gender`, `race`, `proficiency`, `hp`, `atk`
## Remaining Type Errors (~378 errors)
### High Priority (Most Impactful)
#### 1. 'firstItem' and 'item' Possibly Undefined (27 errors)
- **Location**: `src/routes/teams/new/+page.svelte`
- **Issue**: TypeScript strict null checks flagging array access without null guards
- **Fix**: Add null checks before accessing `items[0]` and in forEach loops
#### 2. PartyCtx Missing openPicker Property (8 errors)
- **Location**: Various components using party context
- **Issue**: `PartyCtx` type doesn't include `openPicker` method
- **Fix**: Update `PartyCtx` type definition to include `openPicker` method
#### 3. Missing Paraglide Translation Keys (18 errors)
- **Keys**: `context_view_details`, `context_replace`, `context_remove`
- **Location**: `src/lib/paraglide/messages`
- **Fix**: Add missing translation keys to `project.inlang/messages/en.json` and `ja.json`
#### 4. Summon/Weapon Missing hp/atk Properties (18 errors)
- **Location**: Entity adapter types
- **Issue**: Summon and Weapon types in `entity.adapter.ts` need hp/atk properties
- **Fix**: Update Summon type to include `hp` and `atk` nested objects
### Medium Priority
#### 5. exactOptionalPropertyTypes Violations (~15 errors)
- **Issue**: Props with `undefined` values being passed to components that don't accept undefined
- **Fix**: Update component Props interfaces to accept `undefined` for optional properties
#### 6. Select.svelte ItemIndicator Errors (4 errors)
- **Issue**: `Select.ItemIndicator` doesn't exist in bits-ui
- **Fix**: Check bits-ui documentation for correct component name or remove usage
#### 7. Button.svelte Icon Type Issues (2 errors)
- **Issue**: `icon` prop is `string | undefined` but Icon component expects `string`
- **Fix**: Add conditional rendering or default value for icon prop
#### 8. DropdownItem.svelte asChild Issue (2 errors)
- **Issue**: `asChild` prop doesn't exist on DropdownMenu.Item in bits-ui
- **Fix**: Use `child` snippet pattern instead of `asChild` prop
### Lower Priority
#### 9. maxLength vs maxlength (4 errors)
- **Issue**: HTML attribute should be lowercase `maxlength`
- **Fix**: Change `maxLength` to `maxlength` in input elements
#### 10. Button Variant "outlined" (3 errors)
- **Issue**: "outlined" is not a valid Button variant
- **Fix**: Use correct variant name (check Button component for valid variants)
#### 11. SearchResult Type Mismatch (5 errors)
- **Issue**: `SearchResult<any>[]` vs `SearchResult[]` type mismatch
- **Fix**: Update function signatures to use consistent SearchResult type
## Files Modified in This Session
1. `src/lib/api/adapters/types.ts` - RequestOptions cache fix
2. `src/lib/api/adapters/base.adapter.ts` - cacheTime usage
3. `src/lib/api/adapters/entity.adapter.ts` - Character type properties
4. `src/lib/api/adapters/index.ts` - New file for exports
5. `src/lib/api/resources/users.ts` - Updated to use userAdapter
6. `src/lib/types/declarations.d.ts` - wx-svelte-grid and $env type shims
7. `src/lib/types/api/entities.ts` - Character type properties
8. `src/lib/components/UserSettingsModal.svelte` - Multiple fixes
9. `src/lib/components/panels/SearchSidebar.svelte` - Accepted upstream version
10. `src/lib/components/party/Party.svelte` - granblueId fix
11. `src/routes/teams/new/+page.svelte` - Accepted upstream version
## Commands to Verify Progress
```bash
# Count remaining errors
pnpm check 2>&1 | grep -c "Error:"
# Analyze error patterns
pnpm check 2>&1 | grep "Error:" | sort | uniq -c | sort -rn | head -20
# Run lint
pnpm lint
# Run build
pnpm build
```
## Next Steps
1. Fix the 'firstItem'/'item' possibly undefined errors in teams/new/+page.svelte
2. Add missing Paraglide translation keys
3. Update PartyCtx type to include openPicker
4. Update Summon type in entity.adapter.ts to include hp/atk
5. Fix exactOptionalPropertyTypes violations
6. Fix bits-ui component usage (Select.ItemIndicator, DropdownItem asChild)
7. Run `pnpm check` to verify all errors are resolved
8. Run `pnpm lint` and `pnpm build`
9. Create PR with all fixes

View file

@ -1,116 +0,0 @@
# Prompt for Next Devin Session
## Task
Continue cleaning up type errors in the `svelte-main` branch of `jedmund/hensei-web`. The goal is to get the build green by fixing all remaining type errors.
## Context
This is a Svelte 5 rewrite of a Granblue Fantasy team composition app. The previous sessions reduced type errors from ~412 to ~161. A detailed plan of completed and remaining work is in `CLEANUP_PLAN.md`.
## Starting Point
1. Checkout the `svelte-main` branch in `/home/ubuntu/repos/hensei-web`
2. Run `pnpm check 2>&1 | grep -c "Error:"` to see current error count (~161)
3. Review this file for detailed context on what's been fixed and what remains
## Completed Fixes (This Session - 219 -> 161 errors)
- Fixed teams/new/+page.svelte position type assertions (non-null assertions for array access after length check)
- Fixed Party.svelte editKey type (string | null -> string | undefined)
- Fixed sidebar.svelte.ts Component type to accept any props (Component<any, any, any>)
- Fixed database/characters/[id]/+page.svelte UncapData type (provide default values for flb/ulb)
- Fixed DetailScaffold.svelte optional props (use nullish coalescing for optional callbacks)
- Fixed SearchSidebar.svelte params construction (conditionally add properties instead of passing undefined)
- Fixed SearchSidebar.svelte granblue_id -> granblueId property name
- Fixed Party.svelte mainWeapon derived state (removed arrow function wrapper)
## Remaining Type Errors to Fix (~161 errors)
### Files with Most Errors
1. Party.svelte - 22 errors
2. database/characters/[id]/+page.svelte - 19 errors
3. Checkbox.svelte - 19 errors
4. SearchSidebar.svelte - 12 errors
5. teams/new/+page.svelte - 10 errors
6. test/images/+page.svelte - 9 errors
7. Switch.svelte - 9 errors
8. StatsSection.svelte - 9 errors
9. Button.svelte - 8 errors
10. WeaponUnit.svelte - 7 errors
### High Priority Error Patterns
1. **SearchResult type mismatch** (5 errors)
- Issue: `(items: SearchResult<any>[]) => Promise<void>` not assignable to `(items: SearchResult[]) => void`
- Files: Party.svelte, teams/new/+page.svelte, SearchSidebar.svelte
- Fix: Update function signatures or SearchResult type definition
2. **Object is possibly 'undefined'** (5 errors)
- Various files need null guards or optional chaining
3. **number | null vs number | undefined** (4 errors)
- File: ItemHeader.svelte
- Fix: Normalize null/undefined handling (use ?? operator)
4. **Expected 1 arguments, but got 2** (4 errors)
- Function call signature mismatches
5. **Conversion of number to "0" | "1" | "2" | "3"** (3 errors)
- File: Party.svelte (job skill slot handling)
- Fix: Use `as unknown as "0" | "1" | "2" | "3"` or update type definitions
### Medium Priority Error Patterns
6. **exactOptionalPropertyTypes violations** (multiple errors)
- Issue: Passing `undefined` explicitly to optional props
- Fix: Use nullish coalescing or omit the property entirely
7. **Select.Item disabled prop** (2 errors)
- bits-ui type compatibility issue
8. **RadioGroup.Item type mismatch** (2 errors)
- bits-ui type compatibility issue
9. **Property 'normalizer' does not exist on DatabaseProvider** (2 errors)
10. **Module has no exported member 'PartyView'** (2 errors)
- File: party schema
- Fix: Add or update the export
### Lower Priority
11. **Argument of type '"01"' not assignable to ImageVariant** (2 errors)
12. **'uncapLevel' is possibly 'null'** (2 errors)
13. **'to' is possibly 'null'** (2 errors)
14. **Expression produces union type too complex** (3 errors)
15. **Parameter implicitly has 'any' type** (6 errors)
## Commands Reference
```bash
# Check error count
pnpm check 2>&1 | grep -c "Error:"
# Analyze error patterns
pnpm check 2>&1 | grep "Error:" | sort | uniq -c | sort -rn | head -20
# Find specific errors
pnpm check 2>&1 | grep -B2 "specific error text"
# Run lint
pnpm lint
# Run build
pnpm build
# Regenerate Paraglide translations
pnpm paraglide-js compile --project ./project.inlang
```
## Important Notes
- This project uses `exactOptionalPropertyTypes: true` in tsconfig, which is stricter than normal TypeScript
- The codebase uses Svelte 5 runes (`$state`, `$derived`, `$effect`)
- bits-ui v2.9.6 is used for UI components - check their docs for correct API
- Focus on errors only, not warnings (per user instruction)
- The branch `devin/1764361948-fix-type-errors` contains the latest fixes - merge into svelte-main or continue from there
## Success Criteria
- `pnpm check` returns 0 errors
- `pnpm lint` passes
- `pnpm build` succeeds

View file

@ -1,341 +0,0 @@
# TypeScript Quality Improvement Plan
**Status:** 0 TypeScript errors achieved (151 → 0)
**Next Phase:** Code quality and maintainability improvements
## Overview
While we've eliminated all TypeScript errors, several opportunities exist to improve type safety, reduce workarounds, and enhance maintainability.
---
## Phase 1: Critical Type Safety (High Priority)
### 1.1 Remove Type Assertions in Component Props
**Problem:** Using `as any` to spread props loses type safety
**Files:**
- `src/lib/components/uncap/UncapIndicator.svelte` (lines 167, 169)
- `src/lib/components/ui/segmented-control/SegmentedControl.svelte` (line 88)
**Tasks:**
- [ ] Create proper union type for StarRender props
- [ ] Define TranscendenceStarProps and UncapStarProps interfaces
- [ ] Replace `{...(star.props as any)}` with properly typed spread
- [ ] Create typed wrapper for RadioGroupPrimitive or fix optionalProps spreading
**Acceptance Criteria:**
- No `as any` casts in component prop spreading
- Full IntelliSense support for star component props
- Type errors caught at compile time
**Effort:** Medium (4-6 hours)
### 1.2 Unify Visibility Types
**Problem:** Number/string mismatch between frontend and API requiring runtime conversion
**Files:**
- `src/lib/types/api/party.ts` (visibility: number)
- `src/lib/api/adapters/party.adapter.ts` (visibility: string literal)
- `src/lib/services/party.service.ts` (runtime mapping)
**Tasks:**
- [ ] Create PartyVisibility enum/const
- [ ] Update Party type to use string literals
- [ ] Remove number-to-string mapping in party.service.ts
- [ ] Update all visibility references across codebase
- [ ] Update API serialization if needed
**Acceptance Criteria:**
- Single source of truth for visibility values
- No runtime type conversion needed
- Type safety when setting visibility
**Effort:** Medium (3-4 hours)
**Impact:** Prevents invalid visibility values at compile time
---
## Phase 2: Third-Party Library Improvements (Medium Priority)
### 2.1 Create bits-ui Wrapper Components
**Problem:** Using `optionalProps()` workaround for type incompatibilities
**Files:**
- `src/lib/components/ui/Select.svelte`
- `src/lib/components/ui/segmented-control/SegmentedControl.svelte`
- `src/lib/components/ui/RadioGroup.svelte` (if exists)
**Tasks:**
- [ ] Create `src/lib/components/ui/bits-ui-wrappers/` directory
- [ ] Create SelectRoot wrapper with explicit prop typing
- [ ] Create RadioGroupRoot wrapper with explicit prop typing
- [ ] Update consuming components to use wrappers
- [ ] Document why wrappers exist (bits-ui type issues)
**Acceptance Criteria:**
- No `optionalProps()` calls for bits-ui components
- Clear prop types for each wrapper
- Wrappers forward only supported props
**Effort:** Medium (4-5 hours)
### 2.2 Add wx-svelte-grid Type Definitions
**Problem:** Missing Cell export causing workaround with loose types
**Files:**
- `src/lib/components/database/cells/LastUpdatedCell.svelte`
- Other cell components using wx-svelte-grid
**Tasks:**
- [ ] Create `src/lib/types/wx-svelte-grid.d.ts`
- [ ] Define Cell, Grid, and other used types
- [ ] Replace `[key: string]: any` with proper Cell interface
- [ ] Update all cell components to use typed Cell props
**Acceptance Criteria:**
- Proper Cell type available for import
- No `[key: string]: any` in cell components
- IntelliSense support for grid props
**Effort:** Small (2-3 hours)
---
## Phase 3: Type Consolidation (Medium Priority)
### 3.1 Consolidate Awakening Types
**Problem:** Two different Awakening interfaces exist
**Files:**
- `src/lib/types/Awakening.d.ts`
- `src/lib/types/api/entities.ts`
**Tasks:**
- [ ] Compare both definitions and identify differences
- [ ] Choose canonical location (prefer entities.ts)
- [ ] Remove duplicate definition
- [ ] Update all imports to use single source
- [ ] Ensure LocalizedName is properly defined
**Acceptance Criteria:**
- Single Awakening type definition
- All imports use same source
- No breaking changes to existing code
**Effort:** Small (1-2 hours)
### 3.2 Type the `any` Usages
**Problem:** Loose typing in services and adapters
**Files to audit:**
```bash
grep -r ": any" src/lib --include="*.ts" --include="*.svelte"
```
**Common patterns to fix:**
- `row: any``row: DatabaseRow` (or specific entity type)
- `item: any``item: GridItem`
- `mapped: any``mapped: CreatePartyParams`
- `result: any` → proper return type
- Context types using `any`
**Tasks:**
- [ ] Audit all `any` usages and categorize
- [ ] Create proper types for common patterns (DatabaseRow, GridItem, etc.)
- [ ] Replace `any` with specific types
- [ ] Add generics where appropriate
**Acceptance Criteria:**
- Minimal `any` usage (only where truly necessary)
- Clear justification comment for remaining `any` usages
- Improved IntelliSense throughout codebase
**Effort:** Large (6-8 hours)
---
## Phase 4: Test Infrastructure (Low Priority)
### 4.1 Create Test Mock Factories
**Problem:** Test mocks are brittle and require manual updates when types change
**Files:**
- `src/lib/api/adapters/__tests__/entity.adapter.test.ts`
- `src/lib/api/adapters/__tests__/grid.adapter.test.ts`
- Other test files
**Tasks:**
- [ ] Create `src/lib/testing/factories.ts`
- [ ] Implement `createMockWeapon(overrides?)`
- [ ] Implement `createMockCharacter(overrides?)`
- [ ] Implement `createMockSummon(overrides?)`
- [ ] Implement `createMockParty(overrides?)`
- [ ] Update all tests to use factories
- [ ] Add JSDoc examples for each factory
**Acceptance Criteria:**
- All test mocks use factory functions
- Overrides supported for customization
- Type-safe mock creation
- Tests resilient to type changes
**Effort:** Medium (4-5 hours)
### 4.2 Improve Test Coverage for Type Transformations
**Focus areas:**
- Visibility mapping (number → string)
- Awakening type handling
- Party payload transformations
- Grid item CRUD operations
**Tasks:**
- [ ] Add tests for mapToApiPayload visibility conversion
- [ ] Add tests for awakening null/undefined handling
- [ ] Test edge cases in type transformations
- [ ] Document expected type contracts in tests
**Effort:** Medium (3-4 hours)
---
## Phase 5: Code Quality (Low Priority)
### 5.1 Address TypeScript Warnings
**Current status:** 190 warnings
**Categories to review:**
- Unused CSS selectors
- Non-reactive updates
- Accessibility warnings
- Import warnings
**Tasks:**
- [ ] Run `pnpm check 2>&1 | grep "Warn:" | sort | uniq -c`
- [ ] Categorize warnings by type and severity
- [ ] Fix or suppress unused CSS warnings
- [ ] Review non-reactive update warnings (may indicate bugs)
- [ ] Address accessibility issues
**Acceptance Criteria:**
- Warnings reduced by 50% or more
- All critical warnings addressed
- Suppressions documented with reason
**Effort:** Medium (4-6 hours)
### 5.2 Add JSDoc Documentation
**Problem:** Complex type transformations lack explanation
**Target areas:**
- `mapToApiPayload()` in party.service.ts
- Visibility mapping logic
- Type assertion workarounds
- Third-party wrapper purposes
**Tasks:**
- [ ] Document visibility mapping with TODO for unification
- [ ] Explain why type assertions are needed
- [ ] Add examples to complex type transformations
- [ ] Document third-party library workarounds
**Acceptance Criteria:**
- All workarounds have explanation comments
- Complex transformations documented
- TODOs added for future improvements
**Effort:** Small (2-3 hours)
### 5.3 Strict Null Checks Review
**Problem:** Some null handling is implicit or unclear
**Tasks:**
- [ ] Review null coalescing operators (`??`)
- [ ] Document what empty string defaults mean
- [ ] Consider making related properties required together (e.g., avatar.picture + avatar.element)
- [ ] Add validation for undefined vs null semantics
**Effort:** Small (2-3 hours)
---
## Implementation Strategy
### Recommended Order:
**Week 1: Critical Type Safety**
1. Remove type assertions in UncapIndicator (1.1)
2. Unify visibility types (1.2)
**Week 2: Third-Party Libraries**
3. Create bits-ui wrappers (2.1)
4. Add wx-svelte-grid types (2.2)
**Week 3: Type Consolidation**
5. Consolidate Awakening types (3.1)
6. Type the `any` usages (3.2) - ongoing
**Week 4: Polish**
7. Create test factories (4.1)
8. Address warnings (5.1)
9. Add JSDoc (5.2)
### Success Metrics:
- **Type Safety:** 0 `as any` casts (except documented cases)
- **Consistency:** Single source of truth for shared types
- **Maintainability:** Test factories, JSDoc, reduced warnings
- **Developer Experience:** Better IntelliSense, clearer errors
### Non-Goals:
- Perfect type coverage (pragmatic > perfect)
- Rewriting working code just for types
- Over-engineering simple components
---
## Notes
### Philosophy:
- Incremental improvement over big rewrites
- Document "why" for workarounds
- Type safety where it adds value
- Pragmatic trade-offs are okay
### When to Use `any`:
- Truly dynamic data (rare)
- Third-party library gaps (with comment)
- Overly complex generic inference
- Always add `// eslint-disable-next-line @typescript-eslint/no-explicit-any` and justification
### When to Create Wrappers:
- Type incompatibilities we can't fix upstream
- Need to restrict API surface
- Want better defaults
- Shared configuration across usages
---
## Progress Tracking
- [ ] Phase 1: Critical Type Safety (0/2)
- [ ] Phase 2: Third-Party Libraries (0/2)
- [ ] Phase 3: Type Consolidation (0/2)
- [ ] Phase 4: Test Infrastructure (0/2)
- [ ] Phase 5: Code Quality (0/3)
**Last Updated:** 2025-11-28
**Current Status:** Planning phase