Skip to content
cccskills
FreePublished on GitHub

review-student-prs

Review and merge student exercise PRs during TP sessions. Arguments: <repo-url> [--class <class-id>] [--timeslot <HH:MM-HH:MM>] [--dry-run]

The English summary is being prepared. Showing the original description.

Works withGitHub
See how to install

Files included (1)

  • SKILL.md6.8 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Review Student PRs

Review, validate, and intelligently merge student exercise PRs submitted during TP sessions.

Target: $ARGUMENTS

Arguments

  • repo-url: GitHub repository URL (e.g., https://github.com/jsboigeECE/2026-ECE-Ing4-Fin-IA-Projet1-Gr01)
  • --class <class-id>: Class identifier (e.g., Gr01, Gr02, Gr03)
  • --timeslot <HH:MM-HH:MM>: Authorized submission window (e.g., 08:00-12:00). PRs outside this window are flagged
  • --dry-run: Review only, no merge or commit

Process

Phase 1 - Discovery & Identification

  1. Fetch open PRs from the target repo using gh pr list
  2. Filter by timeslot - Only PRs created within the authorized submission window
  3. Identify students:
    • Parse PR title/body for student name, group, notebook claimed
    • Cross-reference GitHub username with submission account
    • If available, match against inscription spreadsheet (G:\Mon Drive\MyIA\Formation\ECE\2026\)
  4. Flag anomalies: PRs outside timeslot, duplicate claims on same notebook, unknown accounts

Phase 2 - Code Review

For each valid PR:

  1. Fetch PR diff using gh pr diff <number>
  2. Identify modified notebooks and changed cells
  3. Validate exercise completion:
    • Check that exercise cells have been filled (not empty or placeholder)
    • Verify code is syntactically correct
    • Check markdown cells for explanations if required
  4. Execution validation (MANDATORY - do not skip):
    • Checkout PR branch locally
    • Execute the modified exercise cell(s) and all prerequisite cells
    • For Python notebooks: python scripts/notebook_tools/notebook_helpers.py execute <path> --verbose
    • For .NET notebooks: use MCP cell-by-cell execution
    • Record execution results (pass/fail, output, errors)
    • If cell fails to execute: mark as PARTIAL, note the error
    • If error is environment-only (missing package on student machine but code is correct): accept with note
    • If error is code logic: mark as INVALID
  5. Detect copy-paste / uncommenting:
    • Compare student's code against the "Exemple guide" in the same notebook
    • If the exercise cell was solved by uncommenting provided solution code: flag as TRIVIAL
    • If this was due to solutions being provided in comments (our error): accept but note it
    • If the student wrote original code different from any example: mark as ORIGINAL
  6. Quality assessment (per exercise):
    • Code correctness (executes without error)
    • Code originality (ORIGINAL vs TRIVIAL vs COPY)
    • Code quality (reasonable approach, variable naming, structure)
    • Explanation quality (if markdown present)
    • Score: VALID / PARTIAL / INVALID

Phase 3 - Report Generation

Generate a correction report in reports/corrections/ (gitignored):

reports/corrections/YYYY-MM-DD_<class-id>_review.md

Report format:

# TP Review - <date> - <class-id>

## Summary
- PRs reviewed: N
- Valid exercises: N (+0.5 pts each)
- Partial: N (manual review needed)
- Invalid: N

## Per-Student Results

### <Student Name> (GitHub: @username)
- **PR**: #<number> - <title>
- **Notebook**: <notebook-name>
- **Timeslot**: <created-at> (VALID/LATE)
- **Exercises**:
  | Exercise | Status | Score | Notes |
  |----------|--------|-------|-------|
  | Ex 1     | VALID  | +0.5  | Clean implementation |
  | Ex 2     | PARTIAL| 0     | Missing explanation |
- **Total bonus**: +X.X points

Phase 4 - Intelligent Merge

For each VALID exercise (skip if --dry-run):

  1. Transform exercise result into example:

    • The student's completed exercise cell becomes a new example cell
    • Rewrite the preceding markdown to frame it as "Example - <topic>" instead of "Exercise"
    • Add brief commentary on the approach used
    • Preserve the student's code as-is (it's their contribution)
  2. Create replacement exercise:

    • Add a NEW exercise cell after the newly created example
    • The new exercise must be:
      • Different from the one just solved (not a trivial variant)
      • Not directly derivable from the example above
      • At a similar difficulty level
      • Related to the same topic/concept
    • Add appropriate markdown instructions for the new exercise
  3. Curate redundancy:

    • If multiple students solved the same exercise across PRs:
      • Keep the most pedagogically valuable solution as example
      • Remove redundant examples that don't add new insight
      • Ensure the notebook flow remains coherent
    • If a notebook accumulates too many examples (>3 consecutive examples on same concept):
      • Keep the 2 most distinct/illustrative ones
      • Remove the others
      • Adjust markdown transitions
  4. Commit changes:

    feat(ece): integrate student exercise <notebook> - <student> (+0.5 bonus)
    
    - Exercise result converted to example
    - New replacement exercise added
    - Reviewed and validated during TP <date>
    
    Co-Authored-By: <Student Name> <student-email-if-available>
    Co-Authored-By: Claude-Code <noreply@anthropic.com>
    
  5. Push to the main branch of the target student repository (the repo-url argument), after all PRs for the session are processed. That repository's charter governs this push. If the integration lands in jsboige/CoursIA, never push to main: open one PR for the session instead (CLAUDE.md §A, git-workflow.md).

Phase 5 - Cleanup

  1. Close merged PRs with a comment thanking the student and confirming bonus
  2. Update the correction report with final merge status
  3. Summary output to the user with:
    • Number of exercises validated
    • Bonus points attributed per student
    • Any issues requiring manual attention
    • List of notebooks updated with new exercises

Important Notes

  • Timing: Run between classes (e.g., noon-2pm) so afternoon class gets fresh exercises
  • Merge order: Process PRs in submission order (FIFO)
  • Conflict resolution: If two PRs modify the same notebook, merge the first, rebase the second
  • Security: Never execute untrusted code outside the notebook sandbox
  • Backup: Create a local branch backup before merging: backup/pre-merge-<date>
  • No force push: All merges are regular merges or fast-forwards
  • Report confidentiality: Reports in reports/corrections/ are gitignored, never committed

Notebook Types

SeriesKernelExecution Method
Probas.NET C#MCP cell-by-cell
GameTheoryPython (WSL)papermill or notebook_helpers
MLMixed (.NET + Python)Depends on notebook

Spreadsheet Reference

Student inscriptions and evaluations:

  • G:\Mon Drive\MyIA\Formation\ECE\2026\ - CSV/XLSX files
  • Match GitHub usernames to student names for bonus attribution

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Cycle 30 min du secrétaire vérificateur myia-po-2028:CoursIA-3. Atteste en tiers, du plus ancien au plus récent, les PRs ouvertes sans dossier valide (chaque READY, une fois lu et approuvé par ai-01, est mergé sans attendre son cycle), et fait circuler l'information sur workspace-CoursIA-3.

The English summary is being prepared. Showing the original description.

jsboige/CoursIA16Updated Oct 22, 2026

Analyze a Slidev deck qualitatively — organ reports (structure, composition) + vision AI on rendered PNGs. Arguments: <deck_id> [--slides 1,5,10]

The English summary is being prepared. Showing the original description.

jsboige/CoursIA16Updated Oct 22, 2026

Build or improve Jupyter notebooks iteratively with quality scoring. Arguments: <new|improve|fix> <path> [--topic] [--domain] [--level] [--quality] [--max-iter]

The English summary is being prepared. Showing the original description.

jsboige/CoursIA16Updated Oct 22, 2026

Detect cell-ordering / enchainement problems in Jupyter notebooks (canonical-order slippage, misplaced or forgotten cells). Arguments: [target] [--severity HIGH|MED|LOW] [--json]

The English summary is being prepared. Showing the original description.

jsboige/CoursIA16Updated Oct 22, 2026

Clean up and reorganize markdown in enriched Jupyter notebooks. Arguments: [target] [--dry-run] [--aggressive] [--hierarchy-only]

The English summary is being prepared. Showing the original description.

jsboige/CoursIA16Updated Oct 22, 2026

Cycle de coordination ai-01 (coordinateur UNIQUEMENT — jamais sur un worker). Lit memoire + dashboards + inbox + GitHub, merge les PRs pretes, tranche les design-gates, dispatche des grains par lane, reporte. Arguments: [--dispatch] [--focus <topic>]

The English summary is being prepared. Showing the original description.

jsboige/CoursIA16Updated Oct 22, 2026

See all skills by jsboige

Report a problem with this skill