Skip to main content

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.

Metadata

Release files for duecheck 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for duecheck 0.2.1
File Size Uploaded Provenance
duecheck-0.2.1.tar.gz 51.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for duecheck 0.2.1
File Interpreter ABI Platform
duecheck-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 96.5 kB

Release files / duecheck-0.2.1.tar.gz

Download URL duecheck-0.2.1.tar.gz
Size 51.9 kB
Tags Source
SHA-256 checksum
How to use checksums
eda4076944f9e52b4fa2850eeacf620e27d9d0346ecd04df5a3f870812d4e8b8
BLAKE2b-256 checksum
How to use checksums
fd1a9b2b0522b22e255d84a8f6ddf5ab6d7622bacb8c1663fd7a0eebfd6cc22b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.

Transparency log

Release files / duecheck-0.2.1-py3-none-any.whl

Download URL duecheck-0.2.1-py3-none-any.whl
Size 44.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9a7c8853d7a23680d92de6f8390fa8e0b972e0f1aad3fd854471f3820f45d1b1
BLAKE2b-256 checksum
How to use checksums
b18e615687ab70635e4b7cf167a15801f3509c6de4e26b3b58422aea33a3e941
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.

Transparency log

Security for duecheck 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for duecheck-0.2.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page