Commit graph

357 commits

Author SHA1 Message Date
jlightner
c6efec8363 feat: Split key moment card header into standalone h3 title and flex-ro…
- "frontend/src/pages/TechniquePage.tsx"
- "frontend/src/App.css"

GSD-Task: S03/T01
2026-03-30 08:55:48 +00:00
jlightner
aa71387ad5 feat: Added CSS grid layout splitting technique page into prose (left)…
- "frontend/src/App.css"
- "frontend/src/pages/TechniquePage.tsx"

GSD-Task: S02/T01
2026-03-30 08:47:55 +00:00
jlightner
26556ba03e feat: Built AdminPipeline.tsx page at /admin/pipeline with video table,…
- "frontend/src/pages/AdminPipeline.tsx"
- "frontend/src/api/public-client.ts"
- "frontend/src/App.tsx"
- "frontend/src/App.css"

GSD-Task: S01/T03
2026-03-30 08:35:11 +00:00
jlightner
b3d405bb84 fix: All five admin pipeline endpoints respond correctly — fix was ngin…
- "backend/routers/pipeline.py"

GSD-Task: S01/T02
2026-03-30 08:30:15 +00:00
jlightner
7aa33cd17f fix: Fixed syntax errors in pipeline event instrumentation — _emit_even…
- "backend/pipeline/stages.py"

GSD-Task: S01/T01
2026-03-30 08:27:53 +00:00
jlightner
b3204bece9 feat: Version switcher on technique pages — view historical snapshots with pipeline metadata
- Version dropdown appears when version_count > 0 (hidden until first re-run)
- Selecting a historical version overlays snapshot content (title, summary, body, chains, plugins)
- Key moments and related links always show live data (not versioned)
- Pipeline metadata block shows model, capture time, and prompt file hashes (truncated)
- Cyan banner when viewing historical version with "Back to current" button
- fetchTechniqueVersion API function for single version detail
2026-03-30 03:02:31 -05:00
jlightner
324e933670 feat: Content issue reporting — submit from technique pages, manage in admin reports page
- ContentReport model with generic content_type/content_id (supports any entity)
- Alembic migration 003: content_reports table with status + content indexes
- POST /reports (public), GET/PATCH /admin/reports (admin triage)
- Report modal on technique pages with issue type dropdown + description
- Admin reports page with status filter, expand/collapse detail, triage actions
- All CSS uses var(--*) tokens, dark theme consistent
2026-03-30 02:53:56 -05:00
jlightner
e08e8d021f fix: Creators page 422 — limit=200 exceeded API max of 100, also fix error display for Pydantic validation arrays 2026-03-30 02:37:37 -05:00
jlightner
ac45ce7313 chore: auto-commit after complete-milestone
GSD-Unit: M004
2026-03-30 07:27:40 +00:00
jlightner
8fb3f199dc feat: Added TypeScript version types, fetchTechniqueVersions function,…
- "frontend/src/api/public-client.ts"
- "frontend/src/pages/TechniquePage.tsx"

GSD-Task: S04/T03
2026-03-30 07:27:40 +00:00
jlightner
44fbbf030f test: Added version list/detail API endpoints, Pydantic schemas, versio…
- "backend/schemas.py"
- "backend/routers/techniques.py"
- "backend/tests/test_public_api.py"

GSD-Task: S04/T02
2026-03-30 07:27:40 +00:00
jlightner
5c3e9b83c8 feat: Added TechniquePageVersion model, Alembic migration 002, pipeline…
- "backend/models.py"
- "alembic/versions/002_technique_page_versions.py"
- "backend/pipeline/stages.py"

GSD-Task: S04/T01
2026-03-30 07:27:40 +00:00
jlightner
37426aae77 feat: Redesigned technique page frontend: meta stats line, video filena…
- "frontend/src/api/public-client.ts"
- "frontend/src/pages/TechniquePage.tsx"
- "frontend/src/App.css"

GSD-Task: S03/T02
2026-03-30 07:27:40 +00:00
jlightner
f99ac1b8b9 prompts: Rewrite all four pipeline stage prompts for quality and domain awareness
- Stage 2: Add domain context, granularity guidance, unstructured content handling
- Stage 3: Add extract/skip framework, summary quality standards, fewer-richer directive
- Stage 4: Add production-session classification principles, ambiguity resolution examples
- Stage 5: Add voice/tone guidance, anti-generic section names, signal chain detail, anti-filler rules

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 07:27:35 +00:00
jlightner
39006ca5b6 feat: redesign technique page - meta stats, video filenames, monospace signal chains 2026-03-30 06:54:11 +00:00
jlightner
0c4162a777 feat: Added video_filename field to KeyMomentSummary schema and populat…
- "backend/schemas.py"
- "backend/routers/techniques.py"

GSD-Task: S03/T01
2026-03-30 06:50:01 +00:00
jlightner
c575e76861 fix: Added overflow-x:hidden to html/body, fixed mobile overflow on mod…
- "frontend/src/App.css"
- "frontend/index.html"

GSD-Task: S02/T02
2026-03-30 06:40:58 +00:00
jlightner
893105abd0 feat: Replaced all 193 hex colors and 24 rgba values in App.css with 77…
- "frontend/src/App.css"

GSD-Task: S02/T01
2026-03-30 06:37:08 +00:00
jlightner
76138887d2 fix: Creators endpoint returns paginated response, review queue limit raised to 1000, added GET /review/moments/{id} endpoint
- Creators: response_model changed from list to {items, total, offset, limit} matching frontend CreatorBrowseResponse
- Review queue: limit raised from 100 to 1000
- New GET /review/moments/{moment_id} endpoint for direct moment fetch
- MomentDetail uses fetchMoment instead of fetching full queue
- Merge candidates fetch uses limit=100
2026-03-30 01:26:12 -05:00
jlightner
0b0ca598b4 feat: Log LLM response token usage (prompt/completion/total, content_len, finish_reason) 2026-03-30 06:15:24 +00:00
jlightner
17347da87e feat: Switch to FYN-LLM-Agent models — chat for stages 2/4, think for stages 3/5 2026-03-30 05:42:27 +00:00
jlightner
dfaf0481fe fix: Reduce Celery worker concurrency from 2 to 1 — concurrent LLM requests cause empty responses
Qwen 3.5 397B (quantized) returns empty content when handling two large-context
extraction requests simultaneously, likely due to vLLM memory pressure. Sequential
processing eliminates this failure mode.
2026-03-30 05:37:21 +00:00
jlightner
f67e676264 fix: Bump max_tokens to 65536 (model supports 94K context, extraction needs headroom) 2026-03-30 04:57:44 +00:00
jlightner
6fb497d03a chore: Bump LLM max_tokens to 32768, commit M002/M003 GSD artifacts
- max_tokens bumped from 16384 to 32768 (extraction responses still hitting limits)
- All GSD planning/completion artifacts for M002 (deployment) and M003 (DNS + LLM routing)
- KNOWLEDGE.md updated with XPLTD domain setup flow and container healthcheck patterns
- DECISIONS.md updated with D015 (subnet) and D016 (Ollama for embeddings)
2026-03-30 04:22:45 +00:00
jlightner
cf759f3739 fix: Add max_tokens=16384 to LLM requests (OpenWebUI defaults to 1000, truncating pipeline JSON) 2026-03-30 04:08:29 +00:00
jlightner
8e96fae64f fix: Set PROMPTS_PATH=/prompts in API and worker containers 2026-03-30 03:46:46 +00:00
jlightner
4aa4b08a7f feat: Per-stage LLM model routing with thinking modality and think-tag stripping
- Added 8 per-stage config fields: llm_stage{2-5}_model and llm_stage{2-5}_modality
- LLMClient.complete() accepts modality ('chat'/'thinking') and model_override
- Thinking modality: appends JSON instructions to system prompt, strips <think> tags
- strip_think_tags() handles multiline, multiple blocks, and edge cases
- Pipeline stages 2-5 read per-stage config and pass to LLM client
- Updated .env.example with per-stage model/modality documentation
- All 59 tests pass including new think-tag stripping test
2026-03-30 02:12:14 +00:00
jlightner
9fdef3b720 docs: Added CLAUDE.md redirect to ub01 canonical path, updated README with deployment section 2026-03-30 01:28:26 +00:00
jlightner
541354d89e fix: Worker healthcheck uses celery inspect ping instead of HTTP (no web server) 2026-03-30 01:25:24 +00:00
jlightner
1b4b803f6b fix: web healthcheck uses curl instead of wget (busybox wget fails) 2026-03-30 01:24:05 +00:00
jlightner
b49326147f fix: alembic env.py sys.path includes parent dir for Docker compatibility 2026-03-30 01:22:30 +00:00
jlightner
8dc4e9137d fix: Include alembic.ini and alembic/ in API Docker image for migrations 2026-03-30 01:21:41 +00:00
jlightner
7256fe7667 fix: Qdrant healthcheck uses bash /dev/tcp (no wget/curl in image) 2026-03-30 01:20:14 +00:00
jlightner
7c79574a25 fix: Ollama healthcheck uses 'ollama list' instead of curl (not in image) 2026-03-30 01:17:06 +00:00
jlightner
c295384c6a fix: Corrected compose subnet to 172.32.0.0/24, added Qdrant + Ollama services, web on port 8096
- Changed network subnet from 172.24.0.0/24 (used by xpltd_docs) to 172.32.0.0/24
- Added chrysopedia-qdrant (qdrant/qdrant:v1.13.2) with healthcheck
- Added chrysopedia-ollama for embedding model (nomic-embed-text)
- Web UI exposed on 0.0.0.0:8096 (XPLTD port-suffix convention)
- API internal-only (via nginx proxy)
- Added HEALTHCHECK to Dockerfile.api
- Updated .env.example with FYN DGX LLM endpoint
2026-03-30 00:54:18 +00:00
jlightner
3b01bd94ab chore: auto-commit after complete-milestone
GSD-Unit: M001
2026-03-30 00:29:45 +00:00
jlightner
07e85e95d2 feat: Built CreatorsBrowse (randomized default sort, genre filter, name…
- "frontend/src/pages/CreatorsBrowse.tsx"
- "frontend/src/pages/CreatorDetail.tsx"
- "frontend/src/pages/TopicsBrowse.tsx"
- "frontend/src/App.tsx"
- "frontend/src/App.css"
- "frontend/src/api/public-client.ts"

GSD-Task: S05/T04
2026-03-30 00:13:11 +00:00
jlightner
3a7f10005b feat: Built frontend search flow: typed public API client, landing page…
- "frontend/src/api/public-client.ts"
- "frontend/src/pages/Home.tsx"
- "frontend/src/pages/SearchResults.tsx"
- "frontend/src/pages/TechniquePage.tsx"
- "frontend/src/App.tsx"
- "frontend/src/App.css"

GSD-Task: S05/T03
2026-03-30 00:09:08 +00:00
jlightner
5b8be50994 test: Added 18 integration tests for search and public API endpoints (t…
- "backend/tests/test_search.py"
- "backend/tests/test_public_api.py"

GSD-Task: S05/T02
2026-03-30 00:01:32 +00:00
jlightner
c0df369018 feat: Created async search service with embedding+Qdrant+keyword fallba…
- "backend/search_service.py"
- "backend/schemas.py"
- "backend/routers/search.py"
- "backend/routers/techniques.py"
- "backend/routers/topics.py"
- "backend/routers/creators.py"
- "backend/main.py"

GSD-Task: S05/T01
2026-03-29 23:55:52 +00:00
jlightner
2cb0f9c381 feat: Built complete admin review queue UI: queue list page with stats…
- "frontend/src/pages/ReviewQueue.tsx"
- "frontend/src/pages/MomentDetail.tsx"
- "frontend/src/components/StatusBadge.tsx"
- "frontend/src/components/ModeToggle.tsx"
- "frontend/src/App.tsx"
- "frontend/src/App.css"

GSD-Task: S04/T03
2026-03-29 23:29:01 +00:00
jlightner
5542ae455f feat: Bootstrapped React + Vite + TypeScript frontend with typed API cl…
- "frontend/package.json"
- "frontend/vite.config.ts"
- "frontend/tsconfig.json"
- "frontend/tsconfig.app.json"
- "frontend/index.html"
- "frontend/src/main.tsx"
- "frontend/src/App.tsx"
- "frontend/src/App.css"

GSD-Task: S04/T02
2026-03-29 23:21:53 +00:00
jlightner
c2edba952c test: Built 9 review queue API endpoints (queue, stats, approve, reject…
- "backend/routers/review.py"
- "backend/schemas.py"
- "backend/redis_client.py"
- "backend/main.py"
- "backend/tests/test_review.py"

GSD-Task: S04/T01
2026-03-29 23:13:43 +00:00
jlightner
2cb10b5db8 test: Added 10 integration tests covering pipeline stages 2-6, trigger…
- "backend/tests/test_pipeline.py"
- "backend/tests/fixtures/mock_llm_responses.py"
- "backend/tests/conftest.py"

GSD-Task: S03/T05
2026-03-29 22:51:26 +00:00
jlightner
910e945d9c feat: Wired automatic run_pipeline.delay() dispatch after ingest commit…
- "backend/routers/pipeline.py"
- "backend/routers/ingest.py"
- "backend/main.py"

GSD-Task: S03/T04
2026-03-29 22:41:02 +00:00
jlightner
5c46d1e922 feat: Created sync EmbeddingClient, QdrantManager with idempotent colle…
- "backend/pipeline/embedding_client.py"
- "backend/pipeline/qdrant_client.py"
- "backend/pipeline/stages.py"

GSD-Task: S03/T03
2026-03-29 22:39:04 +00:00
jlightner
b5635a09db feat: Created 4 prompt templates and implemented 5 Celery tasks (stages…
- "prompts/stage2_segmentation.txt"
- "prompts/stage3_extraction.txt"
- "prompts/stage4_classification.txt"
- "prompts/stage5_synthesis.txt"
- "backend/pipeline/stages.py"
- "backend/requirements.txt"

GSD-Task: S03/T02
2026-03-29 22:36:06 +00:00
jlightner
12cc86aef9 chore: Extended Settings with 12 LLM/embedding/Qdrant config fields, cr…
- "backend/config.py"
- "backend/worker.py"
- "backend/pipeline/schemas.py"
- "backend/pipeline/llm_client.py"
- "backend/requirements.txt"
- "backend/pipeline/__init__.py"
- "backend/pipeline/stages.py"

GSD-Task: S03/T01
2026-03-29 22:30:31 +00:00
jlightner
bef8d95e64 test: Added 6 integration tests proving ingestion, creator auto-detecti…
- "backend/tests/conftest.py"
- "backend/tests/test_ingest.py"
- "backend/tests/fixtures/sample_transcript.json"
- "backend/pytest.ini"
- "backend/requirements.txt"
- "backend/models.py"

GSD-Task: S02/T02
2026-03-29 22:16:15 +00:00
jlightner
5bfeb50716 feat: Created POST /api/v1/ingest endpoint that accepts Whisper transcr…
- "backend/routers/ingest.py"
- "backend/schemas.py"
- "backend/requirements.txt"
- "backend/main.py"

GSD-Task: S02/T01
2026-03-29 22:09:46 +00:00