Commit graph

326 commits

Author SHA1 Message Date
Marko Djordjevic
73f44bf447 Add data migration script for user-accounts (task 2.5)
Create scripts/migrate-users.ts that:
- Creates a default admin user from DEFAULT_ADMIN_EMAIL/DEFAULT_ADMIN_PASSWORD env vars
- Backfills user_id on all existing rows in charts, annotations, annotation_types,
  span_annotations, span_label_types
- Is idempotent (safe to run multiple times)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 09:51:23 +01:00
Marko Djordjevic
877ae032a1 Mark task 2.4 as complete: Generate Drizzle migration 2026-02-20 09:50:14 +01:00
Marko Djordjevic
f4225d0334 Generate Drizzle migration with user accounts schema changes 2026-02-20 09:50:08 +01:00
Marko Djordjevic
b633a3f52a Task 2.3: Replace single-column unique constraints with composite (user_id, name) unique indexes
- charts.name → uniqueIndex('charts_user_id_name_unique').on(user_id, name)
- annotation_types.name → uniqueIndex('annotation_types_user_id_name_unique').on(user_id, name)
- span_label_types.name → uniqueIndex('span_label_types_user_id_name_unique').on(user_id, name)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 09:48:50 +01:00
Marko Djordjevic
0cd74ebedd Mark task 2.2 complete in user-accounts tasks.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 09:47:41 +01:00
Marko Djordjevic
633a76876f Add user_id FK column to charts, annotations, annotation_types, span_annotations, span_label_types
Adds nullable uuid user_id column referencing users.id to each of the 5
data tables. Column is nullable for now to allow the data migration
script (task 2.5) to backfill existing rows before enforcing NOT NULL.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 09:47:30 +01:00
Marko Djordjevic
9101cfb7af Add users table to Drizzle schema (task 2.1)
Adds the `users` table to `src/lib/db/schema.ts` with:
- UUID primary key (defaultRandom)
- email (unique, not null)
- password_hash (nullable, for OAuth-only users)
- name, image (nullable)
- provider (default 'credentials'), provider_account_id (nullable)
- email_verified (timestamp, nullable)
- created_at, updated_at

Marks task 2.1 as complete in tasks.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 09:46:20 +01:00
Marko Djordjevic
d05ed21cd6 Task 1.3: Update docker-compose.yml to pass new auth environment variables
Add AUTH_SECRET, AUTH_GOOGLE_ID, AUTH_GOOGLE_SECRET, AUTH_TRUST_HOST,
DEFAULT_ADMIN_EMAIL, and DEFAULT_ADMIN_PASSWORD environment variables to
the candle-annotator service in docker-compose.yml.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 09:45:12 +01:00
Marko Djordjevic
7ba1380cc7 Add authentication environment variables to .env.example
Added AUTH_SECRET, AUTH_GOOGLE_ID, AUTH_GOOGLE_SECRET, AUTH_TRUST_HOST, DEFAULT_ADMIN_EMAIL, and DEFAULT_ADMIN_PASSWORD environment variables with helpful comments and placeholder values for Auth.js v5 and Google OAuth setup.

Marked task 1.2 as complete in tasks.md.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 09:44:25 +01:00
Marko Djordjevic
973662739a Install authentication dependencies: next-auth@5, bcryptjs, @types/bcryptjs
Add required npm packages for user authentication implementation:
- next-auth@5.0.0-beta.30: Next.js authentication library
- bcryptjs@3.0.3: Password hashing library
- @types/bcryptjs@2.4.6: TypeScript types for bcryptjs

Mark task 1.1 as complete.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 09:43:45 +01:00
Marko Djordjevic
3c39690f4a Assign per-task model tags in user-accounts tasks.md
Replace section-level model tags with individual task-level tags.
Haiku for mechanical/config/boilerplate, sonnet for standard feature
work, opus for 2.5 (data migration backfill) and 7.2 (user_id query
permeation across all routes).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 08:59:17 +01:00
Marko Djordjevic
925e7284e3 Archive code-review-fix change and sync specs to main
- Synced 14 capability delta specs to main specs
- Created 6 new main specs: api-authentication, error-boundary, input-validation, security-headers, shared-types
- Updated 8 existing specs with security, validation, and performance requirements
- Archived change to openspec/changes/archive/2026-02-20-code-review-fix/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-20 08:54:59 +01:00
Marko Djordjevic
adb93a2d2e update gitingore for models dir 2026-02-19 00:01:22 +01:00
Marko Djordjevic
26f2c44509 Fix XGBoost label encoding and single-class guard 2026-02-18 23:58:24 +01:00
Marko Djordjevic
73c10a4156 Fix inference feature mismatch with training metadata 2026-02-18 23:53:38 +01:00
Marko Djordjevic
328476a581 Fix predict proxy schema and error messages 2026-02-18 23:38:17 +01:00
Marko Djordjevic
508d267078 Handle no-model 503 as online 2026-02-18 23:34:00 +01:00
Marko Djordjevic
07064fbf40 fix(training): use selected chart and include TA-Lib span sources 2026-02-18 23:21:23 +01:00
Marko Djordjevic
3448c6febd fix(auth): allow same-origin browser requests through API middleware 2026-02-18 23:07:42 +01:00
Marko Djordjevic
d6b980a3ca add API KEY var to docker compose 2026-02-18 22:55:46 +01:00
Marko Djordjevic
e446e3e563 Fix ml-service volume permissions 2026-02-18 22:50:36 +01:00
Marko Djordjevic
7af1c75c56 fix deployment folder permisions 2026-02-18 22:50:36 +01:00
Marko Djordjevic
86a8cc66b6 fix deployment folder permisions 2026-02-18 22:34:23 +01:00
Marko Djordjevic
385e7944b7 update github action for deploy 2026-02-18 22:15:00 +01:00
Marko Djordjevic
9ba4736dce fix: install prod node_modules in Docker final stage for migration script 2026-02-18 22:11:51 +01:00
Marko Djordjevic
996caf342f deployment script 2026-02-18 21:49:14 +01:00
Marko Djordjevic
11cf414489 test deployment 2 2026-02-18 21:44:05 +01:00
Marko Djordjevic
16123d385a test deployment 2026-02-18 21:42:42 +01:00
Marko Djordjevic
1b5f278685 fix: replace TA-Lib source build with prebuilt .deb v0.6.4 in ML Dockerfile 2026-02-18 21:30:23 +01:00
Marko Djordjevic
06fd19eebb fix: add DATABASE_URL to ML service .env, gitignore it 2026-02-18 21:19:36 +01:00
Marko Djordjevic
685b8e9733 fix: rename exported function from middleware to proxy in proxy.ts 2026-02-18 21:16:09 +01:00
Marko Djordjevic
522c2f269d fix: rename middleware.ts to proxy.ts (deprecated convention) 2026-02-18 21:14:42 +01:00
Marko Djordjevic
25c959fd18 code-review-fix task 15.4: mark task 15.4 as done in tasks.md 2026-02-18 20:58:53 +01:00
Marko Djordjevic
49daaae36a code-review-fix task 15.4: add missing fallback return for volume indicators in talib_features.py 2026-02-18 20:58:47 +01:00
Marko Djordjevic
09a361ca54 code-review-fix task 15.3: mark task 15.3 as done in tasks.md 2026-02-18 20:58:18 +01:00
Marko Djordjevic
059c436717 code-review-fix task 15.3: replace datetime.utcnow() with datetime.now(timezone.utc) in main.py 2026-02-18 20:58:11 +01:00
Marko Djordjevic
9c08ffc44d code-review-fix task 15.2: mark task 15.2 as done in tasks.md 2026-02-18 20:57:44 +01:00
Marko Djordjevic
a03c9bc17b code-review-fix task 15.2: replace declarative_base() with class Base(DeclarativeBase) in db.py 2026-02-18 20:57:37 +01:00
Marko Djordjevic
728c7e4d82 code-review-fix task 15.1: mark task 15.1 as done in tasks.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 20:57:13 +01:00
Marko Djordjevic
41287b20c6 code-review-fix task 15.1: replace @app.on_event startup with FastAPI lifespan pattern in main.py
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-18 20:57:06 +01:00
Marko Djordjevic
21c855db89 code-review-fix task 14.5: mark task 14.5 as done in tasks.md 2026-02-18 20:55:21 +01:00
Marko Djordjevic
f529ada877 code-review-fix task 14.5: remove duplicate TALIB_PATTERNS dict and import from single source 2026-02-18 20:55:14 +01:00
Marko Djordjevic
d4c14df284 code-review-fix task 14.4: mark task 14.4 as done in tasks.md 2026-02-18 20:48:44 +01:00
Marko Djordjevic
346954bcee code-review-fix task 14.4: fix inconsistent uuid_lib import to standard import uuid in main.py 2026-02-18 20:48:38 +01:00
Marko Djordjevic
3e4d4bd7ae code-review-fix task 14.3: mark task 14.3 as done in tasks.md 2026-02-18 20:48:14 +01:00
Marko Djordjevic
d42b4827ca code-review-fix task 14.3: remove dead inference package reference from pyproject.toml 2026-02-18 20:48:10 +01:00
Marko Djordjevic
4081a566b5 code-review-fix task 14.2: mark task 14.2 as done in tasks.md 2026-02-18 20:47:51 +01:00
Marko Djordjevic
8d9a86efb4 code-review-fix task 14.2: remove dead get_db_session function from db.py 2026-02-18 20:47:44 +01:00
Marko Djordjevic
c9c63aafa3 code-review-fix task 14.1: mark task 14.1 as done in tasks.md 2026-02-18 20:47:17 +01:00
Marko Djordjevic
bf9a475b89 code-review-fix task 13.3: mark task 13.3 as done in tasks.md 2026-02-18 20:46:37 +01:00