Skip to content

Milestone 6: private Academy media storage#22

Merged
botsarefuture merged 1 commit into
mainfrom
feat/academy-media-storage
Jul 17, 2026
Merged

Milestone 6: private Academy media storage#22
botsarefuture merged 1 commit into
mainfrom
feat/academy-media-storage

Conversation

@botsarefuture

Copy link
Copy Markdown
Owner

Purpose

Complete the Educational Media Pipeline by letting authors upload teaching files without touching source code while keeping drafts private and published delivery immutable.

What changed

  • adds a separate Academy GridFS bucket with a 100 MB per-file limit
  • streams uploads through a bounded spool and verifies conservative MIME signatures
  • computes SHA-256 checksums and deduplicates matching uploads
  • keeps uploaded files private until a published media revision references them
  • serves published files with immutable caching, ETags, conditional requests, and byte ranges
  • adds author upload controls for teaching files and WebVTT captions
  • validates the pathway illustration replacement and Finnish localized metadata through staging
  • marks Milestone 6 complete and records storage limits and orphan cleanup debt

Security and privacy

Teaching assets stay same-origin and never share the encrypted learner-recording bucket. SVG and arbitrary MIME types are rejected. PDF files download as attachments. Draft file ids return 404 publicly.

Validation

  • npm test (32 tests)
  • PYTHONPATH=server python3 -m unittest discover -s server -p "test_*.py" (25 tests)
  • npm run build
  • npm run check:version
  • live staging upload remained 404 before publication
  • duplicate upload returned the same immutable file id
  • author → reviewer → publisher replacement v2 and Finnish localization workflows
  • exact lesson v2 and course v2 publication and learner rendering from GridFS
  • byte-for-byte delivery, checksum ETag, 304, and 206 range response
  • browser audit at 390px with no overflow and 44px upload action

Known limitations

Abandoned draft uploads need a scheduled cleanup job. GridFS is suitable for the current free curriculum, but very large or high-traffic video should later use the documented storage adapter boundary.

@botsarefuture
botsarefuture marked this pull request as ready for review July 17, 2026 13:42
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@botsarefuture
botsarefuture merged commit 1dc20e6 into main Jul 17, 2026
3 checks passed
@botsarefuture
botsarefuture deleted the feat/academy-media-storage branch July 17, 2026 13:42
Sign up for free to 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