From ca523d3bcad111e7f1f7dcf740392e5b43c8d633 Mon Sep 17 00:00:00 2001 From: Lux Solari Date: Thu, 2 Jul 2026 15:57:39 -0300 Subject: [PATCH] Release 1.7.1: fix drift-script crash on non-UTF-8 consoles Discovered while doing a fourth documentation pass over the upstream three-axes-framework repo: a command-naming fix there (unrelated to this project) caused genuine drift, and running check_framework_drift.py to confirm it crashed with UnicodeEncodeError trying to print the diff. Windows consoles default stdout to the system codepage (cp1252), which can't encode characters like the down-arrow in SKILL.md's tier diagram -- so the script broke exactly at the one moment it had something real to show. Fixed by forcing UTF-8 output via sys.stdout.reconfigure() at the top of main(). Verified against the actual pending drift: the script now prints the diff correctly. That drift 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. Co-Authored-By: Claude Sonnet 5 --- .claude-plugin/plugin.json | 2 +- CHANGELOG.md | 17 ++++++++++++++++- README.md | 2 +- scripts/check_framework_drift.py | 6 ++++++ .../references/.three-axes-upstream-snapshot.md | 2 +- 5 files changed, 25 insertions(+), 4 deletions(-) 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