Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Changelog

## Unreleased
## 2.2.0, 2026-10-03

- Misconception diagnosis for arithmetic practice. A wrong answer to a whole-number or fraction-addition prompt walks a fixed tree of yes-or-no questions and gets a cause, such as `misrecruited.no_carry` or `slip.one_digit`. `tutor misconceptions` and `learn_tutor_misconceptions` now count causes per objective in a `diagnoses` field. The diagnosis never shows the correct answer. On 50 held-out teacher-labelled answers it agreed with the teacher on 96%; details in `docs/MISCONCEPTION-DIAGNOSIS.md`.

Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,11 @@ yours. Zero external dependencies, Node 20 or newer.
## Install

```bash
npm install -g @harperz9/learn@2.0.0
npm install -g @harperz9/learn@2.2.0
learn status
```

Or run it without installing: `npx -y @harperz9/learn@2.0.0 status`. From a clone:
Or run it without installing: `npx -y @harperz9/learn@2.2.0 status`. From a clone:

```bash
git clone https://github.com/HarperZ9/learn.git
Expand Down Expand Up @@ -199,7 +199,7 @@ just that something was.
## MCP server

```bash
npx -y @harperz9/learn@2.0.0 mcp # or `learn mcp`, or the `learn-mcp` bin
npx -y @harperz9/learn@2.2.0 mcp # or `learn mcp`, or the `learn-mcp` bin
```

Serves fifteen tools over stdio JSON-RPC: `learn_doctor`, `learn_status`, `learn_verify`,
Expand All @@ -215,7 +215,7 @@ file. The MCP surface never performs a real course action or answers a graded st

## Status

- **Release:** `2.1.0` candidate (unpublished); published baseline `2.0.0`; commands `learn` and `learn-mcp`; Node >= 20; zero external dependencies
- **Release:** `2.2.0` on npm as `@harperz9/learn`; commands `learn` and `learn-mcp`; Node >= 20; zero external dependencies
(ES modules, `node:test`).
- **CLI surface:** `learn status`, `learn doctor`, `learn mcp`, `learn run/resume/verify/receipt`,
`learn assist`, `learn visualize`, and `learn tutor <plan|record|mastery|receipt|reverify|
Expand Down Expand Up @@ -298,8 +298,8 @@ Built by **[Zain Dana Harper](https://harperz9.github.io)** in Seattle: evidence

## Local client packages

The 2.1.0 source candidate includes native Windows client packages. Publication
and marketplace acceptance remain separate release gates.
The 2.2.0 GitHub release includes native Windows client packages. Marketplace
acceptance remains a separate gate.

### Installation

Expand Down
10 changes: 5 additions & 5 deletions USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ prove *you* know it.
From npm (zero external dependencies):

```bash
npm install -g @harperz9/learn@2.0.0
npm install -g @harperz9/learn@2.2.0
learn status
```

Or without installing: `npx -y @harperz9/learn@2.0.0 status`. From a source checkout:
Or without installing: `npx -y @harperz9/learn@2.2.0 status`. From a source checkout:

```bash
git clone https://github.com/HarperZ9/learn.git
Expand Down Expand Up @@ -95,7 +95,7 @@ of the step it allowed. See [docs/smoke.md](docs/smoke.md) for a full live-LMS w
## MCP

```bash
npx -y @harperz9/learn@2.0.0 mcp # or `learn mcp`, `learn-mcp`, or `node src/mcp.mjs`
npx -y @harperz9/learn@2.2.0 mcp # or `learn mcp`, `learn-mcp`, or `node src/mcp.mjs`
```

Serves fifteen tools over stdio JSON-RPC (`learn_doctor`, `learn_status`, `learn_verify`,
Expand Down Expand Up @@ -128,5 +128,5 @@ useful bug report this tool can receive.

See [the client package guide](client-plugin/README.md) for scoped skills, portable MCP configuration and same-release archives.

The current source candidate targets 2.1.0. Registry install examples above
continue to name the published baseline until release qualification finishes.
The current source version is 2.2.0, and its GitHub release carries the matching
client packages.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@harperz9/learn",
"version": "2.1.0",
"version": "2.2.0",
"type": "module",
"description": "Accountable credential & coursework engine — automates course logistics, halts at every graded step for the human, and emits a tamper-evident receipt of how a credential was earned. Learning aid, not a bypass.",
"license": "LicenseRef-fair-source",
Expand Down
4 changes: 3 additions & 1 deletion scripts/check-release.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ const read = (rel) => readFileSync(join(ROOT, rel), "utf8");

function changelogSection(text, version) {
const lines = text.split(/\r?\n/);
const start = lines.findIndex((l) => l.trim() === `## ${version}`);
// A heading may carry a date after the version: "## 2.2.0" or "## 2.2.0, 2026-10-03".
const heading = new RegExp(`^## ${version.replace(/\./g, "\\.")}(?:[ ,(]|$)`);
const start = lines.findIndex((l) => heading.test(l.trim()));
if (start < 0) return null;
let end = lines.findIndex((l, i) => i > start && l.startsWith("## "));
if (end < 0) end = lines.length;
Expand Down
2 changes: 1 addition & 1 deletion src/index.mjs
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const version = "2.1.0";
export const version = "2.2.0";
4 changes: 2 additions & 2 deletions tests/aid-status-doctor.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import { doctor } from "../src/doctor.mjs";
import { status } from "../src/status.mjs";
import { version } from "../src/index.mjs";

test("version is bumped to 2.1.0", () => {
assert.equal(version, "2.1.0");
test("version is bumped to 2.2.0", () => {
assert.equal(version, "2.2.0");
});

test("status advertises the telos render bridge and the aid invariant", () => {
Expand Down
4 changes: 2 additions & 2 deletions tests/learn-study-status-doctor.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import { doctor } from "../src/doctor.mjs";
import { status } from "../src/status.mjs";
import { version } from "../src/index.mjs";

test("version is bumped to 2.1.0", () => {
assert.equal(version, "2.1.0");
test("version is bumped to 2.2.0", () => {
assert.equal(version, "2.2.0");
});

test("status describes the learning loop (schedule/misconception/retrieval/explain/predict/map/study) under a dedicated field", () => {
Expand Down
Loading