docs: true up knowledge docs to current main; drop stale docs - #328

Merged
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup
Jul 8, 2026
Merged

docs: true up knowledge docs to current main; drop stale docs#328
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup

Conversation

@AndresL230

@AndresL230AndresL230 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

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)

  • README.md — new Gradescope Sync feature + the 9 /api/gradescope endpoints (verified against backend/routes/gradescope.py), APP_ENV env-var row, migrations range 00280030.
  • CLAUDE.md — corrected repo-map pointers (main.py router block :168:169, build_system_prompt:261:288), migration count now-at-0030, added documents.extracted_text (migration 0030) to the encryption gotcha.
  • docs/README.md — index the new security/ and staging/ subdirs.
  • frontend/README.md — dir rename new_frontendfrontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal.
  • backend/tests/README.mdFixtures & conftest (hermetic Supabase stub + auth bypass), e2e_staging marker + tests/evals/, refreshed test-file table.

Deleted (3 — stale/historical)

  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md

No 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 omits users.email — both predate their doc's baseline.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded setup and usage docs for Gradescope syncing, including supported sign-in methods, grade refresh behavior, and related API actions.
    • Updated backend and frontend guides with current testing, deployment, environment, and route information.
    • Clarified documentation structure for security and staging notes.
  • Chores

    • Removed outdated roadmap and prompt-pack notes.

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>
@coderabbitai

coderabbitaiBot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Documentation Updates

Layer / File(s)Summary
Core repo docs updates
CLAUDE.md, README.md
Updates repo map references, migration index to 0030, encryption gotchas, and adds Gradescope Sync feature, tech stack, API endpoints, APP_ENV variable, and migration file range documentation.
Backend test documentation
backend/tests/README.md
Documents new autouse fixtures (Supabase stub, session-auth bypass), updated test file matrix, integration/E2E skip behavior, and cassette-based eval modes.
Frontend and docs directory updates
docs/README.md, frontend/README.md
Adds security/staging directories to docs overview and rewrites frontend README's visual system, run instructions, build/deploy, layout, and routes sections.
Removed obsolete documentation
ROADMAP.md, backend/prompts/refactor-3-chat-tutor/README.md, backend/prompts/refactor-4-syllabus-unification/README.md
Deletes outdated roadmap and completed refactor prompt-pack documentation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly reflects the docs true-up and stale-doc removal in this PR.
Description check✅ PassedThe description covers the main changes and rationale, but it does not follow the repository template sections exactly.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-mds-trueup

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

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

@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
frontend-staging3363707Commit Preview URL

Branch Preview URL
Jul 08 2026, 07:37 AM

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e887251 and 3363707.

📒 Files selected for processing (8)
  • CLAUDE.md
  • README.md
  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md
  • backend/tests/README.md
  • docs/README.md
  • frontend/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

Comment threadREADME.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). |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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' backend

Repository: 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.py

Repository: 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.

@AndresL230
AndresL230 merged commit f788ed3 into mainJul 8, 2026
6 checks passed
@AndresL230
AndresL230 deleted the docs/update-mds-trueup branch July 8, 2026 07:42
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

@AndresL230
, '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: true up knowledge docs to current main; drop stale docs - #328

Merged
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup
Jul 8, 2026
Merged

docs: true up knowledge docs to current main; drop stale docs#328
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup

Conversation

@AndresL230

@AndresL230AndresL230 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

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)

  • README.md — new Gradescope Sync feature + the 9 /api/gradescope endpoints (verified against backend/routes/gradescope.py), APP_ENV env-var row, migrations range 00280030.
  • CLAUDE.md — corrected repo-map pointers (main.py router block :168:169, build_system_prompt:261:288), migration count now-at-0030, added documents.extracted_text (migration 0030) to the encryption gotcha.
  • docs/README.md — index the new security/ and staging/ subdirs.
  • frontend/README.md — dir rename new_frontendfrontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal.
  • backend/tests/README.mdFixtures & conftest (hermetic Supabase stub + auth bypass), e2e_staging marker + tests/evals/, refreshed test-file table.

Deleted (3 — stale/historical)

  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md

No 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 omits users.email — both predate their doc's baseline.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded setup and usage docs for Gradescope syncing, including supported sign-in methods, grade refresh behavior, and related API actions.
    • Updated backend and frontend guides with current testing, deployment, environment, and route information.
    • Clarified documentation structure for security and staging notes.
  • Chores

    • Removed outdated roadmap and prompt-pack notes.

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>
@coderabbitai

coderabbitaiBot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Documentation Updates

Layer / File(s)Summary
Core repo docs updates
CLAUDE.md, README.md
Updates repo map references, migration index to 0030, encryption gotchas, and adds Gradescope Sync feature, tech stack, API endpoints, APP_ENV variable, and migration file range documentation.
Backend test documentation
backend/tests/README.md
Documents new autouse fixtures (Supabase stub, session-auth bypass), updated test file matrix, integration/E2E skip behavior, and cassette-based eval modes.
Frontend and docs directory updates
docs/README.md, frontend/README.md
Adds security/staging directories to docs overview and rewrites frontend README's visual system, run instructions, build/deploy, layout, and routes sections.
Removed obsolete documentation
ROADMAP.md, backend/prompts/refactor-3-chat-tutor/README.md, backend/prompts/refactor-4-syllabus-unification/README.md
Deletes outdated roadmap and completed refactor prompt-pack documentation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly reflects the docs true-up and stale-doc removal in this PR.
Description check✅ PassedThe description covers the main changes and rationale, but it does not follow the repository template sections exactly.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-mds-trueup

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

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

@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
frontend-staging3363707Commit Preview URL

Branch Preview URL
Jul 08 2026, 07:37 AM

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e887251 and 3363707.

📒 Files selected for processing (8)
  • CLAUDE.md
  • README.md
  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md
  • backend/tests/README.md
  • docs/README.md
  • frontend/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

Comment threadREADME.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). |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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' backend

Repository: 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.py

Repository: 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.

@AndresL230
AndresL230 merged commit f788ed3 into mainJul 8, 2026
6 checks passed
@AndresL230
AndresL230 deleted the docs/update-mds-trueup branch July 8, 2026 07:42
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

@AndresL230
, '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: true up knowledge docs to current main; drop stale docs - #328

Merged
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup
Jul 8, 2026
Merged

docs: true up knowledge docs to current main; drop stale docs#328
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup

Conversation

@AndresL230

@AndresL230AndresL230 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

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)

  • README.md — new Gradescope Sync feature + the 9 /api/gradescope endpoints (verified against backend/routes/gradescope.py), APP_ENV env-var row, migrations range 00280030.
  • CLAUDE.md — corrected repo-map pointers (main.py router block :168:169, build_system_prompt:261:288), migration count now-at-0030, added documents.extracted_text (migration 0030) to the encryption gotcha.
  • docs/README.md — index the new security/ and staging/ subdirs.
  • frontend/README.md — dir rename new_frontendfrontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal.
  • backend/tests/README.mdFixtures & conftest (hermetic Supabase stub + auth bypass), e2e_staging marker + tests/evals/, refreshed test-file table.

Deleted (3 — stale/historical)

  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md

No 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 omits users.email — both predate their doc's baseline.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded setup and usage docs for Gradescope syncing, including supported sign-in methods, grade refresh behavior, and related API actions.
    • Updated backend and frontend guides with current testing, deployment, environment, and route information.
    • Clarified documentation structure for security and staging notes.
  • Chores

    • Removed outdated roadmap and prompt-pack notes.

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>
@coderabbitai

coderabbitaiBot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Documentation Updates

Layer / File(s)Summary
Core repo docs updates
CLAUDE.md, README.md
Updates repo map references, migration index to 0030, encryption gotchas, and adds Gradescope Sync feature, tech stack, API endpoints, APP_ENV variable, and migration file range documentation.
Backend test documentation
backend/tests/README.md
Documents new autouse fixtures (Supabase stub, session-auth bypass), updated test file matrix, integration/E2E skip behavior, and cassette-based eval modes.
Frontend and docs directory updates
docs/README.md, frontend/README.md
Adds security/staging directories to docs overview and rewrites frontend README's visual system, run instructions, build/deploy, layout, and routes sections.
Removed obsolete documentation
ROADMAP.md, backend/prompts/refactor-3-chat-tutor/README.md, backend/prompts/refactor-4-syllabus-unification/README.md
Deletes outdated roadmap and completed refactor prompt-pack documentation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly reflects the docs true-up and stale-doc removal in this PR.
Description check✅ PassedThe description covers the main changes and rationale, but it does not follow the repository template sections exactly.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-mds-trueup

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

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

@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
frontend-staging3363707Commit Preview URL

Branch Preview URL
Jul 08 2026, 07:37 AM

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e887251 and 3363707.

📒 Files selected for processing (8)
  • CLAUDE.md
  • README.md
  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md
  • backend/tests/README.md
  • docs/README.md
  • frontend/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

Comment threadREADME.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). |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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' backend

Repository: 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.py

Repository: 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.

@AndresL230
AndresL230 merged commit f788ed3 into mainJul 8, 2026
6 checks passed
@AndresL230
AndresL230 deleted the docs/update-mds-trueup branch July 8, 2026 07:42
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

@AndresL230
, '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: true up knowledge docs to current main; drop stale docs - #328

Merged
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup
Jul 8, 2026
Merged

docs: true up knowledge docs to current main; drop stale docs#328
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup

Conversation

@AndresL230

@AndresL230AndresL230 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

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)

  • README.md — new Gradescope Sync feature + the 9 /api/gradescope endpoints (verified against backend/routes/gradescope.py), APP_ENV env-var row, migrations range 00280030.
  • CLAUDE.md — corrected repo-map pointers (main.py router block :168:169, build_system_prompt:261:288), migration count now-at-0030, added documents.extracted_text (migration 0030) to the encryption gotcha.
  • docs/README.md — index the new security/ and staging/ subdirs.
  • frontend/README.md — dir rename new_frontendfrontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal.
  • backend/tests/README.mdFixtures & conftest (hermetic Supabase stub + auth bypass), e2e_staging marker + tests/evals/, refreshed test-file table.

Deleted (3 — stale/historical)

  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md

No 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 omits users.email — both predate their doc's baseline.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded setup and usage docs for Gradescope syncing, including supported sign-in methods, grade refresh behavior, and related API actions.
    • Updated backend and frontend guides with current testing, deployment, environment, and route information.
    • Clarified documentation structure for security and staging notes.
  • Chores

    • Removed outdated roadmap and prompt-pack notes.

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>
@coderabbitai

coderabbitaiBot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Documentation Updates

Layer / File(s)Summary
Core repo docs updates
CLAUDE.md, README.md
Updates repo map references, migration index to 0030, encryption gotchas, and adds Gradescope Sync feature, tech stack, API endpoints, APP_ENV variable, and migration file range documentation.
Backend test documentation
backend/tests/README.md
Documents new autouse fixtures (Supabase stub, session-auth bypass), updated test file matrix, integration/E2E skip behavior, and cassette-based eval modes.
Frontend and docs directory updates
docs/README.md, frontend/README.md
Adds security/staging directories to docs overview and rewrites frontend README's visual system, run instructions, build/deploy, layout, and routes sections.
Removed obsolete documentation
ROADMAP.md, backend/prompts/refactor-3-chat-tutor/README.md, backend/prompts/refactor-4-syllabus-unification/README.md
Deletes outdated roadmap and completed refactor prompt-pack documentation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly reflects the docs true-up and stale-doc removal in this PR.
Description check✅ PassedThe description covers the main changes and rationale, but it does not follow the repository template sections exactly.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-mds-trueup

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

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

@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
frontend-staging3363707Commit Preview URL

Branch Preview URL
Jul 08 2026, 07:37 AM

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e887251 and 3363707.

📒 Files selected for processing (8)
  • CLAUDE.md
  • README.md
  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md
  • backend/tests/README.md
  • docs/README.md
  • frontend/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

Comment threadREADME.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). |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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' backend

Repository: 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.py

Repository: 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.

@AndresL230
AndresL230 merged commit f788ed3 into mainJul 8, 2026
6 checks passed
@AndresL230
AndresL230 deleted the docs/update-mds-trueup branch July 8, 2026 07:42
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

@AndresL230
, '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: true up knowledge docs to current main; drop stale docs - #328

Merged
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup
Jul 8, 2026
Merged

docs: true up knowledge docs to current main; drop stale docs#328
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup

Conversation

@AndresL230

@AndresL230AndresL230 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

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)

  • README.md — new Gradescope Sync feature + the 9 /api/gradescope endpoints (verified against backend/routes/gradescope.py), APP_ENV env-var row, migrations range 00280030.
  • CLAUDE.md — corrected repo-map pointers (main.py router block :168:169, build_system_prompt:261:288), migration count now-at-0030, added documents.extracted_text (migration 0030) to the encryption gotcha.
  • docs/README.md — index the new security/ and staging/ subdirs.
  • frontend/README.md — dir rename new_frontendfrontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal.
  • backend/tests/README.mdFixtures & conftest (hermetic Supabase stub + auth bypass), e2e_staging marker + tests/evals/, refreshed test-file table.

Deleted (3 — stale/historical)

  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md

No 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 omits users.email — both predate their doc's baseline.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded setup and usage docs for Gradescope syncing, including supported sign-in methods, grade refresh behavior, and related API actions.
    • Updated backend and frontend guides with current testing, deployment, environment, and route information.
    • Clarified documentation structure for security and staging notes.
  • Chores

    • Removed outdated roadmap and prompt-pack notes.

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>
@coderabbitai

coderabbitaiBot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Documentation Updates

Layer / File(s)Summary
Core repo docs updates
CLAUDE.md, README.md
Updates repo map references, migration index to 0030, encryption gotchas, and adds Gradescope Sync feature, tech stack, API endpoints, APP_ENV variable, and migration file range documentation.
Backend test documentation
backend/tests/README.md
Documents new autouse fixtures (Supabase stub, session-auth bypass), updated test file matrix, integration/E2E skip behavior, and cassette-based eval modes.
Frontend and docs directory updates
docs/README.md, frontend/README.md
Adds security/staging directories to docs overview and rewrites frontend README's visual system, run instructions, build/deploy, layout, and routes sections.
Removed obsolete documentation
ROADMAP.md, backend/prompts/refactor-3-chat-tutor/README.md, backend/prompts/refactor-4-syllabus-unification/README.md
Deletes outdated roadmap and completed refactor prompt-pack documentation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly reflects the docs true-up and stale-doc removal in this PR.
Description check✅ PassedThe description covers the main changes and rationale, but it does not follow the repository template sections exactly.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-mds-trueup

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

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

@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
frontend-staging3363707Commit Preview URL

Branch Preview URL
Jul 08 2026, 07:37 AM

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e887251 and 3363707.

📒 Files selected for processing (8)
  • CLAUDE.md
  • README.md
  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md
  • backend/tests/README.md
  • docs/README.md
  • frontend/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

Comment threadREADME.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). |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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' backend

Repository: 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.py

Repository: 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.

@AndresL230
AndresL230 merged commit f788ed3 into mainJul 8, 2026
6 checks passed
@AndresL230
AndresL230 deleted the docs/update-mds-trueup branch July 8, 2026 07:42
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

@AndresL230
, '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: true up knowledge docs to current main; drop stale docs - #328

Merged
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup
Jul 8, 2026
Merged

docs: true up knowledge docs to current main; drop stale docs#328
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup

Conversation

@AndresL230

@AndresL230AndresL230 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

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)

  • README.md — new Gradescope Sync feature + the 9 /api/gradescope endpoints (verified against backend/routes/gradescope.py), APP_ENV env-var row, migrations range 00280030.
  • CLAUDE.md — corrected repo-map pointers (main.py router block :168:169, build_system_prompt:261:288), migration count now-at-0030, added documents.extracted_text (migration 0030) to the encryption gotcha.
  • docs/README.md — index the new security/ and staging/ subdirs.
  • frontend/README.md — dir rename new_frontendfrontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal.
  • backend/tests/README.mdFixtures & conftest (hermetic Supabase stub + auth bypass), e2e_staging marker + tests/evals/, refreshed test-file table.

Deleted (3 — stale/historical)

  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md

No 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 omits users.email — both predate their doc's baseline.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded setup and usage docs for Gradescope syncing, including supported sign-in methods, grade refresh behavior, and related API actions.
    • Updated backend and frontend guides with current testing, deployment, environment, and route information.
    • Clarified documentation structure for security and staging notes.
  • Chores

    • Removed outdated roadmap and prompt-pack notes.

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>
@coderabbitai

coderabbitaiBot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Documentation Updates

Layer / File(s)Summary
Core repo docs updates
CLAUDE.md, README.md
Updates repo map references, migration index to 0030, encryption gotchas, and adds Gradescope Sync feature, tech stack, API endpoints, APP_ENV variable, and migration file range documentation.
Backend test documentation
backend/tests/README.md
Documents new autouse fixtures (Supabase stub, session-auth bypass), updated test file matrix, integration/E2E skip behavior, and cassette-based eval modes.
Frontend and docs directory updates
docs/README.md, frontend/README.md
Adds security/staging directories to docs overview and rewrites frontend README's visual system, run instructions, build/deploy, layout, and routes sections.
Removed obsolete documentation
ROADMAP.md, backend/prompts/refactor-3-chat-tutor/README.md, backend/prompts/refactor-4-syllabus-unification/README.md
Deletes outdated roadmap and completed refactor prompt-pack documentation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly reflects the docs true-up and stale-doc removal in this PR.
Description check✅ PassedThe description covers the main changes and rationale, but it does not follow the repository template sections exactly.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-mds-trueup

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

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

@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
frontend-staging3363707Commit Preview URL

Branch Preview URL
Jul 08 2026, 07:37 AM

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e887251 and 3363707.

📒 Files selected for processing (8)
  • CLAUDE.md
  • README.md
  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md
  • backend/tests/README.md
  • docs/README.md
  • frontend/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

Comment threadREADME.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). |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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' backend

Repository: 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.py

Repository: 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.

@AndresL230
AndresL230 merged commit f788ed3 into mainJul 8, 2026
6 checks passed
@AndresL230
AndresL230 deleted the docs/update-mds-trueup branch July 8, 2026 07:42
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

@AndresL230
, '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: true up knowledge docs to current main; drop stale docs - #328

Merged
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup
Jul 8, 2026
Merged

docs: true up knowledge docs to current main; drop stale docs#328
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup

Conversation

@AndresL230

@AndresL230AndresL230 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

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)

  • README.md — new Gradescope Sync feature + the 9 /api/gradescope endpoints (verified against backend/routes/gradescope.py), APP_ENV env-var row, migrations range 00280030.
  • CLAUDE.md — corrected repo-map pointers (main.py router block :168:169, build_system_prompt:261:288), migration count now-at-0030, added documents.extracted_text (migration 0030) to the encryption gotcha.
  • docs/README.md — index the new security/ and staging/ subdirs.
  • frontend/README.md — dir rename new_frontendfrontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal.
  • backend/tests/README.mdFixtures & conftest (hermetic Supabase stub + auth bypass), e2e_staging marker + tests/evals/, refreshed test-file table.

Deleted (3 — stale/historical)

  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md

No 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 omits users.email — both predate their doc's baseline.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded setup and usage docs for Gradescope syncing, including supported sign-in methods, grade refresh behavior, and related API actions.
    • Updated backend and frontend guides with current testing, deployment, environment, and route information.
    • Clarified documentation structure for security and staging notes.
  • Chores

    • Removed outdated roadmap and prompt-pack notes.

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>
@coderabbitai

coderabbitaiBot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Documentation Updates

Layer / File(s)Summary
Core repo docs updates
CLAUDE.md, README.md
Updates repo map references, migration index to 0030, encryption gotchas, and adds Gradescope Sync feature, tech stack, API endpoints, APP_ENV variable, and migration file range documentation.
Backend test documentation
backend/tests/README.md
Documents new autouse fixtures (Supabase stub, session-auth bypass), updated test file matrix, integration/E2E skip behavior, and cassette-based eval modes.
Frontend and docs directory updates
docs/README.md, frontend/README.md
Adds security/staging directories to docs overview and rewrites frontend README's visual system, run instructions, build/deploy, layout, and routes sections.
Removed obsolete documentation
ROADMAP.md, backend/prompts/refactor-3-chat-tutor/README.md, backend/prompts/refactor-4-syllabus-unification/README.md
Deletes outdated roadmap and completed refactor prompt-pack documentation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly reflects the docs true-up and stale-doc removal in this PR.
Description check✅ PassedThe description covers the main changes and rationale, but it does not follow the repository template sections exactly.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-mds-trueup

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

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

@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
frontend-staging3363707Commit Preview URL

Branch Preview URL
Jul 08 2026, 07:37 AM

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e887251 and 3363707.

📒 Files selected for processing (8)
  • CLAUDE.md
  • README.md
  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md
  • backend/tests/README.md
  • docs/README.md
  • frontend/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

Comment threadREADME.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). |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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' backend

Repository: 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.py

Repository: 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.

@AndresL230
AndresL230 merged commit f788ed3 into mainJul 8, 2026
6 checks passed
@AndresL230
AndresL230 deleted the docs/update-mds-trueup branch July 8, 2026 07:42
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

@AndresL230
, '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: true up knowledge docs to current main; drop stale docs - #328

Merged
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup
Jul 8, 2026
Merged

docs: true up knowledge docs to current main; drop stale docs#328
AndresL230 merged 1 commit into
mainfrom
docs/update-mds-trueup

Conversation

@AndresL230

@AndresL230AndresL230 commented Jul 8, 2026

Copy link
Copy Markdown
Collaborator

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)

  • README.md — new Gradescope Sync feature + the 9 /api/gradescope endpoints (verified against backend/routes/gradescope.py), APP_ENV env-var row, migrations range 00280030.
  • CLAUDE.md — corrected repo-map pointers (main.py router block :168:169, build_system_prompt:261:288), migration count now-at-0030, added documents.extracted_text (migration 0030) to the encryption gotcha.
  • docs/README.md — index the new security/ and staging/ subdirs.
  • frontend/README.md — dir rename new_frontendfrontend, dev port 3000, Build & deploy (Cloudflare Workers/OpenNext, build-time BACKEND_URL), real fonts (Spectral / Playfair Display / DM Sans), (shell)/(public) route groups, current route list, Tweaks-panel removal.
  • backend/tests/README.mdFixtures & conftest (hermetic Supabase stub + auth bypass), e2e_staging marker + tests/evals/, refreshed test-file table.

Deleted (3 — stale/historical)

  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md

No 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 omits users.email — both predate their doc's baseline.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded setup and usage docs for Gradescope syncing, including supported sign-in methods, grade refresh behavior, and related API actions.
    • Updated backend and frontend guides with current testing, deployment, environment, and route information.
    • Clarified documentation structure for security and staging notes.
  • Chores

    • Removed outdated roadmap and prompt-pack notes.

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>
@coderabbitai

coderabbitaiBot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This 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.

Changes

Documentation Updates

Layer / File(s)Summary
Core repo docs updates
CLAUDE.md, README.md
Updates repo map references, migration index to 0030, encryption gotchas, and adds Gradescope Sync feature, tech stack, API endpoints, APP_ENV variable, and migration file range documentation.
Backend test documentation
backend/tests/README.md
Documents new autouse fixtures (Supabase stub, session-auth bypass), updated test file matrix, integration/E2E skip behavior, and cassette-based eval modes.
Frontend and docs directory updates
docs/README.md, frontend/README.md
Adds security/staging directories to docs overview and rewrites frontend README's visual system, run instructions, build/deploy, layout, and routes sections.
Removed obsolete documentation
ROADMAP.md, backend/prompts/refactor-3-chat-tutor/README.md, backend/prompts/refactor-4-syllabus-unification/README.md
Deletes outdated roadmap and completed refactor prompt-pack documentation.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly reflects the docs true-up and stale-doc removal in this PR.
Description check✅ PassedThe description covers the main changes and rationale, but it does not follow the repository template sections exactly.
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.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/update-mds-trueup

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

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

@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
frontend-staging3363707Commit Preview URL

Branch Preview URL
Jul 08 2026, 07:37 AM

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between e887251 and 3363707.

📒 Files selected for processing (8)
  • CLAUDE.md
  • README.md
  • ROADMAP.md
  • backend/prompts/refactor-3-chat-tutor/README.md
  • backend/prompts/refactor-4-syllabus-unification/README.md
  • backend/tests/README.md
  • docs/README.md
  • frontend/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

Comment threadREADME.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). |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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' backend

Repository: 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.py

Repository: 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.

@AndresL230
AndresL230 merged commit f788ed3 into mainJul 8, 2026
6 checks passed
@AndresL230
AndresL230 deleted the docs/update-mds-trueup branch July 8, 2026 07:42
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

@AndresL230