chore: improve licensing
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
preview
|
||||
|
||||
/dist/
|
||||
/THIRD-PARTY-LICENSES.txt
|
||||
|
||||
# pixi environments
|
||||
.pixi/*
|
||||
!.pixi/config.toml
|
||||
|
||||
+3
-2
@@ -4,9 +4,10 @@ version = "0.1.0"
|
||||
edition = "2024"
|
||||
rust-version = "1.85"
|
||||
description = "Author, assemble, administer, and analyze leveled course assessments from YAML item banks"
|
||||
authors = ["Alex Maldonado <alexm@scient.ing>"]
|
||||
license = "MIT"
|
||||
authors = ["Scientific Computing Studio <opensource@scient.ing>"]
|
||||
license = "Prosperity-3.0.0"
|
||||
readme = "README.md"
|
||||
publish = false
|
||||
|
||||
[[bin]]
|
||||
name = "coursebank"
|
||||
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
# The Prosperity Public License 3.0.0
|
||||
|
||||
Contributor: Scientific Computing Studio
|
||||
|
||||
Source Code: https://git.scient.ing/education/coursebank
|
||||
|
||||
## Purpose
|
||||
|
||||
This license allows you to use and share this software for noncommercial purposes for free and to try this software for commercial purposes for thirty days.
|
||||
|
||||
## Agreement
|
||||
|
||||
In order to receive this license, you have to agree to its rules.
|
||||
Those rules are both obligations under that agreement and conditions to your license.
|
||||
Don't do anything with this software that triggers a rule you can't or won't follow.
|
||||
|
||||
## Notices
|
||||
|
||||
Make sure everyone who gets a copy of any part of this software from you, with or without changes, also gets the text of this license and the contributor and source code lines above.
|
||||
|
||||
## Commercial Trial
|
||||
|
||||
Limit your use of this software for commercial purposes to a thirty-day trial period.
|
||||
If you use this software for work, your company gets one trial period for all personnel, not one trial per person.
|
||||
|
||||
## Contributions Back
|
||||
|
||||
Developing feedback, changes, or additions that you contribute back to the contributor on the terms of a standardized public software license such as [the Blue Oak Model License 1.0.0](https://blueoakcouncil.org/license/1.0.0), [the Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html), [the MIT license](https://spdx.org/licenses/MIT.html), or [the two-clause BSD license](https://spdx.org/licenses/BSD-2-Clause.html) doesn't count as use for a commercial purpose.
|
||||
|
||||
## Personal Uses
|
||||
|
||||
Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, doesn't count as use for a commercial purpose.
|
||||
|
||||
## Noncommercial Organizations
|
||||
|
||||
Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution doesn't count as use for a commercial purpose regardless of the source of funding or obligations resulting from the funding.
|
||||
|
||||
## Defense
|
||||
|
||||
Don't make any legal claim against anyone accusing this software, with or without changes, alone or with other technology, of infringing any patent.
|
||||
|
||||
## Copyright
|
||||
|
||||
The contributor licenses you to do everything with this software that would otherwise infringe their copyright in it.
|
||||
|
||||
## Patent
|
||||
|
||||
The contributor licenses you to do everything with this software that would otherwise infringe any patents they can license or become able to license.
|
||||
|
||||
## Reliability
|
||||
|
||||
The contributor can't revoke this license.
|
||||
|
||||
## Excuse
|
||||
|
||||
You're excused for unknowingly breaking [Notices](#notices) if you take all practical steps to comply within thirty days of learning you broke the rule.
|
||||
|
||||
## No Liability
|
||||
|
||||
***As far as the law allows, this software comes as is, without any warranty or condition, and the contributor won't be liable to anyone for any damages related to this software or this license, under any kind of legal claim.***
|
||||
@@ -0,0 +1,68 @@
|
||||
# coursebank
|
||||
|
||||
coursebank runs the assessment side of a course as version-controlled data.
|
||||
Questions, exams, grading exports, and the statistics computed from them live as YAML and Parquet files in a git repository, so they can be reviewed in pull requests and tracked as each question is reused across terms.
|
||||
|
||||
It is both a command-line tool and a Rust library.
|
||||
The command line covers the whole loop: author items, validate and lint them, assemble an exam, export it for print or Canvas, ingest the grading export, analyze it, and write the results back onto the items so the next assembly knows how each question has behaved.
|
||||
|
||||
## The files
|
||||
|
||||
A course is a directory of four kinds of file:
|
||||
|
||||
| Path | Holds |
|
||||
|------|-------|
|
||||
| `course.yaml` | course identity, policy, learning objectives, lectures |
|
||||
| `banks/*.yaml` | items, with their design intent and pooled statistics |
|
||||
| `assessments/*.yaml` | what was given, in what order, on what date |
|
||||
| `data/*.parquet` | one row per student per item |
|
||||
|
||||
The first three are hand-editable YAML meant to be read in a diff.
|
||||
The response data is machine-written and stored in Parquet, so pandas, polars, DuckDB, and R can read it without this tool.
|
||||
|
||||
## Building
|
||||
|
||||
coursebank builds with Rust 1.85 or newer (edition 2024).
|
||||
The repository uses [pixi](https://pixi.sh) to pin the toolchain and wrap the common tasks:
|
||||
|
||||
```sh
|
||||
pixi run build # release binary at target/release/coursebank
|
||||
pixi run tests
|
||||
pixi run check # format, lint, test, and doc build
|
||||
```
|
||||
|
||||
Plain cargo works too with a recent toolchain:
|
||||
|
||||
```sh
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Create a course, validate it, then assemble and export an exam from the pool:
|
||||
|
||||
```sh
|
||||
coursebank init --code "BIOSC 1540" --title "Computational Biology" --term 2026s
|
||||
coursebank validate
|
||||
coursebank assemble exam-4 --levels 1=6,2=8,3=10,4=6 --forms 2
|
||||
coursebank export typst exam-4 --form A
|
||||
```
|
||||
|
||||
Run `coursebank --help` for the full command set.
|
||||
|
||||
## License
|
||||
|
||||
coursebank is source-available under the [Prosperity Public License 3.0.0](LICENSE.md).
|
||||
It is not an OSI-approved open-source license.
|
||||
Noncommercial use is free, and the license treats educational institutions, public research organizations, government, and similar noncommercial bodies as noncommercial regardless of how they are funded.
|
||||
Commercial use gets a thirty-day trial; past that it requires a commercial license.
|
||||
|
||||
For a commercial license, contact `licensing@scient.ing`.
|
||||
|
||||
Bundled dependencies keep their own licenses, reproduced in `THIRD-PARTY-LICENSES.txt` in each release.
|
||||
|
||||
## Contributing
|
||||
|
||||
If you want to contribute, open an issue first.
|
||||
Contributed code will need a contributor license agreement so it can ship under both the free and the commercial license.
|
||||
That agreement is not in place yet, so outside patches cannot be merged for now.
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
coursebank — Third-Party Software Notices
|
||||
==========================================
|
||||
|
||||
coursebank is distributed with the third-party, open-source components listed
|
||||
below. coursebank's own terms are separate and are found in LICENSE.md; the
|
||||
notices here cover only the bundled dependencies, each reproduced under the
|
||||
license it is provided in.
|
||||
|
||||
Summary
|
||||
-------
|
||||
{{#each overview}}
|
||||
{{{name}}} — {{count}} component(s)
|
||||
{{/each}}
|
||||
|
||||
{{#each licenses}}
|
||||
================================================================================
|
||||
{{{name}}} ({{id}})
|
||||
================================================================================
|
||||
|
||||
Applies to:
|
||||
{{#each used_by}}
|
||||
- {{{crate.name}}} v{{crate.version}}{{#if crate.repository}} <{{{crate.repository}}}>{{/if}}
|
||||
{{/each}}
|
||||
|
||||
{{{text}}}
|
||||
|
||||
{{/each}}
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
# Configuration for `cargo about generate`, which produces the
|
||||
# THIRD-PARTY-LICENSES.txt shipped alongside every coursebank binary.
|
||||
|
||||
accepted = [
|
||||
"MIT",
|
||||
"Apache-2.0",
|
||||
"Apache-2.0 WITH LLVM-exception",
|
||||
"BSD-2-Clause",
|
||||
"BSD-3-Clause",
|
||||
"ISC",
|
||||
"Zlib",
|
||||
"Unicode-3.0",
|
||||
"Unicode-DFS-2016",
|
||||
"BSL-1.0",
|
||||
"CDLA-Permissive-2.0",
|
||||
"0BSD",
|
||||
"Unlicense",
|
||||
"CC0-1.0",
|
||||
]
|
||||
|
||||
targets = [
|
||||
"x86_64-unknown-linux-gnu",
|
||||
"x86_64-apple-darwin",
|
||||
"aarch64-apple-darwin",
|
||||
]
|
||||
|
||||
ignore-build-dependencies = true
|
||||
ignore-dev-dependencies = true
|
||||
|
||||
private = { ignore = true }
|
||||
|
||||
workarounds = [
|
||||
"unicode-ident",
|
||||
]
|
||||
@@ -33,6 +33,15 @@ install = "cargo install --path . --locked"
|
||||
check = { depends-on = ["format", "lint", "tests", "check-docs", "doc-build"] }
|
||||
build-lean = "cargo build --release --no-default-features"
|
||||
|
||||
setup-tools = "cargo install cargo-about --locked --features cli"
|
||||
licenses = "cargo about generate about.hbs -o THIRD-PARTY-LICENSES.txt"
|
||||
|
||||
[tasks.dist]
|
||||
description = "Assemble a release bundle (binary + license notices) in dist/"
|
||||
depends-on = ["build", "licenses"]
|
||||
cmd = "mkdir -p dist && cp target/release/coursebank dist/ && cp LICENSE.md THIRD-PARTY-LICENSES.txt dist/"
|
||||
|
||||
|
||||
[tasks.cb]
|
||||
cmd = "cargo run --release --quiet --"
|
||||
description = "Run the CLI, e.g., `pixi run cb validate --course examples/course`"
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Psychometrics: what the responses say about the items and about the students.
|
||||
//!
|
||||
//! ```text
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Writing statistics back onto the items.
|
||||
//!
|
||||
//! This is the step that makes the whole system compound. Analysis that lives only
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Classical item analysis.
|
||||
//!
|
||||
//! The corrected point-biserial is the one to look at first. It correlates
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Item response theory: marginal maximum likelihood estimation by EM.
|
||||
//!
|
||||
//! The estimator here was prototyped and validated against a real 24-examinee,
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Turning responses into something you can say to a student.
|
||||
//!
|
||||
//! Item analysis tells you about items. This module tells you about people: which
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Support for writing items and building assessments from them.
|
||||
//!
|
||||
//! The three modules here are what you interact with before an exam exists, and
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Emitting JSON Schema for the YAML formats.
|
||||
//!
|
||||
//! The point of this module is autocomplete. Every editor with a YAML language
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Authoring-quality checks: is this item *well written*?
|
||||
//!
|
||||
//! Validation asks whether a file is usable. Linting asks the harder question,
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Drawing an assessment from the item pool.
|
||||
//!
|
||||
//! Assembly is a constrained draw, not a random sample, and the constraints are
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The command-line argument model.
|
||||
//!
|
||||
//! Everything here is `clap` derive input: the top-level [`Cli`], the [`Command`]
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Command handlers, grouped by workflow stage.
|
||||
//!
|
||||
//! [`run`] is the single dispatch point: it matches the parsed [`Command`] and
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The responses-to-report pipeline.
|
||||
//!
|
||||
//! Once an assessment has been given, responses come back through [`ingest`],
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Managing items and building assessments from them.
|
||||
//!
|
||||
//! [`bank`] and [`assessment`] create and list the two record types. [`assemble`]
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Turning an assembled assessment into deliverables.
|
||||
//!
|
||||
//! [`export`] writes the three output formats (a Canvas QTI package, rendered
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Setting up a course and checking it stays well-formed.
|
||||
//!
|
||||
//! These are the commands you reach for before and around authoring: create the
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Getting grading data in, and keeping it.
|
||||
//!
|
||||
//! Every platform exports a different shape and none of them is analyzable, so
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Reading Canvas's "Student Analysis" quiz export.
|
||||
//!
|
||||
//! Canvas exports one wide CSV for the whole quiz. After the student columns come
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Reading Gradescope's per-question CSV exports.
|
||||
//!
|
||||
//! Gradescope exports one file per question, named `1.csv` through `N.csv`, in
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The canonical response row.
|
||||
//!
|
||||
//! Every grading platform exports a different shape. Gradescope gives one file
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Where response data lives on disk.
|
||||
//!
|
||||
//! One file per administration, under `data/`, named after the administration id.
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Parquet reading and writing, isolated so the rest of the crate never touches
|
||||
//! Arrow types.
|
||||
//!
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! One error type for the whole crate.
|
||||
//!
|
||||
//! Every fallible operation returns [`Error`]. Variants carry the path or
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Turning course data into documents.
|
||||
//!
|
||||
//! | Module | Produces | For |
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Exporting an assessment as a Canvas-importable QTI 1.2 package.
|
||||
//!
|
||||
//! QTI 1.2 is a fussy, half-abandoned standard, and Canvas reads a particular
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Writing reports for students and for yourself.
|
||||
//!
|
||||
//! Two audiences, two documents, and the difference between them is not tone but
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Rendering a printed exam with Typst.
|
||||
//!
|
||||
//! Typst rather than LaTeX because the toolchain is one binary with no package
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! What gets emitted, and in what shape.
|
||||
//!
|
||||
//! This module holds the knobs that used to be `format!` calls. The split is
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The data a template is given.
|
||||
//!
|
||||
//! One structure, built once, emitted three ways: as a Typst dictionary for the
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Loading a Typst file and splicing generated data into it.
|
||||
//!
|
||||
//! The previous version of this module built a document with `format!`. That made
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! A small writer for Typst literals.
|
||||
//!
|
||||
//! Everything this crate injects into a template is data, not layout, and data
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Long-form documentation: setup, authoring, and worked tutorials.
|
||||
//!
|
||||
//! Everything in this module is prose. The modules below hold no code, no types,
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Plumbing shared by more than one command handler.
|
||||
//!
|
||||
//! Loading and resolving ([`load`], [`load_record`], [`pick_form`]), building an
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! # coursebank
|
||||
//!
|
||||
//! A tool for running the assessment side of a course as version-controlled data.
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The `coursebank` command-line interface.
|
||||
//!
|
||||
//! Command names follow the workflow rather than the data model: you `assemble` an
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The data model: the four kinds of file, and the taxonomy they are written against.
|
||||
//!
|
||||
//! These modules define what a course is as far as this tool is concerned, and
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The assessment record: what you actually asked, in what order, on what date.
|
||||
//!
|
||||
//! This file is the hinge of the whole tool, and it is worth being explicit about
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The bank file: a collection of items scoped to a topic or a lecture.
|
||||
//!
|
||||
//! One bank per topic (or per lecture, if that suits how you teach) is the unit
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Loading a whole course at once, and reporting on what it contains.
|
||||
//!
|
||||
//! A [`Catalog`] is every bank in a course, indexed so that an item can be found
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The course file: identity plus the registries every bank references.
|
||||
//!
|
||||
//! Learning objectives and lectures are declared once, in `course.yaml`, and
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The usage history of a course, derived by scanning assessment records.
|
||||
//!
|
||||
//! There is deliberately no separate ledger file. A ledger duplicates
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The item: one assessable question, with both the intent it was written with
|
||||
//! and the evidence it has produced.
|
||||
//!
|
||||
|
||||
+4
-5
@@ -1,9 +1,8 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The on-disk layout of a course directory.
|
||||
//!
|
||||
//! Keeping the layout in one type means every command agrees on where things
|
||||
//! live, and a future rearrangement touches this file only. It is deliberately
|
||||
//! separate from the course *schema* in [`crate::course`]: this module is about
|
||||
//! where files sit on disk, not what they contain.
|
||||
|
||||
use std::path::PathBuf;
|
||||
|
||||
|
||||
@@ -1,12 +1,9 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! The pedagogical vocabulary: levels, cognitive processes, error types, and
|
||||
//! workflow states.
|
||||
//!
|
||||
//! These are enums rather than strings on purpose. A typo in
|
||||
//! `cognitive_process` should fail to parse, not silently create a new category
|
||||
//! that then splits your coverage report in two. Just as importantly, the
|
||||
//! relation between a level and the processes that belong to it is encoded here
|
||||
//! in one place, so "level 3, cognitive_process: recall" is a validation error
|
||||
//! rather than a label that quietly contradicts itself.
|
||||
|
||||
use std::fmt;
|
||||
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Small self-contained utilities with no knowledge of courses or assessments.
|
||||
//!
|
||||
//! Everything here exists because pulling in a crate for it was the worse trade.
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! A minimal calendar date, serialized as `YYYY-MM-DD`.
|
||||
//!
|
||||
//! Course data is full of dates: when a lecture ran, when an item was authored,
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Content fingerprints and student pseudonyms.
|
||||
//!
|
||||
//! Two different jobs need two different hashes, and conflating them would be a
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Converting the authoring markup into HTML, plain text, and Typst.
|
||||
//!
|
||||
//! Stems are written in a small markup that is a subset of Typst with a few
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! A small deterministic random number generator.
|
||||
//!
|
||||
//! Every random choice this tool makes must be reproducible: if you regenerate
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! Reading and writing the YAML and JSON files the tool owns.
|
||||
//!
|
||||
//! Two small conveniences live here. First, every read and write attaches the
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
// SPDX-License-Identifier: Prosperity-3.0.0
|
||||
// Copyright Scientific Computing Studio
|
||||
// Source: https://git.scient.ing/education/coursebank
|
||||
|
||||
//! A minimal ZIP writer, stored (uncompressed) entries only.
|
||||
//!
|
||||
//! Canvas needs a `.zip` to import a QTI package, and that is the only reason
|
||||
|
||||
Reference in New Issue
Block a user