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 schedule install
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.

macOS-first passive scheduling is available through:

duecheck schedule install
duecheck schedule status
duecheck schedule remove

The scheduler installs a LaunchAgent that runs the normal pull flow and refreshes report.html. If a token is not already stored in config, the install step may embed the currently resolved token in a private local runner script so the scheduled job does not depend on shell env inheritance.

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.

Experimental Extension Shell

The first browser-wrapper move is now in-repo at wrappers/chrome-extension/.

  • MV3 popup shell
  • seeded from the real DueCheck demo artifact bundle
  • same Today board, change feed, and course-risk language as the local report
  • no external JavaScript dependencies

Load it unpacked in Chrome if you want a click-open preview of the wrapper direction. Real Canvas sync, IndexedDB history, and DOM injection are still a separate strike.

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 schedule install [--hour H] [--minute M] [--json]
  duecheck schedule status [--json]
  duecheck schedule remove [--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 schedule ... for macOS-first passive daily sync and report refresh
  • duecheck redact for safe, reproducible bug-report bundles
  • runtime precedence of CLI > env > config > hard default
  • wrappers/chrome-extension/ for the experimental MV3 wrapper shell seeded from the real demo bundle

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.1.tar.gz (51.9 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.1-py3-none-any.whl (44.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: duecheck-0.2.1.tar.gz
  • Upload date:
  • Size: 51.9 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.1.tar.gz
Algorithm Hash digest
SHA256 eda4076944f9e52b4fa2850eeacf620e27d9d0346ecd04df5a3f870812d4e8b8
MD5 930d92ac7d25c38ce998b53aa73ff56b
BLAKE2b-256 fd1a9b2b0522b22e255d84a8f6ddf5ab6d7622bacb8c1663fd7a0eebfd6cc22b

See more details on using hashes here.

Provenance

The following attestation bundles were made for duecheck-0.2.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: duecheck-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 44.6 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9a7c8853d7a23680d92de6f8390fa8e0b972e0f1aad3fd854471f3820f45d1b1
MD5 d9655d56c363dbad50fcc38425347fb4
BLAKE2b-256 b18e615687ab70635e4b7cf167a15801f3509c6de4e26b3b58422aea33a3e941

See more details on using hashes here.

Provenance

The following attestation bundles were made for duecheck-0.2.1-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