diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index e1cee07..3f56f96 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "sage-instructor", - "version": "1.7.0", + "version": "1.7.1", "description": "Adaptive programming instructor — structured courses with discovery-first teaching, AskUserQuestion interactions, progress tracking, and pluggable curricula. Powered by the Three Axes Framework.", "author": { "name": "Lux Solari", diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d8936f..4a1a551 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,21 @@ # Changelog -## [1.7.0] — 2026-07-02 +## [1.7.1] — 2026-07-02 + +### Fixed +- **`scripts/check_framework_drift.py` crashed on Windows exactly when it + had something real to show.** Discovered while doing a fourth documentation + pass over the upstream `three-axes-framework` repo: editing that repo's + `SKILL.md` (a command-naming fix, unrelated to this project) caused genuine + drift, and running the drift checker to confirm it crashed with + `UnicodeEncodeError` trying to print the diff — Windows consoles default + stdout to the system codepage (e.g. `cp1252`), which can't encode + characters like the "↓" in SKILL.md's tier diagram. Forced UTF-8 output via + `sys.stdout.reconfigure(encoding="utf-8")` at the top of `main()`. Verified + against the actual pending drift: the script now prints the diff correctly, + and the upstream change turned out to be cosmetic (command-name formatting, + not a conceptual framework change) — accepted as the new baseline via + `--update-snapshot` rather than requiring a `philosophy.md` edit. ### Added - **`three-axes-framework` declared as a `plugin.json` dependency.** Claude diff --git a/README.md b/README.md index af02c66..db56b9a 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Sage Instructor [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) -[![Version](https://img.shields.io/badge/version-1.7.0-informational.svg)](CHANGELOG.md) +[![Version](https://img.shields.io/badge/version-1.7.1-informational.svg)](CHANGELOG.md) A Claude Code plugin that turns Claude into **Sage** — an adaptive programming instructor that teaches through structured courses with discovery-first pedagogy, interactive exercises, and progress tracking. diff --git a/scripts/check_framework_drift.py b/scripts/check_framework_drift.py index 1d41fc6..956ef06 100644 --- a/scripts/check_framework_drift.py +++ b/scripts/check_framework_drift.py @@ -36,6 +36,12 @@ def fetch_upstream() -> str: def main() -> int: + # Windows consoles default stdout to the system codepage (e.g. cp1252), + # which can't encode characters like "↓" in SKILL.md's tier diagram -- + # crashing exactly when there's a real diff to show. Force UTF-8 output + # regardless of platform/terminal default. + sys.stdout.reconfigure(encoding="utf-8") + update_snapshot = "--update-snapshot" in sys.argv try: diff --git a/skills/sage-instructor/references/.three-axes-upstream-snapshot.md b/skills/sage-instructor/references/.three-axes-upstream-snapshot.md index 143792b..b531ee2 100644 --- a/skills/sage-instructor/references/.three-axes-upstream-snapshot.md +++ b/skills/sage-instructor/references/.three-axes-upstream-snapshot.md @@ -29,7 +29,7 @@ Tier 1 — Persistent Profile (baseline, cross-session) ↓ overridden by Tier 2 — Session Commands (ephemeral, current session only) - ~/.claude/three-axes-session.json written by /three-axes mode and /three-axes set + ~/.claude/three-axes-session.json written by /three-axes-mode and /three-axes-set Cleared on startup, preserved across compact/resume ↓ overridden by