Uh oh!
There was an error while loading. Please reload this page.
docs: true up knowledge docs to current main; drop stale docs - #328
Conversation
Per-doc baseline true-up (each doc diffed from its own last-touched commit to origin/main), plus removal of three stale/historical docs. Updated: - README.md — Gradescope Sync feature + 9 /api/gradescope endpoints, APP_ENV env var, migrations range 0028→0030. - CLAUDE.md — repo-map line refs (main.py router block :168→:169, build_system_prompt :261→:288), migration count now-at-0030, add documents.extracted_text (0030) to the encryption gotcha. - docs/README.md — index the new security/ and staging/ subdirs. - frontend/README.md — dir rename new_frontend→frontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral/Playfair/DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal. - backend/tests/README.md — Fixtures & conftest (hermetic Supabase + auth bypass), e2e_staging marker + tests/evals, refreshed test-file table. Deleted (stale/historical): - ROADMAP.md - backend/prompts/refactor-3-chat-tutor/README.md - backend/prompts/refactor-4-syllabus-unification/README.md Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
📝 WalkthroughWalkthroughThis PR updates documentation across the repository: CLAUDE.md and README.md reflect new migration numbering (0030), Gradescope Sync integration, and APP_ENV variable; backend test README adds fixture/conftest and eval details; frontend README describes new architecture; ROADMAP.md and two prompt-pack READMEs are removed. ChangesDocumentation Updates
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
Deploying with |
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs | frontend-staging | 3363707 | Commit Preview URL Branch Preview URL | Jul 08 2026, 07:37 AM |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@README.md`:
- Line 231: The APP_ENV documentation row claims that setting staging adds a
noindex header, but backend/main.py does not implement any IS_STAGING or
X-Robots-Tag handling. Update the README entry for APP_ENV to remove the staging
noindex wording unless you add the corresponding middleware in backend/main.py;
keep the local-dev and SESSION_SECRET fail-closed behavior described accurately.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 4f6a2c30-6106-49e0-a8e9-d6cacab9b78f
📒 Files selected for processing (8)
CLAUDE.mdREADME.mdROADMAP.mdbackend/prompts/refactor-3-chat-tutor/README.mdbackend/prompts/refactor-4-syllabus-unification/README.mdbackend/tests/README.mddocs/README.mdfrontend/README.md
💤 Files with no reviewable changes (3)
- backend/prompts/refactor-4-syllabus-unification/README.md
- ROADMAP.md
- backend/prompts/refactor-3-chat-tutor/README.md
| | `ENCRYPTION_KEY` | ✅ | AES-256-GCM key for column-level encryption (32 bytes as 64 hex chars; generate with `python -c "import secrets; print(secrets.token_hex(32))"`) | | ||
| | `PORT` | — | Backend port (default `5000`) | | ||
| | `FRONTEND_URL` | — | Allowed CORS origin (default `http://localhost:3000`) | | ||
| | `APP_ENV` | — | Deployment environment (default `production`, fail-closed checks). Set `local` for local dev (relaxes `SESSION_SECRET`); set `staging` on the staging deploy (adds a noindex header, still fail-closed). | |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bashset -euo pipefail
rg -n --hidden --glob '!**/node_modules/**''APP_ENV|noindex|SESSION_SECRET' backend frontend .Repository: SaplingLearn/Sapling
Length of output: 27527
🏁 Script executed:
#!/bin/bashset -euo pipefail
echo'--- backend/config.py ---'
sed -n '1,140p' backend/config.py
echoecho'--- search: X-Robots-Tag / IS_STAGING / staging ---'
rg -n 'X-Robots-Tag|IS_STAGING|APP_ENV.*staging|noindex' backendRepository: SaplingLearn/Sapling
Length of output: 4435
🏁 Script executed:
#!/bin/bashset -euo pipefail
echo'--- candidate backend entrypoints ---'
fd -a 'main.py|app.py|middleware.py|config.py' backend frontend
echoecho'--- repo-wide search for runtime noindex/staging code ---'
rg -n --hidden --glob '!**/node_modules/**''X-Robots-Tag|noindex|IS_STAGING|APP_ENV == "staging"|APP_ENV.*staging'.Repository: SaplingLearn/Sapling
Length of output: 4439
🏁 Script executed:
#!/bin/bashset -euo pipefail
wc -l backend/main.py
echo'--- backend/main.py (1-260) ---'
sed -n '1,260p' backend/main.pyRepository: SaplingLearn/Sapling
Length of output: 9698
Drop the staging noindex claim from this row.APP_ENV=local and the fail-closed SESSION_SECRET check exist, but backend/main.py has no IS_STAGING / X-Robots-Tag path. Either add that middleware or remove the staging wording from the docs.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` at line 231, The APP_ENV documentation row claims that setting
staging adds a noindex header, but backend/main.py does not implement any
IS_STAGING or X-Robots-Tag handling. Update the README entry for APP_ENV to
remove the staging noindex wording unless you add the corresponding middleware
in backend/main.py; keep the local-dev and SESSION_SECRET fail-closed behavior
described accurately.
What
Documentation true-up via the update-mds per-doc-baseline rule: each doc was diffed from its own last-touched commit up to
main(windows ranged 368–1064 commits), then updated only from what genuinely drifted. Plus removal of three stale/historical docs. Docs-only — no code changes.Updated (5)
/api/gradescopeendpoints (verified againstbackend/routes/gradescope.py),APP_ENVenv-var row, migrations range0028→0030.main.pyrouter block:168→:169,build_system_prompt:261→:288), migration count now-at-0030, addeddocuments.extracted_text(migration 0030) to the encryption gotcha.security/andstaging/subdirs.new_frontend→frontend, dev port3000, Build & deploy (Cloudflare Workers/OpenNext, build-timeBACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans),(shell)/(public)route groups, current route list, Tweaks-panel removal.e2e_stagingmarker +tests/evals/, refreshed test-file table.Deleted (3 — stale/historical)
ROADMAP.mdbackend/prompts/refactor-3-chat-tutor/README.mdbackend/prompts/refactor-4-syllabus-unification/README.mdNo inbound references to any deleted file (grep-verified), so no dangling links.
Notes
Every edit is grounded in the diff/tree and was reviewed before commit. Two pre-baseline drift items were surfaced but intentionally left out of scope: root README omits
PATCH /api/gradebook/.../curve+GET /api/gradebook/gpa, and CLAUDE.md's encryption list omitsusers.email— both predate their doc's baseline.🤖 Generated with Claude Code
Summary by CodeRabbit
Documentation
Chores