Skip to content

refactor: split Rust core and CLI and remove Python API (OSS-308) - #13

Merged
Acture merged 2 commits into
masterfrom
feature/oss-308-rust-core-cli
Oct 4, 2026
Merged

Acture merged 2 commits into
masterfrom
feature/oss-308-rust-core-cli

Conversation

@Acture

@Acture Acture commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

ScriptMark now exposes its Rust core and CLI directly under src/core and src/cli. The CLI depends on the core, while Canvas HTTP, SQLite, terminal UI and presentation remain in the CLI crate. This removes the extra src/crates layer and the unused external Python API, PyO3/Maturin packaging and wheel/PyPI release jobs. Python execution for student assignments, teacher checkers and reference solutions remains supported.

Workspace dependencies, existing tests and fixtures, CI, crate publication and current documentation follow the new layout. CSV/XLSX grade-sheet export from master is preserved in the core, with its CLI integration tests adapted to the new paths.

Validation on 1449ee4: 425 workspace tests, Clippy with warnings denied and formatting passed locally; GitHub CI also passed. Both crates passed packaging and build verification in a fresh target directory. The original target's temporary registry reused an older same-version core archive, so that failed attempt was retained separately. Earlier refactor validation also covered actionlint, CLI startup, core dependency isolation, and a fresh remote clone with source fixtures and notes initialized.

Linear: OSS-308.

Copilot AI balanced review requested due to automatic review settings October 4, 2026 13:17

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@coderabbitai

coderabbitai Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 40 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f7aa3848-b967-4850-8df3-951fc86dd965
📥 Commits

Reviewing files that changed from the base of the PR and between cf5cab8 and 1449ee4.

⛔ Files ignored due to path filters (2)
  • src/cli/tests/fixtures/hw1/local/roster.csv is excluded by !**/*.csv
  • src/core/tests/fixtures/archives/m3_default.rar is excluded by !**/*.rar
📒 Files selected for processing (90)
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .gitignore
  • CLAUDE.md
  • Cargo.toml
  • README.md
  • pyproject.toml
  • src/cli/Cargo.toml
  • src/cli/src/canvas/bundle.rs
  • src/cli/src/canvas/client.rs
  • src/cli/src/canvas/mod.rs
  • src/cli/src/db/mod.rs
  • src/cli/src/db/queries.rs
  • src/cli/src/db/results.rs
  • src/cli/src/db/roster.rs
  • src/cli/src/db/schema.rs
  • src/cli/src/display.rs
  • src/cli/src/lib.rs
  • src/cli/src/main.rs
  • src/cli/src/report.rs
  • src/cli/src/report_template.html
  • src/cli/src/tui/app.rs
  • src/cli/src/tui/mod.rs
  • src/cli/src/tui/ui.rs
  • src/cli/tests/canvas_fetch.rs
  • src/cli/tests/cli.rs
  • src/cli/tests/examples.rs
  • src/cli/tests/fixtures/hw1/canvas/assignment.json
  • src/cli/tests/fixtures/hw1/canvas/files/1001/lab1.py
  • src/cli/tests/fixtures/hw1/canvas/files/1002/draft.py
  • src/cli/tests/fixtures/hw1/canvas/files/1003/lab1.py
  • src/cli/tests/fixtures/hw1/canvas/files/1004/lab1.py
  • src/cli/tests/fixtures/hw1/canvas/files/1005/lab1.py
  • src/cli/tests/fixtures/hw1/legacy_results.json
  • src/cli/tests/fixtures/hw1/local/submissions/0024010003_lab1.py
  • src/cli/tests/fixtures/hw1/local/submissions/2024010001_lab1.py
  • src/cli/tests/fixtures/hw1/local/submissions/2024010002_lab1.py
  • src/cli/tests/fixtures/hw1/local/submissions/2024010005_notes.txt
  • src/cli/tests/fixtures/hw1/local/submissions/24010003_lab1.py
  • src/cli/tests/fixtures/hw1/local/submissions/_scratch_v2.py
  • src/cli/tests/grade_sheet.rs
  • src/cli/tests/input_equivalence.rs
  • src/cli/tests/matching.rs
  • src/cli/tests/record.rs
  • src/core/Cargo.toml
  • src/core/src/archive.rs
  • src/core/src/assignment.rs
  • src/core/src/checker/builtin.rs
  • src/core/src/checker/mod.rs
  • src/core/src/checker/python_checker.rs
  • src/core/src/checker/rhai_checker.rs
  • src/core/src/discovery.rs
  • src/core/src/export.rs
  • src/core/src/grading.rs
  • src/core/src/input/canvas.rs
  • src/core/src/input/mod.rs
  • src/core/src/lib.rs
  • src/core/src/matching.py
  • src/core/src/matching.rs
  • src/core/src/models/config.rs
  • src/core/src/models/mod.rs
  • src/core/src/models/result.rs
  • src/core/src/models/spec.rs
  • src/core/src/models/submission.rs
  • src/core/src/record.rs
  • src/core/src/roster.rs
  • src/core/src/runner/answers.rs
  • src/core/src/runner/executor.rs
  • src/core/src/runner/frozen.rs
  • src/core/src/runner/generation.rs
  • src/core/src/runner/generator.rs
  • src/core/src/runner/harness.py
  • src/core/src/runner/judge.rs
  • src/core/src/runner/linter.rs
  • src/core/src/runner/mod.rs
  • src/core/src/runner/oracle.rs
  • src/core/src/runner/orchestrator.rs
  • src/core/src/runner/prepare.rs
  • src/core/src/runner/python.rs
  • src/core/src/runner/records.rs
  • src/core/src/runner/sandbox.rs
  • src/core/src/similarity.rs
  • src/core/src/spec_loader.rs
  • src/core/tests/generated.rs
  • src/core/tests/harness.rs
  • src/core/tests/integration.rs
  • src/core/tests/oracle.rs
  • src/crates/scriptmark-py/Cargo.toml
  • src/crates/scriptmark-py/src/lib.rs
  • src/python/scriptmark/__init__.py
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

@ghfind-review ghfind-review Bot added the review: high ghfind author score; see https://ghfind.com label Oct 4, 2026

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@Acture
Acture merged commit 63da87d into master Oct 4, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: high ghfind author score; see https://ghfind.com

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants