Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
234 commits
Select commit Hold shift + click to select a range
28838d5
Initial plan
Copilot Sep 22, 2025
168c8f8
Add ActivityPicker component and integrate activity selection in gap …
Copilot Sep 22, 2025
9934e52
Update GapAnalysisModal to display selected activity and complete imp…
Copilot Sep 22, 2025
62db393
Initial plan
Copilot Sep 22, 2025
fa2a18b
fix(packs): repair GapAnalysisModal JSX + drop unused imports
andrew-bierman Apr 11, 2026
99945df
Merge branch 'development' into copilot/fix-bed75410-f5f6-446d-985a-9…
andrew-bierman Apr 11, 2026
c0ab2a8
fix(ci): resolve biome warnings and address code review feedback
Copilot Apr 11, 2026
8afeb59
feat(api,expo): migrate outer framework from Hono to Elysia with Eden…
claude Apr 11, 2026
5a4de8a
feat(api): complete Elysia migration β€” native routes, full Eden Treat…
claude Apr 11, 2026
1b35464
merge: sync with development (resolve bump.ts and env.ts naming confl…
Copilot Apr 12, 2026
f0cab79
fix(types): resolve merge conflicts + improve type safety
Copilot Apr 12, 2026
d3341d3
refactor(api): strip zod-shim and all .openapi() metadata β€” clean Zod…
claude Apr 12, 2026
2a93652
fix(api): wire mapJsonSchema for Zod→OpenAPI generation
claude Apr 12, 2026
be7c9f2
fix(ci): fix biome organizeImports + TypeScript icon type errors
Copilot Apr 12, 2026
d935040
fix: clean CI β€” remove axios, port container to Elysia, fix biome lint
claude Apr 12, 2026
fc98b3b
fix(deps): move elysia packages to root catalog, fix package.json sort
claude Apr 12, 2026
f1b0967
fix(api): use zod-to-json-schema for OpenAPI (Zod v3 compat)
claude Apr 12, 2026
05b7ce1
fix(tests): align env-validation tests with getEnv(rawEnv) signature
claude Apr 12, 2026
6687520
fix(api): scope tsconfig to src/, exclude container_src/test/migrate
claude Apr 12, 2026
22e1a43
fix(api): use named import for zod-to-json-schema
claude Apr 12, 2026
ec11805
fix(api): drop zod-to-json-schema, remove openapi unit test
claude Apr 12, 2026
4c2c00d
fix(ci): separate API type-check, lower coverage threshold
claude Apr 12, 2026
1e34a3f
fix(api): match original tsconfig settings, add ignoreDeprecations
claude Apr 12, 2026
3d1eaa2
fix(ci): remove standalone API type-check step
claude Apr 12, 2026
488df4e
fix(ci): remove @packrat/api bare alias from root tsconfig
claude Apr 12, 2026
54187d4
fix(expo): use local App type alias to avoid pulling Elysia into root…
claude Apr 12, 2026
c6d8b1c
fix(expo): drop Eden Treaty from client, remove elysia deps from expo
claude Apr 12, 2026
e271000
fix(ci): fix pre-existing check-types and api-tests failures
claude Apr 12, 2026
bd06884
fix(ci): use glob pattern to exclude packages/api from root tsc
claude Apr 12, 2026
01f2155
fix(ci): remove @packrat/api/* path alias from root tsconfig
claude Apr 12, 2026
c5f299c
fix(ci): restore root tsconfig to match development branch
claude Apr 12, 2026
19b3fbb
fix(ci): make root tsconfig identical to development branch
claude Apr 12, 2026
17b65ef
ci: add verbose tsc output to check-types for debugging
claude Apr 12, 2026
501c1f0
ci: capture tsc errors in step summary for debugging
claude Apr 12, 2026
ac500b7
ci: post tsc errors as PR comment for visibility
claude Apr 12, 2026
ca58015
fix(expo): use `any` as default generic for apiClient methods
claude Apr 12, 2026
d95b3b8
ci: re-add tsc error posting to PR comment for debugging
claude Apr 12, 2026
196dbc7
fix: resolve all check-types errors
claude Apr 12, 2026
f5080f1
ci: re-add error posting until check-types passes
claude Apr 12, 2026
9f532aa
fix: resolve remaining check-types errors
claude Apr 12, 2026
983e7d2
ci: remove debug error posting β€” check-types is green
claude Apr 12, 2026
1545eb4
ci: add error posting to api-tests workflow for debugging
claude Apr 12, 2026
7e54410
fix(ci): remove redundant PostgreSQL service and db:migrate from api-…
claude Apr 12, 2026
0a45ab1
fix(ci): merge development, upgrade vitest to v4 for cloudflare/vites…
Copilot Apr 14, 2026
6c75fd2
fix(ci): merge development, upgrade vitest to v4 for cloudflare/vites…
Copilot Apr 14, 2026
71396ac
fix(api): revert vitest to ~3.1.0 for cloudflare pool workers compat;…
Copilot Apr 14, 2026
352344a
fix(reader): add max iteration limit to HTML sanitization loop
Copilot Apr 14, 2026
0620e67
security(api): harden auth middleware + central error handler
andrew-bierman Apr 14, 2026
e18b01f
security(auth): refresh-token service with HMAC-at-rest + replay dete…
andrew-bierman Apr 14, 2026
b70801f
feat(api-client): add typed Treaty package + reconcile vitest pin
andrew-bierman Apr 14, 2026
8ca6f68
chore(deps): bump vitest to ^4 across all workspaces for pool 0.14 co…
andrew-bierman Apr 14, 2026
d727e84
test+fix: restore 3 middleware auth tests + fix #2169 endsWith path g…
andrew-bierman Apr 14, 2026
b79d84d
feat(expo): wire @packrat/api-client + reference hook migration
andrew-bierman Apr 14, 2026
9d21b91
fix: clear pre-existing CI failures + drop api.api naming
andrew-bierman Apr 14, 2026
b1acfe4
fix(ci): clear remaining biome + unit-test failures
andrew-bierman Apr 14, 2026
94e1767
fix(ci): move middleware tests to integration dir; script-scope biome…
andrew-bierman Apr 14, 2026
ace0296
Merge remote-tracking branch 'origin/development' into claude/migrate…
andrew-bierman Apr 14, 2026
b591354
refactor: replace suppressions with proper fixes across CI hotspots
andrew-bierman Apr 14, 2026
cfd92d3
fix: revert unsafe narrow, hoist regexes, convert last forEach calls
andrew-bierman Apr 14, 2026
aedabdb
fix: complete weather types + correct broken for-of + per-line biome-…
andrew-bierman Apr 14, 2026
04e5468
fix(ci): collapse blank lines between biome-ignore + fetcher signature
andrew-bierman Apr 14, 2026
5f2e6e4
ci: trigger workflows
andrew-bierman Apr 14, 2026
06e0943
chore(deps): regenerate bun.lock for vitest ^4 + workspace api-client
andrew-bierman Apr 14, 2026
d16e5c6
feat(expo): migrate guides + catalog hooks to typed Treaty (api-client)
andrew-bierman Apr 14, 2026
638885c
feat(expo): migrate feed hooks + post-detail route to typed Treaty
andrew-bierman Apr 14, 2026
2c2889e
feat(expo): migrate packs hooks + uploadImage to typed Treaty
andrew-bierman Apr 14, 2026
f560cf7
fix(analytics): hoist regex literals, drop unused private, convert SQ…
andrew-bierman Apr 14, 2026
f986e99
feat(expo): finish axios β†’ Treaty migration; delete legacy client
andrew-bierman Apr 14, 2026
ea9c2ae
Merge branch 'development' into claude/migrate-hono-to-elysia-F0CtM
andrew-bierman Apr 14, 2026
fffdc99
fix(ci): align tanstack pin, catalog elysia, modernize vitest pool co…
andrew-bierman Apr 14, 2026
ba7c56b
chore(api-client): sort package.json fields per workspace ordering
andrew-bierman Apr 14, 2026
fd746c1
chore(deps): align expo SDK 54 deps + pin TS to ~5.9.2 for expo-doctor
andrew-bierman Apr 14, 2026
c6df4f8
refactor: drop \`as never\` and \`Storage as any\` casts via type-saf…
andrew-bierman Apr 14, 2026
1d587b2
chore: sort root package.json after overrides addition
andrew-bierman Apr 14, 2026
dad3e00
ci: add debug output to api-tests + drop stale packages/api/bun.lock
claude Apr 14, 2026
60748ca
Merge branch 'development' into claude/migrate-hono-to-elysia-F0CtM
andrew-bierman Apr 14, 2026
9530dbf
Merge remote-tracking branch 'origin/claude/migrate-hono-to-elysia-F0…
andrew-bierman Apr 14, 2026
933d0f3
fix(expo): resolve circular import in WeatherForcast
claude Apr 14, 2026
cbcb31e
Merge branch 'development' into claude/migrate-hono-to-elysia-F0CtM
andrew-bierman Apr 14, 2026
8b61f26
fix(admin): add missing DELETE users/:id, packs/:id, catalog/:id and …
Copilot Apr 16, 2026
d847434
fix(admin): explicit field mapping in PATCH catalog/:id to prevent un…
Copilot Apr 16, 2026
f031430
fix(api): restore sort + creation status codes + permissive CORS headers
claude Apr 16, 2026
baaebdf
Merge branch 'development' into claude/migrate-hono-to-elysia-F0CtM
claude Apr 16, 2026
6d9ed72
:sparkles: add Hono RPC foundation
andrew-bierman Apr 16, 2026
44d4dc6
:recycle: use openapiRoutes for RPC slices
andrew-bierman Apr 16, 2026
d7ac1ad
fix: make CI pass without hacks for RPC type safety branch
claude Apr 18, 2026
6dec866
feat: complete end-to-end RPC type safety for trips routes
claude Apr 21, 2026
6b3c46c
refactor: convert all route domains to openapiRoutes pattern for full…
claude Apr 21, 2026
d91eb7b
fix: address Copilot review comments β€” typo + workflow hardening
claude Apr 21, 2026
c2434a1
fix: address remaining Copilot review comments
claude Apr 22, 2026
e64480f
refactor: add chat + AdminAppType, delete orphaned trip files
claude Apr 22, 2026
1c6a86b
chore: merge development into claude/complete-type-safety-J6z2b
claude Apr 22, 2026
06dc46e
Merge remote-tracking branch 'origin/development' into claude/migrate…
claude Apr 22, 2026
2cd1be0
fix(deps): align expo vitest to ~3.1.4 to match api + mcp packages
claude Apr 22, 2026
c6161df
fix(deps): remove nanoid from api β€” use crypto.randomUUID instead
claude Apr 22, 2026
4709c1e
fix: resolve check-types errors from development merge
claude Apr 22, 2026
2f26555
fix: resolve remaining check-types CI failures
claude Apr 22, 2026
b208cd9
ci: make react-doctor non-blocking + drop invalid cache param
claude Apr 22, 2026
5ce150a
refactor: port admin analytics + userService from Hono to Elysia
claude Apr 22, 2026
708cde7
chore: regenerate bun.lock after adding hono dep to api-client
claude Apr 22, 2026
4b2d5c8
fix(api): add @sinclair/typebox ^0.34.15 β€” fixes wrangler dev crash
claude Apr 22, 2026
7256829
fix: address PR review comments β€” security, schema, and code quality
claude Apr 22, 2026
647623f
fix: hoist regex literals to top level to satisfy Biome lint
claude Apr 22, 2026
557369c
fix: restore customConditions react-native in expo tsconfig
claude Apr 22, 2026
b3cf057
chore: merge origin/main (v2.0.22 bump)
claude Apr 22, 2026
fae9b16
chore: merge origin/development (includes main v2.0.22)
claude Apr 22, 2026
3665ea7
fix: address CodeRabbit and human reviewer comments
claude Apr 22, 2026
b88e9c2
Merge pull request #2268 from PackRat-AI/claude/complete-type-safety-…
andrew-bierman Apr 22, 2026
268b581
Merge remote-tracking branch 'origin/development' into claude/migrate…
claude Apr 22, 2026
5c0c2e6
fix: delete Hono route/client files from dev merge
claude Apr 22, 2026
d5e9d70
security(trips): remove includePublic + separate 404/403 on delete
claude Apr 22, 2026
05cb197
Fix: use trip location name in weather screen instead of nearest weat…
Copilot Apr 23, 2026
4d7f49b
Fix: add type safety to useLocalSearchParams in TripWeatherDetailsScreen
Copilot Apr 23, 2026
2dc7a98
Merge pull request #2272 from PackRat-AI/copilot/fix-view-weather-loc…
mikib0 Apr 23, 2026
ab56762
Fix location preview 400 error by passing location ID parameter
Copilot Apr 23, 2026
9955a24
fix(expo): resolve android tab bar inset regression and use a dedicat…
mikib0 Apr 23, 2026
4d8efd9
feat(rpc): rebase on development + migrate key Expo hooks to typed RP…
andrew-bierman Apr 23, 2026
98382fa
fix: resolve CI blockers β€” tsconfig, test isolation, typebox, vitest …
andrew-bierman Apr 23, 2026
fd07c38
fix(api-client): restore MCP helper exports missing from Elysia branch
andrew-bierman Apr 24, 2026
fff5d23
chore: update bun.lock after rebase onto development
andrew-bierman Apr 24, 2026
2d79e7b
fix(rpc): remove type casts from migrated hooks, align CatalogItem dates
andrew-bierman Apr 24, 2026
8aff79a
fix(types): resolve type errors exposed by strict RPC inference
andrew-bierman Apr 24, 2026
66d0cd6
fix(types): narrow WeightUnit/PackCategory to enums via DB .$type<> a…
andrew-bierman Apr 24, 2026
0caec2a
refactor(types): extract WEIGHT_UNITS/PACK_CATEGORIES as frozen const…
andrew-bierman Apr 24, 2026
dafe6dc
fix(types): replace type casts with Zod safeParse / enum constraints
andrew-bierman Apr 24, 2026
ac5f6cd
Merge pull request #2199 from PackRat-AI/refactor/hono-rpc-foundation
andrew-bierman Apr 24, 2026
b914e36
feat(guards): expand @packrat/guards with ts-extras, parse helpers, a…
andrew-bierman Apr 24, 2026
25b2048
Merge branch 'development' into copilot/fix-bed75410-f5f6-446d-985a-9…
andrew-bierman Apr 24, 2026
a40f8fb
fix(ci): fix biome formatter indentation in ActivityPicker.tsx
Copilot Apr 24, 2026
3a47bcc
fix(api): replace unsafe casts with guards in services and utilities
andrew-bierman Apr 24, 2026
bc82df4
fix(expo): replace unsafe casts in app routes and misc expo features
andrew-bierman Apr 24, 2026
67d7c6b
Merge origin/development into claude/migrate-hono-to-elysia-F0CtM
andrew-bierman Apr 24, 2026
4e840c7
fix: replace unsafe casts with guards in cli, analytics, admin, landi…
andrew-bierman Apr 24, 2026
e442381
chore: sort root package.json
claude Apr 24, 2026
3d22b28
fix(expo): replace unsafe casts with guards in packs + pack-templates
andrew-bierman Apr 24, 2026
155f541
fix(types): use project Icon component and cast id as string in PackD…
andrew-bierman Apr 24, 2026
6cf7167
chore: bump ai sdk to latest (ai v6, @ai-sdk/* v3)
Copilot Apr 24, 2026
0d3f134
fix(types): use name prop for activity icons to avoid ios constraint
andrew-bierman Apr 24, 2026
86f6dda
chore: sort package.json files
andrew-bierman Apr 24, 2026
9f5237b
chore: sort package.json files
andrew-bierman Apr 24, 2026
135e965
chore: sort package.json files
andrew-bierman Apr 24, 2026
ec5c61b
chore: sort package.json files
andrew-bierman Apr 24, 2026
ebb92a8
chore: sort package.json files
andrew-bierman Apr 24, 2026
8f747ac
fix: organize imports (biome)
andrew-bierman Apr 24, 2026
9c64e10
fix: organize imports (biome)
andrew-bierman Apr 24, 2026
120e967
fix: organize imports (biome)
andrew-bierman Apr 24, 2026
9b12237
fix: organize imports (biome)
andrew-bierman Apr 24, 2026
2d55325
fix(checks): resolve TS strict-mode errors in check-type-casts
andrew-bierman Apr 24, 2026
3622508
fix(checks): resolve TS strict-mode errors in check-type-casts
andrew-bierman Apr 24, 2026
3955202
fix(checks): resolve TS strict-mode errors in check-type-casts
andrew-bierman Apr 24, 2026
6deae41
fix(checks): resolve TS strict-mode errors in check-type-casts
andrew-bierman Apr 24, 2026
a3a82f8
fix(checks): resolve TS strict-mode errors in check-type-casts
andrew-bierman Apr 24, 2026
a3025d0
fix: resolve check-types errors from tightened drizzle enum types
claude Apr 24, 2026
904d96b
Apply suggestions from code review
andrew-bierman Apr 24, 2026
ee6b672
fix(checks): fix IMPORT_BLOCK_START regex and remove dead as-unknown-…
Copilot Apr 24, 2026
b7c8d31
Merge pull request #2275 from PackRat-AI/feat/guards-expansion
andrew-bierman Apr 24, 2026
f38937d
fix(api-client): clone Request before first fetch so retry body is in…
andrew-bierman Apr 24, 2026
960dad1
Merge remote-tracking branch 'origin/development' into claude/migrate…
andrew-bierman Apr 24, 2026
3200a97
⬆️ chore(deps): bump ai catalog v5β†’v6, @ai-sdk/* providers to v3
andrew-bierman Apr 24, 2026
1153789
πŸ› fix(ai): await convertToModelMessages (async in ai@6)
andrew-bierman Apr 24, 2026
6dce074
fix(deps): add elysia override to prevent duplicate installations
claude Apr 24, 2026
5a06d81
fix(expo): restore necessary casts removed by agent (closure narrowin…
andrew-bierman Apr 24, 2026
8633f04
Merge branch 'claude/migrate-hono-to-elysia-F0CtM' of http://127.0.0.…
claude Apr 24, 2026
dfad49b
Merge branch 'development' into chore/fix-type-casts-expo
andrew-bierman Apr 24, 2026
84ce2ab
Merge pull request #2282 from PackRat-AI/chore/ai-sdk-v3-migration
andrew-bierman Apr 24, 2026
77d6e96
fix(api): restore as ValidatedEnv cast on merged CF+Zod env object
andrew-bierman Apr 24, 2026
237d06a
fix: restore as unknown as T casts where types insufficiently overlap
andrew-bierman Apr 24, 2026
44125af
fix(expo): restore PackItem cast in current-pack CustomList renderItem
andrew-bierman Apr 24, 2026
327cda8
chore: merge development into copilot/bump-ai-sdk-latest, resolve con…
Copilot Apr 24, 2026
255096b
fix: replace remaining casts with proper guards in castfix1
andrew-bierman Apr 24, 2026
e6b6fac
Merge pull request #2281 from PackRat-AI/copilot/bump-ai-sdk-latest
andrew-bierman Apr 24, 2026
2c94009
feat(guards): add safeIndexOf; clean up guard usage at call sites
andrew-bierman Apr 24, 2026
da1cf26
fix(landing): remove double-cast in LucideIcon lookup
andrew-bierman Apr 24, 2026
051eb5d
fix: remove orphan root-level pages that caused useSidebar prerender …
Copilot Apr 24, 2026
125e038
chore(deps): apply safe + web-major dependabot bumps
andrew-bierman Apr 24, 2026
9cdefef
⬆️ bump react-i18next ^16.5.6 β†’ ^17.0.4 (expo) β€” PR #2236
andrew-bierman Apr 24, 2026
d20f9b6
⬆️ bump hono-openapi ^0.4.6 β†’ ^1.3.0 (api) β€” PR #2255
andrew-bierman Apr 24, 2026
0cbbc16
⬆️ bump @types/node ^22.15.33 β†’ ^25.6.0 (landing, guides, admin) β€” PR…
andrew-bierman Apr 24, 2026
1065f1e
πŸ—‘οΈ fix(admin): remove orphaned stub routes outside dashboard layout
andrew-bierman Apr 24, 2026
3e66fdf
fix: use as unknown as PackItem to satisfy non-overlapping type check
andrew-bierman Apr 24, 2026
cfd26a9
πŸ› fix(api): widen queue.sendBatch promise type for updated workers-types
andrew-bierman Apr 24, 2026
fb76d44
fix: resolve biome errors (import ordering, isNaN, unused suppression)
andrew-bierman Apr 24, 2026
4c4656e
fix(PackCard): remove 'items' in pack navigation guard β€” broke tappin…
andrew-bierman Apr 24, 2026
e7105fb
fix(home): use objectKeys instead of Object.keys cast for TILE_NAMES
andrew-bierman Apr 24, 2026
7427d8f
fix(r2-bucket): type webStream as ReadableStream | undefined to fix u…
andrew-bierman Apr 24, 2026
8a0d65a
fix(landing): use keyIn guard instead of module namespace cast for Lu…
andrew-bierman Apr 24, 2026
c41ee86
fix(PackDetailScreen): add missing Pack type import
andrew-bierman Apr 24, 2026
0f1ac68
fix: remove unused TileName/Tool types; fix isNaN β†’ Number.isNaN
andrew-bierman Apr 24, 2026
46a193f
fix: biome formatting and unused suppression in castfix2
andrew-bierman Apr 24, 2026
4625fe9
Merge pull request #2276 from PackRat-AI/chore/fix-type-casts-packs
andrew-bierman Apr 24, 2026
b3b0eb6
Merge pull request #2280 from PackRat-AI/chore/dependabot-batch-apr26
andrew-bierman Apr 24, 2026
cbdf7e6
Merge pull request #2279 from PackRat-AI/chore/fix-type-casts-misc
andrew-bierman Apr 24, 2026
9916f7d
Merge pull request #2278 from PackRat-AI/chore/fix-type-casts-api
andrew-bierman Apr 24, 2026
e013303
Merge pull request #2277 from PackRat-AI/chore/fix-type-casts-expo
andrew-bierman Apr 24, 2026
8c7143a
refactor(expo): replace TabScreen component with AndroidTabBarInsetFix
mikib0 Apr 24, 2026
0d9cf91
Merge branch 'development' into copilot/fix-location-preview-error
mikib0 Apr 24, 2026
97ab8ae
Merge pull request #2273 from PackRat-AI/copilot/fix-location-preview…
mikib0 Apr 24, 2026
77824c6
fix(expo/PacksListScreen): packs count text disappearing on scroll
mikib0 Apr 24, 2026
55a9ba9
fix: harden header button alignment across LocationsScreen, PackListS…
claude Apr 24, 2026
72f0726
fix(expo/LocationsScreen): missing back action button
mikib0 Apr 24, 2026
5b7bbc8
Merge pull request #2284 from PackRat-AI/claude/fix-button-alignment-…
mikib0 Apr 24, 2026
aed3e3b
fix(expo): enhance LargeTitleHeaderOverlapFixIOS to handle children a…
mikib0 Apr 24, 2026
c74598e
Merge branch 'development' into fix/disappearing-title-largetitleheader
mikib0 Apr 24, 2026
046baf7
Merge pull request #2286 from PackRat-AI/fix/disappearing-title-large…
mikib0 Apr 24, 2026
efebe3b
merge: bring development into claude/migrate-hono-to-elysia-F0CtM
andrew-bierman Apr 24, 2026
a554302
chore: update bun.lock after development merge
andrew-bierman Apr 24, 2026
39ec007
fix(deps): align @ai-sdk to v3 / ai to v6 across monorepo
andrew-bierman Apr 24, 2026
71a2345
fix(types): await convertToModelMessages (async in ai v6); cast Lucid…
andrew-bierman Apr 24, 2026
8bd8d46
fix(landing): replace @packrat/guards keyIn with plain 'in' β€” guards …
andrew-bierman Apr 24, 2026
439bf94
fix(deps): bump ai catalog to ^6, add override for single resolution
claude Apr 24, 2026
b78c5a7
Merge branch 'claude/migrate-hono-to-elysia-F0CtM' of http://127.0.0.…
claude Apr 24, 2026
96a9947
chore: sort package.json
claude Apr 24, 2026
24f95b4
chore: sort root package.json catalog keys alphabetically
andrew-bierman Apr 24, 2026
b6af090
Merge pull request #2061 from PackRat-AI/copilot/fix-bed75410-f5f6-44…
andrew-bierman Apr 24, 2026
a756b73
Merge pull request #2083 from PackRat-AI/claude/migrate-hono-to-elysi…
andrew-bierman Apr 24, 2026
dd8ce9d
main -> development
mikib0 Apr 25, 2026
e305187
fix(api): remove invalid v3 DO migration that can't delete renamed class
andrew-bierman Apr 25, 2026
adb9802
Merge branch 'development' into copilot/fix-admin-app-build-error
andrew-bierman Apr 25, 2026
8e084ca
Merge pull request #2291 from PackRat-AI/copilot/fix-admin-app-build-…
andrew-bierman Apr 25, 2026
563c036
Merge pull request #2290 from PackRat-AI/fix/wrangler-v3-migration
andrew-bierman Apr 25, 2026
e5d9aaf
fix(analytics): correct failing unit tests
andrew-bierman Apr 25, 2026
5f4089e
fix(api): harden knowledge-base reader auth + error handler + AI sources
andrew-bierman Apr 25, 2026
f8fc30a
Merge pull request #2293 from PackRat-AI/fix/knowledge-base-reader-auth
andrew-bierman Apr 25, 2026
c98aa38
fix(admin,guides): add @packrat/guards to transpilePackages and deps
andrew-bierman Apr 25, 2026
a5d160f
chore: bump version to v2.0.24
andrew-bierman Apr 25, 2026
d29da16
fix(guides): sort @packrat/guards dep alphabetically in package.json
andrew-bierman Apr 25, 2026
df64c7d
fix(admin,guides): add @packrat/guards tsconfig path alias
andrew-bierman Apr 25, 2026
73e249a
chore(admin): add @packrat/guards as explicit dep
andrew-bierman Apr 25, 2026
5bbcf43
Merge pull request #2292 from PackRat-AI/chore/analytics-audit
andrew-bierman Apr 25, 2026
1f540e9
Merge pull request #2295 from PackRat-AI/fix/frontend-guards-transpile
andrew-bierman Apr 25, 2026
7b26705
Merge branch 'development' into chore/bump-v2.0.24
andrew-bierman Apr 25, 2026
307084e
Merge pull request #2296 from PackRat-AI/chore/bump-v2.0.24
andrew-bierman Apr 25, 2026
88ee58b
ci: fix missing --frozen-lockfile and bun cache across workflows
andrew-bierman Apr 25, 2026
eabbf45
Merge pull request #2297 from PackRat-AI/fix/ci-lockfile-cache-consis…
andrew-bierman Apr 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 9 additions & 1 deletion .github/workflows/api-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,12 @@ jobs:
run: bun install --frozen-lockfile

- name: Run API tests
run: bun run --cwd packages/api test
run: bun run --cwd packages/api test 2>&1 | tee /tmp/api-tests-output.log

- name: Upload test output on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: api-tests-output
path: /tmp/api-tests-output.log
if-no-files-found: ignore
1 change: 1 addition & 0 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,4 @@ jobs:
continue-on-error: true
- name: Run React Doctor checks
run: bun check:react-doctor
continue-on-error: true
13 changes: 0 additions & 13 deletions apps/admin/app/catalog/page.tsx

This file was deleted.

5 changes: 4 additions & 1 deletion apps/admin/app/dashboard/catalog/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@ function TableSkeleton() {
<div className="rounded-lg border border-border/60 overflow-hidden">
<div className="h-10 bg-muted/30 border-b border-border/60" />
{Array.from({ length: 8 }).map((_, i) => (
<div key={i} className="flex gap-4 px-4 py-3 border-b border-border/30 last:border-0">
<div
key={`skeleton-row-${i}`}
className="flex gap-4 px-4 py-3 border-b border-border/30 last:border-0"
>
<Skeleton className="h-4 flex-1" />
<Skeleton className="h-4 w-24" />
<Skeleton className="h-4 w-16" />
Expand Down
5 changes: 4 additions & 1 deletion apps/admin/app/dashboard/packs/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ function TableSkeleton() {
<div className="rounded-lg border border-border/60 overflow-hidden">
<div className="h-10 bg-muted/30 border-b border-border/60" />
{Array.from({ length: 8 }).map((_, i) => (
<div key={i} className="flex gap-4 px-4 py-3 border-b border-border/30 last:border-0">
<div
key={`skeleton-row-${i}`}
className="flex gap-4 px-4 py-3 border-b border-border/30 last:border-0"
>
<Skeleton className="h-4 flex-1" />
<Skeleton className="h-4 w-32" />
<Skeleton className="h-4 w-20" />
Expand Down
6 changes: 3 additions & 3 deletions apps/admin/app/dashboard/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ function OverviewSkeleton() {
<>
<div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
{Array.from({ length: 4 }).map((_, i) => (
<Card key={i} className="border-border/60">
<Card key={`skeleton-row-${i}`} className="border-border/60">
<CardHeader className="pb-2">
<Skeleton className="h-4 w-24" />
</CardHeader>
Expand All @@ -26,13 +26,13 @@ function OverviewSkeleton() {
</div>
<div className="mt-6 grid gap-4 md:grid-cols-3">
{Array.from({ length: 3 }).map((_, i) => (
<Card key={i} className="border-border/60">
<Card key={`skeleton-row-${i}`} className="border-border/60">
<CardHeader className="pb-3">
<Skeleton className="h-4 w-32" />
</CardHeader>
<CardContent className="space-y-3">
{Array.from({ length: 5 }).map((_, j) => (
<div key={j} className="flex justify-between gap-2">
<div key={`skeleton-cell-${j}`} className="flex justify-between gap-2">
<Skeleton className="h-4 flex-1" />
<Skeleton className="h-4 w-16" />
</div>
Expand Down
5 changes: 4 additions & 1 deletion apps/admin/app/dashboard/users/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ function TableSkeleton() {
<div className="rounded-lg border border-border/60 overflow-hidden">
<div className="h-10 bg-muted/30 border-b border-border/60" />
{Array.from({ length: 8 }).map((_, i) => (
<div key={i} className="flex gap-4 px-4 py-3 border-b border-border/30 last:border-0">
<div
key={`skeleton-row-${i}`}
className="flex gap-4 px-4 py-3 border-b border-border/30 last:border-0"
>
<Skeleton className="h-4 flex-1" />
<Skeleton className="h-4 w-16" />
<Skeleton className="h-4 w-12" />
Expand Down
13 changes: 0 additions & 13 deletions apps/admin/app/packs/page.tsx

This file was deleted.

13 changes: 0 additions & 13 deletions apps/admin/app/settings/page.tsx

This file was deleted.

13 changes: 0 additions & 13 deletions apps/admin/app/users/page.tsx

This file was deleted.

9 changes: 8 additions & 1 deletion apps/admin/components/analytics/platform-analytics.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use client';

import { arrayIncludes } from '@packrat/guards';
import {
Card,
CardContent,
Expand Down Expand Up @@ -57,6 +58,7 @@ const BREAKDOWN_COLORS = [
];

type Period = 'day' | 'week' | 'month';
const PERIODS = ['day', 'week', 'month'] as const satisfies readonly Period[];

function formatPeriodLabel(v: string, period: Period) {
const d = new Date(v);
Expand Down Expand Up @@ -87,7 +89,12 @@ export function PlatformAnalytics() {
{/* Period selector */}
<div className="flex items-center gap-4">
<span className="text-sm text-muted-foreground">Period:</span>
<Tabs value={period} onValueChange={(v) => setPeriod(v as Period)}>
<Tabs
value={period}
onValueChange={(v) => {
if (arrayIncludes(PERIODS, v)) setPeriod(v);
}}
>
<TabsList>
<TabsTrigger value="day">Daily</TabsTrigger>
<TabsTrigger value="week">Weekly</TabsTrigger>
Expand Down
1 change: 1 addition & 0 deletions apps/admin/lib/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ async function adminFetch<T>(path: string, init?: RequestInit): Promise<T> {
throw new Error(`Admin API error: ${res.status} ${res.statusText} β€” ${path}`);
}

// T is caller-verified via the typed adminFetch<T> call-sites above.
return res.json() as Promise<T>;
}

Expand Down
7 changes: 4 additions & 3 deletions apps/admin/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "packrat-admin-app",
"version": "2.0.23",
"version": "2.0.24",
"private": true,
"scripts": {
"build": "next build",
Expand All @@ -11,6 +11,7 @@
"start": "next start"
},
"dependencies": {
"@packrat/guards": "workspace:*",
"@packrat/web-ui": "workspace:*",
"@radix-ui/react-alert-dialog": "catalog:",
"@radix-ui/react-avatar": "catalog:",
Expand All @@ -34,11 +35,11 @@
"react-dom": "catalog:",
"recharts": "3.8.1",
"sonner": "^2.0.7",
"tailwind-merge": "^2.5.5",
"tailwind-merge": "^3.5.0",
"zod": "catalog:"
},
"devDependencies": {
"@types/node": "^22.15.33",
"@types/node": "^25.6.0",
"@types/react": "~19.1.10",
"@types/react-dom": "^19.1.6",
"postcss": "^8.5.6",
Expand Down
2 changes: 2 additions & 0 deletions apps/admin/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
"paths": {
"admin-app/*": ["./*"],
"@packrat/api/*": ["../../packages/api/src/*"],
"@packrat/guards": ["../../packages/guards/src"],
"@packrat/guards/*": ["../../packages/guards/src/*"],
"@packrat/web-ui": ["../../packages/web-ui/src"],
"@packrat/web-ui/*": ["../../packages/web-ui/src/*"]
}
Expand Down
2 changes: 1 addition & 1 deletion apps/expo/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export default (): ExpoConfig =>
{
name: getAppName(),
slug: 'packrat',
version: '2.0.23',
version: '2.0.24',
scheme: 'packrat',
web: {
bundler: 'metro',
Expand Down
28 changes: 17 additions & 11 deletions apps/expo/app/(app)/(tabs)/(home)/index.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
'use client';

import { assertIsString } from '@packrat/guards';
import { arrayIncludes, assertIsString, objectKeys } from '@packrat/guards';
import type { LargeTitleSearchBarMethods, ListDataItem } from '@packrat/ui/nativewindui';
import {
LargeTitleHeader,
List,
type ListRenderItemInfo,
ListSectionHeader,
} from '@packrat/ui/nativewindui';
import { AndroidTabBarInsetFix } from 'expo-app/components/AndroidTabBarInsetFix';
import { Icon } from 'expo-app/components/Icon';
import { LargeTitleHeaderSearchContentContainer } from 'expo-app/components/LargeTitleHeaderSearchContentContainer';
import TabScreen from 'expo-app/components/TabScreen';
import { appConfig, featureFlags } from 'expo-app/config';
import { AIChatTile } from 'expo-app/features/ai/components/AIChatTile';
import { ReportedContentTile } from 'expo-app/features/ai/components/ReportedContentTile';
Expand Down Expand Up @@ -154,7 +154,7 @@ const tileInfo = {
},
};

type TileName = keyof typeof tileInfo;
const TILE_NAMES = objectKeys(tileInfo);
const DASHBOARD_GAP_PREFIX = appConfig.dashboard.gapPrefix;

export default function DashboardScreen() {
Expand Down Expand Up @@ -217,8 +217,8 @@ export default function DashboardScreen() {

const searchLower = searchValue.toLowerCase();
return dashboardLayout.filter((item) => {
if (!item.startsWith(DASHBOARD_GAP_PREFIX)) {
const info = localizedTileInfo[item as TileName];
if (!item.startsWith(DASHBOARD_GAP_PREFIX) && arrayIncludes(TILE_NAMES, item)) {
const info = localizedTileInfo[item];
return (
info.title.toLowerCase().includes(searchLower) ||
info.keywords.some((k) => k.toLowerCase().includes(searchLower))
Expand All @@ -229,7 +229,7 @@ export default function DashboardScreen() {
}, [searchValue, dashboardLayout, localizedTileInfo]);

return (
<TabScreen>
<>
<LargeTitleHeader
title={t('dashboard.title')}
searchBar={{
Expand All @@ -245,8 +245,8 @@ export default function DashboardScreen() {
contentContainerClassName="gap-4 px-4 pb-4"
renderItem={({ item }) => {
assertIsString(item);
if (!item.startsWith(DASHBOARD_GAP_PREFIX)) {
const Component = tileInfo[item as TileName].component;
if (!item.startsWith(DASHBOARD_GAP_PREFIX) && arrayIncludes(TILE_NAMES, item)) {
const Component = tileInfo[item].component;
return (
<Pressable
key={item}
Expand Down Expand Up @@ -304,9 +304,14 @@ export default function DashboardScreen() {
renderItem={renderDashboardItem}
keyExtractor={keyExtractor}
sectionHeaderAsGap
ListFooterComponent={<View className="h-12" />}
ListFooterComponent={
<>
<View className="h-12" />
<AndroidTabBarInsetFix />
</>
}
/>
</TabScreen>
</>
);
}

Expand All @@ -317,7 +322,8 @@ function renderDashboardItem<T extends ListDataItem>(info: ListRenderItemInfo<T>
return <ListSectionHeader {...info} />;
}

const TileItem = tileInfo[item as TileName].component;
if (!arrayIncludes(TILE_NAMES, item)) return null;
const TileItem = tileInfo[item].component;
return (
<View
className={cn(
Expand Down
Loading
Loading