Commit Graph

541 Commits

Author SHA1 Message Date
39ef9cc433 feat(25-01): add attribution columns and unique constraint to globalItems
- Add sourceUrl, imageCredit, imageSourceUrl nullable columns
- Add unique constraint on (brand, model) pair
- Generate migration 0003_loving_serpent_society.sql
2026-04-10 10:55:55 +02:00
b6970c9a04 fix(25): revise plans based on checker feedback 2026-04-10 10:51:30 +02:00
d9d9532399 docs(25): create phase plan for catalog enrichment and agent tools 2026-04-10 10:45:22 +02:00
6c0c31350e docs(phase-25): add validation strategy 2026-04-10 10:39:10 +02:00
bc2a532238 docs(25): research catalog enrichment and agent tools phase 2026-04-10 10:38:26 +02:00
e805269485 docs(state): record phase 25 context session 2026-04-10 10:33:15 +02:00
56bea00e61 docs(25): capture phase context 2026-04-10 10:33:06 +02:00
e7a9cdb71a docs(phase-24): evolve PROJECT.md after phase completion 2026-04-10 10:18:03 +02:00
a28ff90b35 docs(phase-24): complete phase execution 2026-04-10 10:17:40 +02:00
e1afd542ac fix(24): add withImageUrls to public setup endpoint
Public setup view was missing image URL enrichment, causing item images
to be absent for anonymous visitors. Matches the private endpoint pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 10:17:32 +02:00
9177296223 docs(24-02): complete public access client layer plan
- SUMMARY.md created for 24-02 (auth prompt modal, render-first root, public setup viewing)
- STATE.md updated: plan advanced, progress 100%, decisions recorded
- ROADMAP.md updated: phase 24 complete (2/2 plans with SUMMARYs)
- REQUIREMENTS.md: PUBL-01 through PUBL-05 marked complete
2026-04-10 10:11:17 +02:00
7b0efae0c4 feat(24-02): render-first root layout, guarded write actions, public setup viewing
- Remove authLoading spinner gate — app renders immediately for all visitors
- Expand isPublicRoute to include /, /global-items/*, /setups/*, /users/, /login
- Replace hard window.location.href redirect with soft navigate() after auth resolves
- Remove onboarding loading spinner — pass isAuthenticated as enabled to guard query
- Add AuthPromptModal to root JSX for global availability
- Guard Add to Collection and Add to Thread buttons with isAuthenticated check
- Rework setup detail page to use usePublicSetup for anonymous visitors
- Wrap all write action UI (Add Items, Delete, Public toggle, remove/classify) in isAuthenticated guards
2026-04-10 10:09:41 +02:00
50f9629707 docs(24-01): complete rate limiter factory and tiered public endpoint limits plan
- Add 24-01-SUMMARY.md with execution results
- Advance plan counter to 2/2
- Update progress to 50% (1 of 2 plans complete)
- Mark INFR-01 requirement complete
- Add factory pattern and tier decisions to STATE.md
2026-04-10 10:08:50 +02:00
5619016e41 feat(24-01): apply tiered rate limits to public GET endpoints
- Import createRateLimit in server index
- Create browseTier (120 req/min) for list/search endpoints
- Create detailTier (60 req/min) for individual resource endpoints
- Apply browseTier to /api/global-items and /api/tags GET routes
- Apply detailTier to /api/global-items/:id, /api/setups/:id/public, /api/users/:id/profile GET routes
- Rate limits placed before auth middleware per D-07, D-08
2026-04-10 10:07:38 +02:00
cd85715d05 feat(24-02): add auth prompt state, modal, usePublicSetup hook, guard onboarding
- Extend uiStore with showAuthPrompt/openAuthPrompt/closeAuthPrompt state
- Create AuthPromptModal component with sign in/sign up CTAs pointing to /login
- Add usePublicSetup hook to useSetups for anonymous setup viewing via public API
- Rework useOnboardingComplete to accept enabled param (guards auth-gated call)
2026-04-10 10:06:59 +02:00
afab8175f9 feat(24-01): refactor rateLimit to factory pattern with createRateLimit
- Add createRateLimit(maxAttempts, windowMs) factory function
- Rewrite rateLimit export to delegate to factory (backward compatible)
- Keep shared store, getClientIp, cleanup, and _resetForTesting unchanged
- Add createRateLimit factory test suite with 5 test cases
- All existing rateLimit middleware tests still pass
2026-04-10 10:06:19 +02:00
08ff7d59bf docs(24): create phase plan 2026-04-10 10:02:35 +02:00
2a8a479012 docs(24): add validation strategy 2026-04-10 09:57:52 +02:00
2a55b282cb docs(24): research public access and infrastructure phase 2026-04-10 09:57:11 +02:00
01373260bd Graphify output
All checks were successful
CI / ci (push) Successful in 1m17s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s
2026-04-09 15:18:36 +02:00
87ad09167d docs(state): record phase 24 context session 2026-04-09 15:13:42 +02:00
a2d435bbeb docs(24): capture phase context 2026-04-09 15:13:34 +02:00
9a69671718 docs: create milestone v2.1 roadmap (3 phases) 2026-04-09 14:53:25 +02:00
8acb155cf1 docs: define milestone v2.1 requirements 2026-04-09 14:48:31 +02:00
c4ad5c1b2a docs: complete project research 2026-04-09 14:44:12 +02:00
f9c69a1366 docs: start milestone v2.1 Public Discovery 2026-04-09 14:33:19 +02:00
f564e8cb54 docs: archive v1.3 and v2.0 milestones with roadmap, requirements, and retrospective
All checks were successful
CI / ci (push) Successful in 1m7s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 7s
2026-04-08 23:10:50 +02:00
cc0bafe754 docs: mark phase 13 and v1.3 milestone as complete 2026-04-08 22:57:26 +02:00
9054938d88 docs: add backlog item 999.3 — public access auth model 2026-04-08 22:54:21 +02:00
8b8a8868d1 docs: add backlog item 999.2 — revamp onboarding flow 2026-04-08 22:53:23 +02:00
570be6fcc1 fix: prevent crash on login when user has no active threads
All checks were successful
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 13s
activeThreads[0].id in useEffect dependency array threw when the array
was empty. Use optional chaining to safely handle the empty case.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:48:29 +02:00
a153b3c199 ci: pass Coolify token via env var to avoid pipe character shell issue
All checks were successful
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 8s
The | in Laravel Sanctum tokens gets interpreted as a shell pipe when
injected inline. Using env vars ensures proper quoting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:38:05 +02:00
b9c3bf5b5f fix: update auth test to expect numeric user ID from /me endpoint
All checks were successful
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 13s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:34:07 +02:00
eca733193d ci: use Coolify webhook URL from variable with auth header
Some checks failed
CI / ci (push) Failing after 59s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
Set COOLIFY_WEBHOOK variable to the full deploy URL from Coolify.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:31:45 +02:00
7c513257ec ci: use Gitea variables for Coolify URL and app UUID
Some checks failed
CI / deploy (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / ci (push) Has been cancelled
Move hardcoded values to repo variables:
- COOLIFY_URL: Coolify instance base URL
- COOLIFY_APP_UUID: application UUID to deploy

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:31:20 +02:00
eaf9ad80b5 ci: use Coolify API with auth token for deploy trigger
Some checks failed
CI / ci (push) Failing after 1m1s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
Replace simple webhook GET with authenticated POST to Coolify deploy API.
Requires COOLIFY_TOKEN secret in Gitea with deploy permissions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:28:44 +02:00
e7caa40104 ci: restore Coolify webhook trigger after Docker image push
Some checks failed
CI / deploy (push) Has been cancelled
CI / e2e (push) Has been cancelled
CI / ci (push) Has been cancelled
Gitea's built-in webhook wasn't triggering Coolify deploys reliably.
Restore the explicit curl call to COOLIFY_WEBHOOK after image push.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:28:10 +02:00
3b29248845 fix: return database user ID from /api/auth/me instead of Logto sub
Some checks failed
CI / ci (push) Failing after 1m8s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
The /me endpoint was returning auth.sub (Logto's opaque string) as the
user ID, but the frontend and other API endpoints expect numeric DB IDs.
This caused "can't access property 'id', w[0] is undefined" after login.

Also documents Logto OIDC setup requirements (scopes, env vars) in
CLAUDE.md.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 22:16:59 +02:00
9dca657ab1 fix: add OIDC startup diagnostic and fix HTTPException handling
All checks were successful
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 25s
The @hono/oidc-auth middleware catches all errors and rethrows as
"Invalid session", hiding the real cause. This adds a startup probe
to OIDC discovery endpoint so the actual error appears in logs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:33:59 +02:00
e63b3876c1 ci: restore deploy job, remove only Coolify webhook step
All checks were successful
CI / deploy (push) Successful in 14s
CI / ci (push) Successful in 1m6s
CI / e2e (push) Has been skipped
Deployment trigger is now handled by Gitea webhooks. The Docker
build+push step stays so the image is available in the registry.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:17:33 +02:00
1858a3970e fix: exclude graphify-out from Biome linting
All checks were successful
CI / ci (push) Successful in 59s
CI / e2e (push) Has been skipped
Generated HTML and JSON in graphify-out/ was triggering lint errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:16:07 +02:00
fbb61f37f2 ci: remove deploy job from CI pipeline
Some checks failed
CI / ci (push) Failing after 47s
CI / e2e (push) Has been skipped
Deployment is now handled by Gitea webhooks triggering Coolify
directly, replacing the manual Docker build + webhook approach.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:14:25 +02:00
646fcd558a chore: add graphify knowledge graph outputs
Some checks failed
CI / ci (push) Failing after 54s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
Add generated knowledge graph (538 nodes, 664 edges) for codebase
navigation. Outputs are committed for portability across devices;
cache and cost tracking are gitignored.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 21:05:57 +02:00
620c6598cf ci: add registry-based layer caching for Docker builds
Some checks failed
CI / ci (push) Successful in 1m10s
CI / e2e (push) Has been skipped
CI / deploy (push) Failing after 6s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:41:33 +02:00
99192fe32f ci: switch from legacy docker build to buildx
Some checks failed
CI / ci (push) Successful in 1m6s
CI / e2e (push) Has been skipped
CI / deploy (push) Failing after 1m14s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:38:06 +02:00
2c438466a4 chore: remove better-sqlite3 (unused since Postgres migration)
Some checks failed
CI / ci (push) Successful in 1m4s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:33:48 +02:00
be1197f3da fix: lint formatting in storage test
Some checks failed
CI / ci (push) Successful in 1m7s
CI / e2e (push) Has been skipped
CI / deploy (push) Failing after 11s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:31:39 +02:00
d519a83cc4 infra: migrate deployment to Coolify with Garage S3
Some checks failed
CI / ci (push) Failing after 19s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
- Remove docker-compose files (Coolify manages services individually)
- Replace MinIO with Garage (S3-compatible, actively maintained)
- Add CI deploy job: build+push :develop image on every green Develop push
- Add Coolify webhook trigger for automatic redeployment
- Update README, .env.example, and storage references
- Rename migrate script to provider-agnostic name

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:28:43 +02:00
41e58d0153 wip: in-progress feature work (manual entry, collection view)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:28:34 +02:00
bd023acdd2 docs: add backlog item 999.1 — rewrite E2E tests for OIDC auth 2026-04-06 21:11:45 +02:00