Skip to main content

Canvas early warning engine — track assignments, compute academic risk.

Project description

DueCheck

DueCheck tells you what changed in Canvas since your last check.

DueCheck local report demo

  • See new deadlines, missing work, and escalations without re-reading every course page.
  • Keep a local assignment ledger and compare today against the last good snapshot.
  • Generate a static report you can open in a browser with no hosted service and no runtime dependencies.

DueCheck demo flow

Quick Start

After v0.2.0 is published

pip install duecheck
duecheck demo --out-dir ./demo --open

From source / development

git clone https://github.com/cjchanh/duecheck.git
cd duecheck
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
duecheck demo --out-dir ./demo --open

Demo Flow

No Canvas account needed:

duecheck demo --out-dir ./demo --open
duecheck verify --out-dir ./demo --json
duecheck report --html --out-dir ./demo --open

What It Produces

  • report.html — self-contained local report with a Today board, change feed, and ledger table
  • ledger.json — persistent assignment ledger with typed artifact metadata
  • delta.json — structured diff between the current run and the previous ledger state
  • changes.md — markdown changelog generated from the delta
  • risk.json — rule-based academic risk summary
  • runs/ — immutable per-run snapshots used for history and repair

Example Output

# Assignment Changes
_Pulled: 2026-03-05T12:00:00Z_

## Summary
- new: 1
- became_missing: 1
- escalated: 1
- deadline_moved_later: 1

Canvas Quickstart

Get a Canvas API token from: Canvas > Settings > Approved Integrations > New Access Token.

export CANVAS_TOKEN="your-token-here"
duecheck --canvas-url https://canvas.yourschool.edu --out-dir ./my-classes

First-Time Setup

If you want to run DueCheck more than once without retyping your Canvas URL and output directory, initialize local CLI defaults:

duecheck init
duecheck doctor
duecheck

Config precedence is:

CLI flags > environment variables > config file > hard default

If you choose to save a Canvas token with duecheck init, it is stored as plaintext on disk in your local config file. DueCheck does not claim to encrypt it.

Safe Bug Reports

If you hit a real issue, generate a redacted bundle before opening an issue:

duecheck redact --out-dir ./my-classes --dest ./duecheck-bugreport
duecheck verify --out-dir ./duecheck-bugreport --json
duecheck report --html --out-dir ./duecheck-bugreport

The redacted bundle keeps artifact structure, statuses, dates, counts, and change types, but replaces course names, assignment names, source keys, and derived item identities.

CLI Reference

duecheck --canvas-url URL --out-dir DIR [options]

Core options:
  --canvas-token TOKEN       Canvas token to use directly for this run
  --token-env VAR           Env var with Canvas token (default: CANVAS_TOKEN)
  --course-filter COURSE    Filter to specific courses
  --grade-threshold N       Risk threshold (default: 80.0)
  --repair                  Rebuild delta from existing ledger
  --fail-on TOKEN           Exit 2 on HIGH|MEDIUM|escalated|missing
  --json                    Output summary as JSON

Extra commands:
  duecheck init [--yes] [--print-path]
  duecheck demo --out-dir DIR [--json] [--open]
  duecheck doctor [--out-dir DIR] [--check-auth] [--json]
  duecheck redact --out-dir DIR --dest DIR [--json]
  duecheck verify --out-dir DIR [--json]
  duecheck report --html --out-dir DIR [--output PATH] [--json] [--open]

Technical Notes

DueCheck is a stdlib-only Python engine for Canvas assignment tracking. It:

  1. Pulls courses, assignments, and missing submissions from Canvas.
  2. Builds a typed ledger of assignment state with schema_version, engine_version, and source_adapter.
  3. Computes a structured delta with change types like new, became_missing, escalated, cleared, and additive deadline movement annotations.
  4. Scores academic risk with deterministic rules instead of heuristics or AI.
  5. Validates artifacts before writing them, then writes through temp files plus atomic replace.

The CLI UX layer adds:

  • duecheck init for local config bootstrap at ~/.config/duecheck/config.json
  • duecheck doctor for local diagnostics before you file an issue
  • duecheck redact for safe, reproducible bug-report bundles
  • runtime precedence of CLI > env > config > hard default

Backward compatibility is preserved for older artifacts through migration shims:

  • legacy confidence still loads
  • produced artifacts write only severity_label
  • import paths from duecheck.__init__ stay stable

Schemas

Machine-readable schemas ship inside the package at duecheck/schemas/:

duecheck verify uses a matching stdlib-only structural validator against the same artifact contract.

Architecture

duecheck/
  adapter.py        Canvas adapter
  cli.py            CLI entrypoint
  delta.py          Delta computation
  ledger.py         Ledger build and migration
  renderers/        Markdown and HTML rendering
  risk.py           Rule-based risk scoring
  schemas/          Packaged JSON Schemas
  types.py          Shared types and artifact models
  validate.py       Stdlib artifact validation

Development

pytest -q
ruff check .
python3 -m build
twine check dist/*

Community

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

duecheck-0.2.0.tar.gz (46.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

duecheck-0.2.0-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

Details for the file duecheck-0.2.0.tar.gz.

File metadata

  • Download URL: duecheck-0.2.0.tar.gz
  • Upload date:
  • Size: 46.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for duecheck-0.2.0.tar.gz
Algorithm Hash digest
SHA256 bb39d5fa18144f6d4b128aa33d9642738977d1ebc82ca0fa3b17cc8b67d4e219
MD5 e4f0157393ecb84f01e582c1941acdeb
BLAKE2b-256 e9c3d73319bff4e457f83dae6f7d63a3fb7df264104c746266652a6aa4d7bddb

See more details on using hashes here.

Provenance

The following attestation bundles were made for duecheck-0.2.0.tar.gz:

Publisher: release.yml on cjchanh/duecheck

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file duecheck-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: duecheck-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 40.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for duecheck-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25aae971117891a420d4638755bf67349d67f0400432bfb7a2d5030b04c384a9
MD5 bb6ec96e96b2c3031c67917240b259b3
BLAKE2b-256 96876ecb92c3930c18fca0c79a30a6fd19d4557705f4058570b1e8bdd088192a

See more details on using hashes here.

Provenance

The following attestation bundles were made for duecheck-0.2.0-py3-none-any.whl:

Publisher: release.yml on cjchanh/duecheck

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page