Spec: Doc Task Magnitude — "Within the class page we have 'Content Upload'. This content upload allows..." (the doc sentence is unfinished; scope confirmed from surrounding context: course materials uploaded against a class become context for that class).
Current state
classes/[runId]/page.tsx shows a read-only Linked notes card. Notes get a classId only when created elsewhere and associated after the fact. There is no upload affordance on the class page itself.
Scope
- Upload control on the class detail page accepting the same types as notes/upload (png, jpeg, webp, gif, pdf).
- Uploaded material is parsed through the existing note-generation pipeline and auto-associated to the class via
note.classId — no second extraction path.
- Multi-file upload with per-file progress and per-file failure, so one bad PDF does not sink the batch.
- Uploaded content is embedded with class metadata so it joins the class's retrievable context.
- Distinguish uploaded course material (lecture slides, problem sets, textbook chapters) from student-authored notes in the class view.
Depends on
- Syllabus/class embedding with metadata, for the context half
Acceptance criteria
Spec: Doc Task Magnitude — "Within the class page we have 'Content Upload'. This content upload allows..." (the doc sentence is unfinished; scope confirmed from surrounding context: course materials uploaded against a class become context for that class).
Current state
classes/[runId]/page.tsx shows a read-only Linked notes card. Notes get a
classIdonly when created elsewhere and associated after the fact. There is no upload affordance on the class page itself.Scope
note.classId— no second extraction path.Depends on
Acceptance criteria