* docs(prototypes): add course sidebar navigation HTML prototypes Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * docs(prototypes): add downloadable zip for course sidebar mockups Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * feat(dashboard): improve student course sidebar navigation Collapse all sections except the active one for students, show section completion as counts (e.g. 3/4), and replace the footer progress card with prev/next controls plus a thin progress bar. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): address PR review and remove sidebar prototypes Remove HTML prototype files from the PR. Match content IDs as exact path segments for active-item resolution, and use content-neutral prev/next labels. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): keep ClassroomIO brand untranslated in powered-by footer Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): restore progress summary in course sidebar footer Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(dashboard): move progress bar below summary in sidebar footer Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * feat(course): add mobile student bottom nav with outline sheet Implement prototype 3 mobile navigation for course learners: a fixed bottom bar with progress ring, prev/next controls, and a sheet showing the progress card plus collapsible course outline with scroll-to-active. Extends public-course UI primitives (ring bottom nav, collapsible sidebar sections, mobile sheet progress slot) and wires them into the authenticated course layout for isCourseLearnerView on lesson/exercise routes. Hides duplicate header prev/next and progress popover on mobile. Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> * fix(course): address review feedback and exclude prototypes - Add .coderabbit.yaml and .greptile/config.json to skip prototypes/** - Document prototypes/ as out-of-scope in AGENTS.md and Greptile rules - Render locked mobile outline rows without href navigation targets - Replace nested IconButton in collapsible section trigger with chevron icon - Reset public-course sidebar section collapse on every mobile sheet reopen Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com> ---------
1.7 KiB
1.7 KiB
Greptile review rules
Repo-specific conventions for code review. See https://www.greptile.com/docs/code-review/custom-standards.
Out of scope for review
The prototypes/ directory contains standalone HTML/CSS design mocks and exploration artifacts. They are not part of the shipped application and should not receive production code review feedback (navigation semantics, a11y, idempotency, etc.). Skip these paths entirely.
One-time admin/ops scripts (packages/db/src/scripts/**)
These are manual, operator-invoked, run-once maintenance scripts (backfills, notifications, migrations). They are not part of the request/runtime path.
- Do not flag missing idempotency / "can resend on rerun" / "can re-process on rerun". Re-run behavior is the operator's responsibility, controlled by an explicit
--executeflag (dry-run by default). This is intentional and not a bug. - These scripts live in
packages/dband have no access to the BullMQ queue or Redis (@cio/jobs), so they send email directly via@cio/email(sendEmail) rather than the runtime's queued, daily-idempotent path. Do not suggest routing them through the queue as a required change.
Plan/usage limit checks
- The org student-cap guard (
assertStudentCapacityOrThrow) reads the count outside the insert transaction. This is a known, accepted best-effort TOCTOU consistent with the existing workspace-allowance check — do not re-flag it as a race-condition bug unless hard atomic enforcement is explicitly requested.
Code style
- Never call an
awaitor a complex/multi-call expression inside an object literal (construction or update). Assign to a well-named local first, then reference it. (Also documented inAGENTS.md.)