docs(readme): refresh for the agentic upload refactor - #68

Merged
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh
May 4, 2026
Merged

docs(readme): refresh for the agentic upload refactor#68
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented May 4, 2026

Copy link
Copy Markdown
Member

Summary

  • Bring the README up to date with the agentic upload pipeline that landed in PR re-architecture: agentic document upload + AES-256-GCM column encryption + dev-context vault #67 and the 15 MB → 100 MB upload-cap bump (commit 9912a25).
  • Document the new SSE upload route and event vocabulary, the X-Request-ID idempotency contract, and the post-merge migration.
  • Surface the dev-context vault: ADR index 0001-0012, docs/attempts/, .claude/ slash commands, the context-curator subagent.
  • Add a new env-vars block for LOGFIRE_TOKEN, SAPLING_MODEL_*, OCR_ASYNC_ENABLED, and the optional DBOS pair.
  • Add a Tests section with the canonical pytest / vitest / eval-replay commands.

No code changes — docs only. README went from 203 → 284 lines (+88 / -6).

What's accurate now

  • Tech Stack: Pydantic AI agents, per-task model routing, Logfire (with PII scrubber), sse-starlette streaming, Vitest + jsdom on the frontend.
  • Document Library feature: 100 MB cap, live progress UX.
  • Documents API: /upload (SSE) vs /upload/sync (JSON), full event list, idempotency on X-Request-ID, the two scan-concepts endpoints that were already in code.
  • Environment: every env var the new code paths read, with a note on each one's purpose and default.
  • Migrations: the documents.request_id ALTER inline so a fresh deployment knows exactly what to run.
  • Architecture & Dev Context: link to `docs/architecture.md`, full ADR index, slash commands.

Test plan

  • Markdown renders correctly (links resolve, tables align)
  • No code changes — backend/frontend unchanged
  • Reviewer skim for tone / accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for document ingestion workflow, including streaming upload progress phases and manual concept-note rescanning
    • Updated API reference with new synchronous upload and concept-scan endpoints
    • Expanded configuration documentation for backend environment variables and observability features
    • Added architecture context and testing documentation sections

Brings the README up to date with what landed in PR #67 (the
re-architecture branch) and the post-merge upload-cap bump.
Tech Stack
- Notes the Pydantic AI agentic pipeline (4 typed worker agents
fanned out via asyncio.gather), per-task model routing with
SAPLING_MODEL_<TASK> env overrides, and which agent uses which
Gemini model by default.
- Adds Logfire as the observability layer, including the custom
span scrubber that truncates + SHA-256-fingerprints user-content
attribute paths before egress.
- Notes sse-starlette for the streaming /upload route and the
per-request structured logging (correlation ID, status, duration).
- Calls out Vitest with jsdom + RTL on the frontend.
Document Library feature
- New 100 MB upload cap (was 15 MB; commit 9912a25).
- Live SSE progress UX: "Classifying..." → "Extracting..." → "Saved."
API Endpoints — Documents
- Splits into POST /upload (streaming SSE) and POST /upload/sync
(non-streaming JSON), with the full SSE event vocabulary
(status:start, progress:classify, progress:classified,
progress:extract, progress:extracted, progress:graph_update,
progress:graph_updated, result:finalize, status:done,
error:fallback, error:failed).
- Documents the X-Request-ID idempotency contract.
- Adds the two scan-concepts endpoints that were already in the
code but not in the README.
Environment Variables
- LOGFIRE_TOKEN (optional)
- SAPLING_MODEL_CLASSIFIER / _SUMMARY / _CONCEPTS / _SYLLABUS
- OCR_ASYNC_ENABLED feature flag
- DBOS_ENABLED + DBOS_DATABASE_URL (durable-execution opt-in)
New sections
- Tests: backend pytest commands, frontend Vitest commands,
evals replay/record/live modes with the SAPLING_EVAL_MODE env var.
- Architecture & Dev Context: pointer to docs/architecture.md, full
ADR index (0001-0012), docs/attempts/, the .claude/ slash commands,
and the context-curator subagent.
- Migrations: the documents.request_id ALTER inline so anyone
bringing up a fresh environment knows what needs to run.
No code changes; docs only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 4, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The README was comprehensively expanded to document the streaming document-upload flow with SSE progress phases, detailed tech stack architecture (Pydantic AI agents, SSE streaming, Logfire observability, OCR fallbacks), refined API endpoint specifications including new concept-scanning endpoints, backend environment variables, testing modes, architectural context links, and a required database migration for request-ID deduplication.

Changes

Documentation Expansion

Layer / File(s)Summary
Feature & Capability Overview
README.md (lines 28–30, 41–46)
Document Library feature now describes streaming SSE upload phases, extracted outputs (summaries, concept notes, flashcard topics), and manual re-scanning. Tech Stack section expanded to detail frontend/backend stacks, Pydantic AI typed worker agents, model routing via env vars, and OCR pipeline.
API Endpoint Specification
README.md (lines 124–130)
Documents API section rewritten to detail streaming POST /api/documents/upload lifecycle (SSE event names, error/fallback behavior, X-Request-ID idempotency), addition of POST /api/documents/upload/sync, and new concept-scan endpoints for stored documents and course graphs.
Environment & Configuration
README.md (lines 197–204)
Backend .env documentation extended with Logfire token, per-task model override vars (SAPLING_MODEL_*), OCR async flag, and DBOS durable execution config.
Testing & Architecture Context
README.md (lines 213–241, 242–265)
Added Tests section documenting pytest/Vitest/eval invocation with replay/record/live modes and CI behavior. Added Architecture & Dev Context section with links to architecture docs, ADR list, and development context references.
Data Integrity
README.md (lines 266–281)
Added Migrations section documenting required Supabase SQL migration for documents.request_id column and unique index with null filter for idempotency.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A doc so bright, expanded with care,
SSE streams float through the air,
Models and migration paths aligned,
Architecture notes for the curious mind,
This README now tells the whole tale,
Of documents, tests, and never to fail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately describes the main change—a README refresh for the agentic upload refactor—and is concise and specific.
Description check✅ PassedThe description comprehensively covers changes made, includes context from related PRs, documents the test plan, and aligns with the repository's template structure.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-refresh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend781d65bCommit Preview URL

Branch Preview URL
May 04 2026, 07:18 AM

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 818535d into mainMay 4, 2026
3 of 4 checks passed
@AndresL230
AndresL230 deleted the docs/readme-refresh branch May 4, 2026 21:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

docs(readme): refresh for the agentic upload refactor - #68

Merged
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh
May 4, 2026
Merged

docs(readme): refresh for the agentic upload refactor#68
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented May 4, 2026

Copy link
Copy Markdown
Member

Summary

  • Bring the README up to date with the agentic upload pipeline that landed in PR re-architecture: agentic document upload + AES-256-GCM column encryption + dev-context vault #67 and the 15 MB → 100 MB upload-cap bump (commit 9912a25).
  • Document the new SSE upload route and event vocabulary, the X-Request-ID idempotency contract, and the post-merge migration.
  • Surface the dev-context vault: ADR index 0001-0012, docs/attempts/, .claude/ slash commands, the context-curator subagent.
  • Add a new env-vars block for LOGFIRE_TOKEN, SAPLING_MODEL_*, OCR_ASYNC_ENABLED, and the optional DBOS pair.
  • Add a Tests section with the canonical pytest / vitest / eval-replay commands.

No code changes — docs only. README went from 203 → 284 lines (+88 / -6).

What's accurate now

  • Tech Stack: Pydantic AI agents, per-task model routing, Logfire (with PII scrubber), sse-starlette streaming, Vitest + jsdom on the frontend.
  • Document Library feature: 100 MB cap, live progress UX.
  • Documents API: /upload (SSE) vs /upload/sync (JSON), full event list, idempotency on X-Request-ID, the two scan-concepts endpoints that were already in code.
  • Environment: every env var the new code paths read, with a note on each one's purpose and default.
  • Migrations: the documents.request_id ALTER inline so a fresh deployment knows exactly what to run.
  • Architecture & Dev Context: link to `docs/architecture.md`, full ADR index, slash commands.

Test plan

  • Markdown renders correctly (links resolve, tables align)
  • No code changes — backend/frontend unchanged
  • Reviewer skim for tone / accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for document ingestion workflow, including streaming upload progress phases and manual concept-note rescanning
    • Updated API reference with new synchronous upload and concept-scan endpoints
    • Expanded configuration documentation for backend environment variables and observability features
    • Added architecture context and testing documentation sections

Brings the README up to date with what landed in PR #67 (the
re-architecture branch) and the post-merge upload-cap bump.
Tech Stack
- Notes the Pydantic AI agentic pipeline (4 typed worker agents
fanned out via asyncio.gather), per-task model routing with
SAPLING_MODEL_<TASK> env overrides, and which agent uses which
Gemini model by default.
- Adds Logfire as the observability layer, including the custom
span scrubber that truncates + SHA-256-fingerprints user-content
attribute paths before egress.
- Notes sse-starlette for the streaming /upload route and the
per-request structured logging (correlation ID, status, duration).
- Calls out Vitest with jsdom + RTL on the frontend.
Document Library feature
- New 100 MB upload cap (was 15 MB; commit 9912a25).
- Live SSE progress UX: "Classifying..." → "Extracting..." → "Saved."
API Endpoints — Documents
- Splits into POST /upload (streaming SSE) and POST /upload/sync
(non-streaming JSON), with the full SSE event vocabulary
(status:start, progress:classify, progress:classified,
progress:extract, progress:extracted, progress:graph_update,
progress:graph_updated, result:finalize, status:done,
error:fallback, error:failed).
- Documents the X-Request-ID idempotency contract.
- Adds the two scan-concepts endpoints that were already in the
code but not in the README.
Environment Variables
- LOGFIRE_TOKEN (optional)
- SAPLING_MODEL_CLASSIFIER / _SUMMARY / _CONCEPTS / _SYLLABUS
- OCR_ASYNC_ENABLED feature flag
- DBOS_ENABLED + DBOS_DATABASE_URL (durable-execution opt-in)
New sections
- Tests: backend pytest commands, frontend Vitest commands,
evals replay/record/live modes with the SAPLING_EVAL_MODE env var.
- Architecture & Dev Context: pointer to docs/architecture.md, full
ADR index (0001-0012), docs/attempts/, the .claude/ slash commands,
and the context-curator subagent.
- Migrations: the documents.request_id ALTER inline so anyone
bringing up a fresh environment knows what needs to run.
No code changes; docs only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 4, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The README was comprehensively expanded to document the streaming document-upload flow with SSE progress phases, detailed tech stack architecture (Pydantic AI agents, SSE streaming, Logfire observability, OCR fallbacks), refined API endpoint specifications including new concept-scanning endpoints, backend environment variables, testing modes, architectural context links, and a required database migration for request-ID deduplication.

Changes

Documentation Expansion

Layer / File(s)Summary
Feature & Capability Overview
README.md (lines 28–30, 41–46)
Document Library feature now describes streaming SSE upload phases, extracted outputs (summaries, concept notes, flashcard topics), and manual re-scanning. Tech Stack section expanded to detail frontend/backend stacks, Pydantic AI typed worker agents, model routing via env vars, and OCR pipeline.
API Endpoint Specification
README.md (lines 124–130)
Documents API section rewritten to detail streaming POST /api/documents/upload lifecycle (SSE event names, error/fallback behavior, X-Request-ID idempotency), addition of POST /api/documents/upload/sync, and new concept-scan endpoints for stored documents and course graphs.
Environment & Configuration
README.md (lines 197–204)
Backend .env documentation extended with Logfire token, per-task model override vars (SAPLING_MODEL_*), OCR async flag, and DBOS durable execution config.
Testing & Architecture Context
README.md (lines 213–241, 242–265)
Added Tests section documenting pytest/Vitest/eval invocation with replay/record/live modes and CI behavior. Added Architecture & Dev Context section with links to architecture docs, ADR list, and development context references.
Data Integrity
README.md (lines 266–281)
Added Migrations section documenting required Supabase SQL migration for documents.request_id column and unique index with null filter for idempotency.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A doc so bright, expanded with care,
SSE streams float through the air,
Models and migration paths aligned,
Architecture notes for the curious mind,
This README now tells the whole tale,
Of documents, tests, and never to fail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately describes the main change—a README refresh for the agentic upload refactor—and is concise and specific.
Description check✅ PassedThe description comprehensively covers changes made, includes context from related PRs, documents the test plan, and aligns with the repository's template structure.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-refresh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend781d65bCommit Preview URL

Branch Preview URL
May 04 2026, 07:18 AM

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 818535d into mainMay 4, 2026
3 of 4 checks passed
@AndresL230
AndresL230 deleted the docs/readme-refresh branch May 4, 2026 21:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(readme): refresh for the agentic upload refactor - #68

Merged
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh
May 4, 2026
Merged

docs(readme): refresh for the agentic upload refactor#68
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented May 4, 2026

Copy link
Copy Markdown
Member

Summary

  • Bring the README up to date with the agentic upload pipeline that landed in PR re-architecture: agentic document upload + AES-256-GCM column encryption + dev-context vault #67 and the 15 MB → 100 MB upload-cap bump (commit 9912a25).
  • Document the new SSE upload route and event vocabulary, the X-Request-ID idempotency contract, and the post-merge migration.
  • Surface the dev-context vault: ADR index 0001-0012, docs/attempts/, .claude/ slash commands, the context-curator subagent.
  • Add a new env-vars block for LOGFIRE_TOKEN, SAPLING_MODEL_*, OCR_ASYNC_ENABLED, and the optional DBOS pair.
  • Add a Tests section with the canonical pytest / vitest / eval-replay commands.

No code changes — docs only. README went from 203 → 284 lines (+88 / -6).

What's accurate now

  • Tech Stack: Pydantic AI agents, per-task model routing, Logfire (with PII scrubber), sse-starlette streaming, Vitest + jsdom on the frontend.
  • Document Library feature: 100 MB cap, live progress UX.
  • Documents API: /upload (SSE) vs /upload/sync (JSON), full event list, idempotency on X-Request-ID, the two scan-concepts endpoints that were already in code.
  • Environment: every env var the new code paths read, with a note on each one's purpose and default.
  • Migrations: the documents.request_id ALTER inline so a fresh deployment knows exactly what to run.
  • Architecture & Dev Context: link to `docs/architecture.md`, full ADR index, slash commands.

Test plan

  • Markdown renders correctly (links resolve, tables align)
  • No code changes — backend/frontend unchanged
  • Reviewer skim for tone / accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for document ingestion workflow, including streaming upload progress phases and manual concept-note rescanning
    • Updated API reference with new synchronous upload and concept-scan endpoints
    • Expanded configuration documentation for backend environment variables and observability features
    • Added architecture context and testing documentation sections

Brings the README up to date with what landed in PR #67 (the
re-architecture branch) and the post-merge upload-cap bump.
Tech Stack
- Notes the Pydantic AI agentic pipeline (4 typed worker agents
fanned out via asyncio.gather), per-task model routing with
SAPLING_MODEL_<TASK> env overrides, and which agent uses which
Gemini model by default.
- Adds Logfire as the observability layer, including the custom
span scrubber that truncates + SHA-256-fingerprints user-content
attribute paths before egress.
- Notes sse-starlette for the streaming /upload route and the
per-request structured logging (correlation ID, status, duration).
- Calls out Vitest with jsdom + RTL on the frontend.
Document Library feature
- New 100 MB upload cap (was 15 MB; commit 9912a25).
- Live SSE progress UX: "Classifying..." → "Extracting..." → "Saved."
API Endpoints — Documents
- Splits into POST /upload (streaming SSE) and POST /upload/sync
(non-streaming JSON), with the full SSE event vocabulary
(status:start, progress:classify, progress:classified,
progress:extract, progress:extracted, progress:graph_update,
progress:graph_updated, result:finalize, status:done,
error:fallback, error:failed).
- Documents the X-Request-ID idempotency contract.
- Adds the two scan-concepts endpoints that were already in the
code but not in the README.
Environment Variables
- LOGFIRE_TOKEN (optional)
- SAPLING_MODEL_CLASSIFIER / _SUMMARY / _CONCEPTS / _SYLLABUS
- OCR_ASYNC_ENABLED feature flag
- DBOS_ENABLED + DBOS_DATABASE_URL (durable-execution opt-in)
New sections
- Tests: backend pytest commands, frontend Vitest commands,
evals replay/record/live modes with the SAPLING_EVAL_MODE env var.
- Architecture & Dev Context: pointer to docs/architecture.md, full
ADR index (0001-0012), docs/attempts/, the .claude/ slash commands,
and the context-curator subagent.
- Migrations: the documents.request_id ALTER inline so anyone
bringing up a fresh environment knows what needs to run.
No code changes; docs only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 4, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The README was comprehensively expanded to document the streaming document-upload flow with SSE progress phases, detailed tech stack architecture (Pydantic AI agents, SSE streaming, Logfire observability, OCR fallbacks), refined API endpoint specifications including new concept-scanning endpoints, backend environment variables, testing modes, architectural context links, and a required database migration for request-ID deduplication.

Changes

Documentation Expansion

Layer / File(s)Summary
Feature & Capability Overview
README.md (lines 28–30, 41–46)
Document Library feature now describes streaming SSE upload phases, extracted outputs (summaries, concept notes, flashcard topics), and manual re-scanning. Tech Stack section expanded to detail frontend/backend stacks, Pydantic AI typed worker agents, model routing via env vars, and OCR pipeline.
API Endpoint Specification
README.md (lines 124–130)
Documents API section rewritten to detail streaming POST /api/documents/upload lifecycle (SSE event names, error/fallback behavior, X-Request-ID idempotency), addition of POST /api/documents/upload/sync, and new concept-scan endpoints for stored documents and course graphs.
Environment & Configuration
README.md (lines 197–204)
Backend .env documentation extended with Logfire token, per-task model override vars (SAPLING_MODEL_*), OCR async flag, and DBOS durable execution config.
Testing & Architecture Context
README.md (lines 213–241, 242–265)
Added Tests section documenting pytest/Vitest/eval invocation with replay/record/live modes and CI behavior. Added Architecture & Dev Context section with links to architecture docs, ADR list, and development context references.
Data Integrity
README.md (lines 266–281)
Added Migrations section documenting required Supabase SQL migration for documents.request_id column and unique index with null filter for idempotency.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A doc so bright, expanded with care,
SSE streams float through the air,
Models and migration paths aligned,
Architecture notes for the curious mind,
This README now tells the whole tale,
Of documents, tests, and never to fail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately describes the main change—a README refresh for the agentic upload refactor—and is concise and specific.
Description check✅ PassedThe description comprehensively covers changes made, includes context from related PRs, documents the test plan, and aligns with the repository's template structure.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-refresh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend781d65bCommit Preview URL

Branch Preview URL
May 04 2026, 07:18 AM

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 818535d into mainMay 4, 2026
3 of 4 checks passed
@AndresL230
AndresL230 deleted the docs/readme-refresh branch May 4, 2026 21:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(readme): refresh for the agentic upload refactor - #68

Merged
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh
May 4, 2026
Merged

docs(readme): refresh for the agentic upload refactor#68
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented May 4, 2026

Copy link
Copy Markdown
Member

Summary

  • Bring the README up to date with the agentic upload pipeline that landed in PR re-architecture: agentic document upload + AES-256-GCM column encryption + dev-context vault #67 and the 15 MB → 100 MB upload-cap bump (commit 9912a25).
  • Document the new SSE upload route and event vocabulary, the X-Request-ID idempotency contract, and the post-merge migration.
  • Surface the dev-context vault: ADR index 0001-0012, docs/attempts/, .claude/ slash commands, the context-curator subagent.
  • Add a new env-vars block for LOGFIRE_TOKEN, SAPLING_MODEL_*, OCR_ASYNC_ENABLED, and the optional DBOS pair.
  • Add a Tests section with the canonical pytest / vitest / eval-replay commands.

No code changes — docs only. README went from 203 → 284 lines (+88 / -6).

What's accurate now

  • Tech Stack: Pydantic AI agents, per-task model routing, Logfire (with PII scrubber), sse-starlette streaming, Vitest + jsdom on the frontend.
  • Document Library feature: 100 MB cap, live progress UX.
  • Documents API: /upload (SSE) vs /upload/sync (JSON), full event list, idempotency on X-Request-ID, the two scan-concepts endpoints that were already in code.
  • Environment: every env var the new code paths read, with a note on each one's purpose and default.
  • Migrations: the documents.request_id ALTER inline so a fresh deployment knows exactly what to run.
  • Architecture & Dev Context: link to `docs/architecture.md`, full ADR index, slash commands.

Test plan

  • Markdown renders correctly (links resolve, tables align)
  • No code changes — backend/frontend unchanged
  • Reviewer skim for tone / accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for document ingestion workflow, including streaming upload progress phases and manual concept-note rescanning
    • Updated API reference with new synchronous upload and concept-scan endpoints
    • Expanded configuration documentation for backend environment variables and observability features
    • Added architecture context and testing documentation sections

Brings the README up to date with what landed in PR #67 (the
re-architecture branch) and the post-merge upload-cap bump.
Tech Stack
- Notes the Pydantic AI agentic pipeline (4 typed worker agents
fanned out via asyncio.gather), per-task model routing with
SAPLING_MODEL_<TASK> env overrides, and which agent uses which
Gemini model by default.
- Adds Logfire as the observability layer, including the custom
span scrubber that truncates + SHA-256-fingerprints user-content
attribute paths before egress.
- Notes sse-starlette for the streaming /upload route and the
per-request structured logging (correlation ID, status, duration).
- Calls out Vitest with jsdom + RTL on the frontend.
Document Library feature
- New 100 MB upload cap (was 15 MB; commit 9912a25).
- Live SSE progress UX: "Classifying..." → "Extracting..." → "Saved."
API Endpoints — Documents
- Splits into POST /upload (streaming SSE) and POST /upload/sync
(non-streaming JSON), with the full SSE event vocabulary
(status:start, progress:classify, progress:classified,
progress:extract, progress:extracted, progress:graph_update,
progress:graph_updated, result:finalize, status:done,
error:fallback, error:failed).
- Documents the X-Request-ID idempotency contract.
- Adds the two scan-concepts endpoints that were already in the
code but not in the README.
Environment Variables
- LOGFIRE_TOKEN (optional)
- SAPLING_MODEL_CLASSIFIER / _SUMMARY / _CONCEPTS / _SYLLABUS
- OCR_ASYNC_ENABLED feature flag
- DBOS_ENABLED + DBOS_DATABASE_URL (durable-execution opt-in)
New sections
- Tests: backend pytest commands, frontend Vitest commands,
evals replay/record/live modes with the SAPLING_EVAL_MODE env var.
- Architecture & Dev Context: pointer to docs/architecture.md, full
ADR index (0001-0012), docs/attempts/, the .claude/ slash commands,
and the context-curator subagent.
- Migrations: the documents.request_id ALTER inline so anyone
bringing up a fresh environment knows what needs to run.
No code changes; docs only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 4, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The README was comprehensively expanded to document the streaming document-upload flow with SSE progress phases, detailed tech stack architecture (Pydantic AI agents, SSE streaming, Logfire observability, OCR fallbacks), refined API endpoint specifications including new concept-scanning endpoints, backend environment variables, testing modes, architectural context links, and a required database migration for request-ID deduplication.

Changes

Documentation Expansion

Layer / File(s)Summary
Feature & Capability Overview
README.md (lines 28–30, 41–46)
Document Library feature now describes streaming SSE upload phases, extracted outputs (summaries, concept notes, flashcard topics), and manual re-scanning. Tech Stack section expanded to detail frontend/backend stacks, Pydantic AI typed worker agents, model routing via env vars, and OCR pipeline.
API Endpoint Specification
README.md (lines 124–130)
Documents API section rewritten to detail streaming POST /api/documents/upload lifecycle (SSE event names, error/fallback behavior, X-Request-ID idempotency), addition of POST /api/documents/upload/sync, and new concept-scan endpoints for stored documents and course graphs.
Environment & Configuration
README.md (lines 197–204)
Backend .env documentation extended with Logfire token, per-task model override vars (SAPLING_MODEL_*), OCR async flag, and DBOS durable execution config.
Testing & Architecture Context
README.md (lines 213–241, 242–265)
Added Tests section documenting pytest/Vitest/eval invocation with replay/record/live modes and CI behavior. Added Architecture & Dev Context section with links to architecture docs, ADR list, and development context references.
Data Integrity
README.md (lines 266–281)
Added Migrations section documenting required Supabase SQL migration for documents.request_id column and unique index with null filter for idempotency.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A doc so bright, expanded with care,
SSE streams float through the air,
Models and migration paths aligned,
Architecture notes for the curious mind,
This README now tells the whole tale,
Of documents, tests, and never to fail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately describes the main change—a README refresh for the agentic upload refactor—and is concise and specific.
Description check✅ PassedThe description comprehensively covers changes made, includes context from related PRs, documents the test plan, and aligns with the repository's template structure.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-refresh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend781d65bCommit Preview URL

Branch Preview URL
May 04 2026, 07:18 AM

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 818535d into mainMay 4, 2026
3 of 4 checks passed
@AndresL230
AndresL230 deleted the docs/readme-refresh branch May 4, 2026 21:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

docs(readme): refresh for the agentic upload refactor - #68

Merged
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh
May 4, 2026
Merged

docs(readme): refresh for the agentic upload refactor#68
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented May 4, 2026

Copy link
Copy Markdown
Member

Summary

  • Bring the README up to date with the agentic upload pipeline that landed in PR re-architecture: agentic document upload + AES-256-GCM column encryption + dev-context vault #67 and the 15 MB → 100 MB upload-cap bump (commit 9912a25).
  • Document the new SSE upload route and event vocabulary, the X-Request-ID idempotency contract, and the post-merge migration.
  • Surface the dev-context vault: ADR index 0001-0012, docs/attempts/, .claude/ slash commands, the context-curator subagent.
  • Add a new env-vars block for LOGFIRE_TOKEN, SAPLING_MODEL_*, OCR_ASYNC_ENABLED, and the optional DBOS pair.
  • Add a Tests section with the canonical pytest / vitest / eval-replay commands.

No code changes — docs only. README went from 203 → 284 lines (+88 / -6).

What's accurate now

  • Tech Stack: Pydantic AI agents, per-task model routing, Logfire (with PII scrubber), sse-starlette streaming, Vitest + jsdom on the frontend.
  • Document Library feature: 100 MB cap, live progress UX.
  • Documents API: /upload (SSE) vs /upload/sync (JSON), full event list, idempotency on X-Request-ID, the two scan-concepts endpoints that were already in code.
  • Environment: every env var the new code paths read, with a note on each one's purpose and default.
  • Migrations: the documents.request_id ALTER inline so a fresh deployment knows exactly what to run.
  • Architecture & Dev Context: link to `docs/architecture.md`, full ADR index, slash commands.

Test plan

  • Markdown renders correctly (links resolve, tables align)
  • No code changes — backend/frontend unchanged
  • Reviewer skim for tone / accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for document ingestion workflow, including streaming upload progress phases and manual concept-note rescanning
    • Updated API reference with new synchronous upload and concept-scan endpoints
    • Expanded configuration documentation for backend environment variables and observability features
    • Added architecture context and testing documentation sections

Brings the README up to date with what landed in PR #67 (the
re-architecture branch) and the post-merge upload-cap bump.
Tech Stack
- Notes the Pydantic AI agentic pipeline (4 typed worker agents
fanned out via asyncio.gather), per-task model routing with
SAPLING_MODEL_<TASK> env overrides, and which agent uses which
Gemini model by default.
- Adds Logfire as the observability layer, including the custom
span scrubber that truncates + SHA-256-fingerprints user-content
attribute paths before egress.
- Notes sse-starlette for the streaming /upload route and the
per-request structured logging (correlation ID, status, duration).
- Calls out Vitest with jsdom + RTL on the frontend.
Document Library feature
- New 100 MB upload cap (was 15 MB; commit 9912a25).
- Live SSE progress UX: "Classifying..." → "Extracting..." → "Saved."
API Endpoints — Documents
- Splits into POST /upload (streaming SSE) and POST /upload/sync
(non-streaming JSON), with the full SSE event vocabulary
(status:start, progress:classify, progress:classified,
progress:extract, progress:extracted, progress:graph_update,
progress:graph_updated, result:finalize, status:done,
error:fallback, error:failed).
- Documents the X-Request-ID idempotency contract.
- Adds the two scan-concepts endpoints that were already in the
code but not in the README.
Environment Variables
- LOGFIRE_TOKEN (optional)
- SAPLING_MODEL_CLASSIFIER / _SUMMARY / _CONCEPTS / _SYLLABUS
- OCR_ASYNC_ENABLED feature flag
- DBOS_ENABLED + DBOS_DATABASE_URL (durable-execution opt-in)
New sections
- Tests: backend pytest commands, frontend Vitest commands,
evals replay/record/live modes with the SAPLING_EVAL_MODE env var.
- Architecture & Dev Context: pointer to docs/architecture.md, full
ADR index (0001-0012), docs/attempts/, the .claude/ slash commands,
and the context-curator subagent.
- Migrations: the documents.request_id ALTER inline so anyone
bringing up a fresh environment knows what needs to run.
No code changes; docs only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 4, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The README was comprehensively expanded to document the streaming document-upload flow with SSE progress phases, detailed tech stack architecture (Pydantic AI agents, SSE streaming, Logfire observability, OCR fallbacks), refined API endpoint specifications including new concept-scanning endpoints, backend environment variables, testing modes, architectural context links, and a required database migration for request-ID deduplication.

Changes

Documentation Expansion

Layer / File(s)Summary
Feature & Capability Overview
README.md (lines 28–30, 41–46)
Document Library feature now describes streaming SSE upload phases, extracted outputs (summaries, concept notes, flashcard topics), and manual re-scanning. Tech Stack section expanded to detail frontend/backend stacks, Pydantic AI typed worker agents, model routing via env vars, and OCR pipeline.
API Endpoint Specification
README.md (lines 124–130)
Documents API section rewritten to detail streaming POST /api/documents/upload lifecycle (SSE event names, error/fallback behavior, X-Request-ID idempotency), addition of POST /api/documents/upload/sync, and new concept-scan endpoints for stored documents and course graphs.
Environment & Configuration
README.md (lines 197–204)
Backend .env documentation extended with Logfire token, per-task model override vars (SAPLING_MODEL_*), OCR async flag, and DBOS durable execution config.
Testing & Architecture Context
README.md (lines 213–241, 242–265)
Added Tests section documenting pytest/Vitest/eval invocation with replay/record/live modes and CI behavior. Added Architecture & Dev Context section with links to architecture docs, ADR list, and development context references.
Data Integrity
README.md (lines 266–281)
Added Migrations section documenting required Supabase SQL migration for documents.request_id column and unique index with null filter for idempotency.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A doc so bright, expanded with care,
SSE streams float through the air,
Models and migration paths aligned,
Architecture notes for the curious mind,
This README now tells the whole tale,
Of documents, tests, and never to fail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately describes the main change—a README refresh for the agentic upload refactor—and is concise and specific.
Description check✅ PassedThe description comprehensively covers changes made, includes context from related PRs, documents the test plan, and aligns with the repository's template structure.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-refresh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend781d65bCommit Preview URL

Branch Preview URL
May 04 2026, 07:18 AM

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 818535d into mainMay 4, 2026
3 of 4 checks passed
@AndresL230
AndresL230 deleted the docs/readme-refresh branch May 4, 2026 21:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(readme): refresh for the agentic upload refactor - #68

Merged
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh
May 4, 2026
Merged

docs(readme): refresh for the agentic upload refactor#68
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented May 4, 2026

Copy link
Copy Markdown
Member

Summary

  • Bring the README up to date with the agentic upload pipeline that landed in PR re-architecture: agentic document upload + AES-256-GCM column encryption + dev-context vault #67 and the 15 MB → 100 MB upload-cap bump (commit 9912a25).
  • Document the new SSE upload route and event vocabulary, the X-Request-ID idempotency contract, and the post-merge migration.
  • Surface the dev-context vault: ADR index 0001-0012, docs/attempts/, .claude/ slash commands, the context-curator subagent.
  • Add a new env-vars block for LOGFIRE_TOKEN, SAPLING_MODEL_*, OCR_ASYNC_ENABLED, and the optional DBOS pair.
  • Add a Tests section with the canonical pytest / vitest / eval-replay commands.

No code changes — docs only. README went from 203 → 284 lines (+88 / -6).

What's accurate now

  • Tech Stack: Pydantic AI agents, per-task model routing, Logfire (with PII scrubber), sse-starlette streaming, Vitest + jsdom on the frontend.
  • Document Library feature: 100 MB cap, live progress UX.
  • Documents API: /upload (SSE) vs /upload/sync (JSON), full event list, idempotency on X-Request-ID, the two scan-concepts endpoints that were already in code.
  • Environment: every env var the new code paths read, with a note on each one's purpose and default.
  • Migrations: the documents.request_id ALTER inline so a fresh deployment knows exactly what to run.
  • Architecture & Dev Context: link to `docs/architecture.md`, full ADR index, slash commands.

Test plan

  • Markdown renders correctly (links resolve, tables align)
  • No code changes — backend/frontend unchanged
  • Reviewer skim for tone / accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for document ingestion workflow, including streaming upload progress phases and manual concept-note rescanning
    • Updated API reference with new synchronous upload and concept-scan endpoints
    • Expanded configuration documentation for backend environment variables and observability features
    • Added architecture context and testing documentation sections

Brings the README up to date with what landed in PR #67 (the
re-architecture branch) and the post-merge upload-cap bump.
Tech Stack
- Notes the Pydantic AI agentic pipeline (4 typed worker agents
fanned out via asyncio.gather), per-task model routing with
SAPLING_MODEL_<TASK> env overrides, and which agent uses which
Gemini model by default.
- Adds Logfire as the observability layer, including the custom
span scrubber that truncates + SHA-256-fingerprints user-content
attribute paths before egress.
- Notes sse-starlette for the streaming /upload route and the
per-request structured logging (correlation ID, status, duration).
- Calls out Vitest with jsdom + RTL on the frontend.
Document Library feature
- New 100 MB upload cap (was 15 MB; commit 9912a25).
- Live SSE progress UX: "Classifying..." → "Extracting..." → "Saved."
API Endpoints — Documents
- Splits into POST /upload (streaming SSE) and POST /upload/sync
(non-streaming JSON), with the full SSE event vocabulary
(status:start, progress:classify, progress:classified,
progress:extract, progress:extracted, progress:graph_update,
progress:graph_updated, result:finalize, status:done,
error:fallback, error:failed).
- Documents the X-Request-ID idempotency contract.
- Adds the two scan-concepts endpoints that were already in the
code but not in the README.
Environment Variables
- LOGFIRE_TOKEN (optional)
- SAPLING_MODEL_CLASSIFIER / _SUMMARY / _CONCEPTS / _SYLLABUS
- OCR_ASYNC_ENABLED feature flag
- DBOS_ENABLED + DBOS_DATABASE_URL (durable-execution opt-in)
New sections
- Tests: backend pytest commands, frontend Vitest commands,
evals replay/record/live modes with the SAPLING_EVAL_MODE env var.
- Architecture & Dev Context: pointer to docs/architecture.md, full
ADR index (0001-0012), docs/attempts/, the .claude/ slash commands,
and the context-curator subagent.
- Migrations: the documents.request_id ALTER inline so anyone
bringing up a fresh environment knows what needs to run.
No code changes; docs only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 4, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The README was comprehensively expanded to document the streaming document-upload flow with SSE progress phases, detailed tech stack architecture (Pydantic AI agents, SSE streaming, Logfire observability, OCR fallbacks), refined API endpoint specifications including new concept-scanning endpoints, backend environment variables, testing modes, architectural context links, and a required database migration for request-ID deduplication.

Changes

Documentation Expansion

Layer / File(s)Summary
Feature & Capability Overview
README.md (lines 28–30, 41–46)
Document Library feature now describes streaming SSE upload phases, extracted outputs (summaries, concept notes, flashcard topics), and manual re-scanning. Tech Stack section expanded to detail frontend/backend stacks, Pydantic AI typed worker agents, model routing via env vars, and OCR pipeline.
API Endpoint Specification
README.md (lines 124–130)
Documents API section rewritten to detail streaming POST /api/documents/upload lifecycle (SSE event names, error/fallback behavior, X-Request-ID idempotency), addition of POST /api/documents/upload/sync, and new concept-scan endpoints for stored documents and course graphs.
Environment & Configuration
README.md (lines 197–204)
Backend .env documentation extended with Logfire token, per-task model override vars (SAPLING_MODEL_*), OCR async flag, and DBOS durable execution config.
Testing & Architecture Context
README.md (lines 213–241, 242–265)
Added Tests section documenting pytest/Vitest/eval invocation with replay/record/live modes and CI behavior. Added Architecture & Dev Context section with links to architecture docs, ADR list, and development context references.
Data Integrity
README.md (lines 266–281)
Added Migrations section documenting required Supabase SQL migration for documents.request_id column and unique index with null filter for idempotency.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A doc so bright, expanded with care,
SSE streams float through the air,
Models and migration paths aligned,
Architecture notes for the curious mind,
This README now tells the whole tale,
Of documents, tests, and never to fail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately describes the main change—a README refresh for the agentic upload refactor—and is concise and specific.
Description check✅ PassedThe description comprehensively covers changes made, includes context from related PRs, documents the test plan, and aligns with the repository's template structure.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-refresh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend781d65bCommit Preview URL

Branch Preview URL
May 04 2026, 07:18 AM

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 818535d into mainMay 4, 2026
3 of 4 checks passed
@AndresL230
AndresL230 deleted the docs/readme-refresh branch May 4, 2026 21:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs(readme): refresh for the agentic upload refactor - #68

Merged
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh
May 4, 2026
Merged

docs(readme): refresh for the agentic upload refactor#68
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented May 4, 2026

Copy link
Copy Markdown
Member

Summary

  • Bring the README up to date with the agentic upload pipeline that landed in PR re-architecture: agentic document upload + AES-256-GCM column encryption + dev-context vault #67 and the 15 MB → 100 MB upload-cap bump (commit 9912a25).
  • Document the new SSE upload route and event vocabulary, the X-Request-ID idempotency contract, and the post-merge migration.
  • Surface the dev-context vault: ADR index 0001-0012, docs/attempts/, .claude/ slash commands, the context-curator subagent.
  • Add a new env-vars block for LOGFIRE_TOKEN, SAPLING_MODEL_*, OCR_ASYNC_ENABLED, and the optional DBOS pair.
  • Add a Tests section with the canonical pytest / vitest / eval-replay commands.

No code changes — docs only. README went from 203 → 284 lines (+88 / -6).

What's accurate now

  • Tech Stack: Pydantic AI agents, per-task model routing, Logfire (with PII scrubber), sse-starlette streaming, Vitest + jsdom on the frontend.
  • Document Library feature: 100 MB cap, live progress UX.
  • Documents API: /upload (SSE) vs /upload/sync (JSON), full event list, idempotency on X-Request-ID, the two scan-concepts endpoints that were already in code.
  • Environment: every env var the new code paths read, with a note on each one's purpose and default.
  • Migrations: the documents.request_id ALTER inline so a fresh deployment knows exactly what to run.
  • Architecture & Dev Context: link to `docs/architecture.md`, full ADR index, slash commands.

Test plan

  • Markdown renders correctly (links resolve, tables align)
  • No code changes — backend/frontend unchanged
  • Reviewer skim for tone / accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for document ingestion workflow, including streaming upload progress phases and manual concept-note rescanning
    • Updated API reference with new synchronous upload and concept-scan endpoints
    • Expanded configuration documentation for backend environment variables and observability features
    • Added architecture context and testing documentation sections

Brings the README up to date with what landed in PR #67 (the
re-architecture branch) and the post-merge upload-cap bump.
Tech Stack
- Notes the Pydantic AI agentic pipeline (4 typed worker agents
fanned out via asyncio.gather), per-task model routing with
SAPLING_MODEL_<TASK> env overrides, and which agent uses which
Gemini model by default.
- Adds Logfire as the observability layer, including the custom
span scrubber that truncates + SHA-256-fingerprints user-content
attribute paths before egress.
- Notes sse-starlette for the streaming /upload route and the
per-request structured logging (correlation ID, status, duration).
- Calls out Vitest with jsdom + RTL on the frontend.
Document Library feature
- New 100 MB upload cap (was 15 MB; commit 9912a25).
- Live SSE progress UX: "Classifying..." → "Extracting..." → "Saved."
API Endpoints — Documents
- Splits into POST /upload (streaming SSE) and POST /upload/sync
(non-streaming JSON), with the full SSE event vocabulary
(status:start, progress:classify, progress:classified,
progress:extract, progress:extracted, progress:graph_update,
progress:graph_updated, result:finalize, status:done,
error:fallback, error:failed).
- Documents the X-Request-ID idempotency contract.
- Adds the two scan-concepts endpoints that were already in the
code but not in the README.
Environment Variables
- LOGFIRE_TOKEN (optional)
- SAPLING_MODEL_CLASSIFIER / _SUMMARY / _CONCEPTS / _SYLLABUS
- OCR_ASYNC_ENABLED feature flag
- DBOS_ENABLED + DBOS_DATABASE_URL (durable-execution opt-in)
New sections
- Tests: backend pytest commands, frontend Vitest commands,
evals replay/record/live modes with the SAPLING_EVAL_MODE env var.
- Architecture & Dev Context: pointer to docs/architecture.md, full
ADR index (0001-0012), docs/attempts/, the .claude/ slash commands,
and the context-curator subagent.
- Migrations: the documents.request_id ALTER inline so anyone
bringing up a fresh environment knows what needs to run.
No code changes; docs only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 4, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The README was comprehensively expanded to document the streaming document-upload flow with SSE progress phases, detailed tech stack architecture (Pydantic AI agents, SSE streaming, Logfire observability, OCR fallbacks), refined API endpoint specifications including new concept-scanning endpoints, backend environment variables, testing modes, architectural context links, and a required database migration for request-ID deduplication.

Changes

Documentation Expansion

Layer / File(s)Summary
Feature & Capability Overview
README.md (lines 28–30, 41–46)
Document Library feature now describes streaming SSE upload phases, extracted outputs (summaries, concept notes, flashcard topics), and manual re-scanning. Tech Stack section expanded to detail frontend/backend stacks, Pydantic AI typed worker agents, model routing via env vars, and OCR pipeline.
API Endpoint Specification
README.md (lines 124–130)
Documents API section rewritten to detail streaming POST /api/documents/upload lifecycle (SSE event names, error/fallback behavior, X-Request-ID idempotency), addition of POST /api/documents/upload/sync, and new concept-scan endpoints for stored documents and course graphs.
Environment & Configuration
README.md (lines 197–204)
Backend .env documentation extended with Logfire token, per-task model override vars (SAPLING_MODEL_*), OCR async flag, and DBOS durable execution config.
Testing & Architecture Context
README.md (lines 213–241, 242–265)
Added Tests section documenting pytest/Vitest/eval invocation with replay/record/live modes and CI behavior. Added Architecture & Dev Context section with links to architecture docs, ADR list, and development context references.
Data Integrity
README.md (lines 266–281)
Added Migrations section documenting required Supabase SQL migration for documents.request_id column and unique index with null filter for idempotency.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A doc so bright, expanded with care,
SSE streams float through the air,
Models and migration paths aligned,
Architecture notes for the curious mind,
This README now tells the whole tale,
Of documents, tests, and never to fail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately describes the main change—a README refresh for the agentic upload refactor—and is concise and specific.
Description check✅ PassedThe description comprehensively covers changes made, includes context from related PRs, documents the test plan, and aligns with the repository's template structure.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-refresh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend781d65bCommit Preview URL

Branch Preview URL
May 04 2026, 07:18 AM

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 818535d into mainMay 4, 2026
3 of 4 checks passed
@AndresL230
AndresL230 deleted the docs/readme-refresh branch May 4, 2026 21:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Jose-Gael-Cruz-Lopez
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

docs(readme): refresh for the agentic upload refactor - #68

Merged
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh
May 4, 2026
Merged

docs(readme): refresh for the agentic upload refactor#68
Jose-Gael-Cruz-Lopez merged 1 commit into
mainfrom
docs/readme-refresh

Conversation

@Jose-Gael-Cruz-Lopez

@Jose-Gael-Cruz-LopezJose-Gael-Cruz-Lopez commented May 4, 2026

Copy link
Copy Markdown
Member

Summary

  • Bring the README up to date with the agentic upload pipeline that landed in PR re-architecture: agentic document upload + AES-256-GCM column encryption + dev-context vault #67 and the 15 MB → 100 MB upload-cap bump (commit 9912a25).
  • Document the new SSE upload route and event vocabulary, the X-Request-ID idempotency contract, and the post-merge migration.
  • Surface the dev-context vault: ADR index 0001-0012, docs/attempts/, .claude/ slash commands, the context-curator subagent.
  • Add a new env-vars block for LOGFIRE_TOKEN, SAPLING_MODEL_*, OCR_ASYNC_ENABLED, and the optional DBOS pair.
  • Add a Tests section with the canonical pytest / vitest / eval-replay commands.

No code changes — docs only. README went from 203 → 284 lines (+88 / -6).

What's accurate now

  • Tech Stack: Pydantic AI agents, per-task model routing, Logfire (with PII scrubber), sse-starlette streaming, Vitest + jsdom on the frontend.
  • Document Library feature: 100 MB cap, live progress UX.
  • Documents API: /upload (SSE) vs /upload/sync (JSON), full event list, idempotency on X-Request-ID, the two scan-concepts endpoints that were already in code.
  • Environment: every env var the new code paths read, with a note on each one's purpose and default.
  • Migrations: the documents.request_id ALTER inline so a fresh deployment knows exactly what to run.
  • Architecture & Dev Context: link to `docs/architecture.md`, full ADR index, slash commands.

Test plan

  • Markdown renders correctly (links resolve, tables align)
  • No code changes — backend/frontend unchanged
  • Reviewer skim for tone / accuracy

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced documentation for document ingestion workflow, including streaming upload progress phases and manual concept-note rescanning
    • Updated API reference with new synchronous upload and concept-scan endpoints
    • Expanded configuration documentation for backend environment variables and observability features
    • Added architecture context and testing documentation sections

Brings the README up to date with what landed in PR #67 (the
re-architecture branch) and the post-merge upload-cap bump.
Tech Stack
- Notes the Pydantic AI agentic pipeline (4 typed worker agents
fanned out via asyncio.gather), per-task model routing with
SAPLING_MODEL_<TASK> env overrides, and which agent uses which
Gemini model by default.
- Adds Logfire as the observability layer, including the custom
span scrubber that truncates + SHA-256-fingerprints user-content
attribute paths before egress.
- Notes sse-starlette for the streaming /upload route and the
per-request structured logging (correlation ID, status, duration).
- Calls out Vitest with jsdom + RTL on the frontend.
Document Library feature
- New 100 MB upload cap (was 15 MB; commit 9912a25).
- Live SSE progress UX: "Classifying..." → "Extracting..." → "Saved."
API Endpoints — Documents
- Splits into POST /upload (streaming SSE) and POST /upload/sync
(non-streaming JSON), with the full SSE event vocabulary
(status:start, progress:classify, progress:classified,
progress:extract, progress:extracted, progress:graph_update,
progress:graph_updated, result:finalize, status:done,
error:fallback, error:failed).
- Documents the X-Request-ID idempotency contract.
- Adds the two scan-concepts endpoints that were already in the
code but not in the README.
Environment Variables
- LOGFIRE_TOKEN (optional)
- SAPLING_MODEL_CLASSIFIER / _SUMMARY / _CONCEPTS / _SYLLABUS
- OCR_ASYNC_ENABLED feature flag
- DBOS_ENABLED + DBOS_DATABASE_URL (durable-execution opt-in)
New sections
- Tests: backend pytest commands, frontend Vitest commands,
evals replay/record/live modes with the SAPLING_EVAL_MODE env var.
- Architecture & Dev Context: pointer to docs/architecture.md, full
ADR index (0001-0012), docs/attempts/, the .claude/ slash commands,
and the context-curator subagent.
- Migrations: the documents.request_id ALTER inline so anyone
bringing up a fresh environment knows what needs to run.
No code changes; docs only.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 4, 2026

Copy link
Copy Markdown

Caution

Review failed

Pull request was closed or merged during review

📝 Walkthrough

Walkthrough

The README was comprehensively expanded to document the streaming document-upload flow with SSE progress phases, detailed tech stack architecture (Pydantic AI agents, SSE streaming, Logfire observability, OCR fallbacks), refined API endpoint specifications including new concept-scanning endpoints, backend environment variables, testing modes, architectural context links, and a required database migration for request-ID deduplication.

Changes

Documentation Expansion

Layer / File(s)Summary
Feature & Capability Overview
README.md (lines 28–30, 41–46)
Document Library feature now describes streaming SSE upload phases, extracted outputs (summaries, concept notes, flashcard topics), and manual re-scanning. Tech Stack section expanded to detail frontend/backend stacks, Pydantic AI typed worker agents, model routing via env vars, and OCR pipeline.
API Endpoint Specification
README.md (lines 124–130)
Documents API section rewritten to detail streaming POST /api/documents/upload lifecycle (SSE event names, error/fallback behavior, X-Request-ID idempotency), addition of POST /api/documents/upload/sync, and new concept-scan endpoints for stored documents and course graphs.
Environment & Configuration
README.md (lines 197–204)
Backend .env documentation extended with Logfire token, per-task model override vars (SAPLING_MODEL_*), OCR async flag, and DBOS durable execution config.
Testing & Architecture Context
README.md (lines 213–241, 242–265)
Added Tests section documenting pytest/Vitest/eval invocation with replay/record/live modes and CI behavior. Added Architecture & Dev Context section with links to architecture docs, ADR list, and development context references.
Data Integrity
README.md (lines 266–281)
Added Migrations section documenting required Supabase SQL migration for documents.request_id column and unique index with null filter for idempotency.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Poem

🐰 A doc so bright, expanded with care,
SSE streams float through the air,
Models and migration paths aligned,
Architecture notes for the curious mind,
This README now tells the whole tale,
Of documents, tests, and never to fail!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately describes the main change—a README refresh for the agentic upload refactor—and is concise and specific.
Description check✅ PassedThe description comprehensively covers changes made, includes context from related PRs, documents the test plan, and aligns with the repository's template structure.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/readme-refresh

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 60 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend781d65bCommit Preview URL

Branch Preview URL
May 04 2026, 07:18 AM

@Jose-Gael-Cruz-Lopez
Jose-Gael-Cruz-Lopez merged commit 818535d into mainMay 4, 2026
3 of 4 checks passed
@AndresL230
AndresL230 deleted the docs/readme-refresh branch May 4, 2026 21:27
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Jose-Gael-Cruz-Lopez