Skip to content

v1.2.1 - v1.5.0: Tier 2 regression harness, full scenario coverage, second curriculum - #3

Merged
luxsolari merged 4 commits into
mainfrom
main-yet2no
Jul 2, 2026
Merged

v1.2.1 - v1.5.0: Tier 2 regression harness, full scenario coverage, second curriculum#3
luxsolari merged 4 commits into
mainfrom
main-yet2no

Conversation

@luxsolari

Copy link
Copy Markdown
Owner

Summary

Closes #2 and its two named follow-ups. Covers everything on main-yet2no since it last merged into main via #1:

  • 1.2.1 — Two-tier regression harness lands as an actual CI gate (tier1-checks.yml), plus the real-install smoke test.
  • 1.3.0 — Scenario 06: custom-track creation path (Track Setup Rounds 1-4), the last untested onboarding path. 8/8 first-run pass. Closes #2.
  • 1.4.0 — Scenario 07: axis-recalibration accept path (scenario 04 only ever tested decline). 9/9 first-run pass. Fixed two real SKILL.md gaps: streak doesn't reset on accept, and the phase-transition recalibration option didn't say it also advances the phase.
  • 1.5.0 — Second bundled curriculum (rust-cli.md, deliberately opposite axis calibration from python-basics) + scenario 08: /sage-switch//sage-tracks across two real tracks. 8/8 first-run pass. Fixed a thin spec gap in Track Management (status vocabulary, switch resume/init semantics).

Every scenario run found something real and fixed it in SKILL.md before merging — same discipline as the original harness rollout. Full detail per release in CHANGELOG.md.

Test plan

  • python3 tests/test_check_progress_schema.py — 7/7 pass (Tier 1, also runs in CI)
  • All 8 Tier 2 scenarios run live at least once across these releases, each recorded PASS/FAIL in CHANGELOG.md
  • curricula/python-basics.md and curricula/rust-cli.md both confirmed unchanged by cross-track switching (scenario 08)

🤖 Generated with Claude Code

claude and others added 4 commits July 2, 2026 13:50
Every prior scenario (01-05) and the 1.2.1 real-install smoke test
picked the existing bundled python-basics track at Track Setup
Round 0. This scenario instead picks "Build a custom track" and
scripts the full Round 1-4 interview, targeting curriculum
generation completeness, axis-level mapping from the interview
answers, and confirm-before-save behavior -- the last major
untested path per issue #2.

Live validation run in progress; fixes to follow based on what it
finds, same pattern as scenarios 01-05.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019FNUmdkni7KChUL6s7hFvB
Scenario 06 (custom-track creation, Track Setup Rounds 1-4) passed
8/8 on its first live run -- the first scenario in this harness's
history not to need a fix first. The generated curriculum
(curricula/rust-cli-grep.md) had a real, smoke-tested verify command,
correct axis mapping from the interview answers, and confirm-before-
save was verified by checking the file didn't exist until after the
learner confirmed.

The run's one soft finding: SKILL.md's Track Setup interview never
explicitly directs Sage to derive the `consequence` axis field --
only mastery (Round 3) and intent (Round 4) have a stated mapping.
Sage got it right by judgment this run, not by following an
instruction. Added an explicit rule for deriving consequence from
Round 2's stated project stakes.

Pre-release checklist bumped from "all five" to "all six" scenarios.
Version bumped to 1.3.0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019FNUmdkni7KChUL6s7hFvB
Scenario 04 only ever tested declining the recalibration offer; the
accept branch (write axis_overrides, confirm the change) had never
been live-tested. New scenario 07 triggers low_hint_streak >= 3,
accepts the bump, then drives a second streak past threshold to
confirm a later offer is measured against the newly-applied level.
9/9 assertions passed on the first live run.

Two real spec gaps surfaced along the way and got fixed in SKILL.md:
- The accept branch never said whether the triggering streak resets,
  unlike decline. Left alone, an unreset streak could immediately
  re-fire the same offer against the level Sage just applied.
- The phase-transition question's 5th option (the recalibration
  offer) didn't say whether picking it also means "start Phase N+1"
  or is a standalone choice. Clarified: it means both.

One soft finding (Rule 10 topic-key derivation ambiguity for
coordinate-noun bullets) was left unfixed -- orthogonal to axis
recalibration, recorded in CHANGELOG for a future pass instead of
guessed at here.

Pre-release checklist bumped from "all six" to "all seven" scenarios.
Version bumped to 1.4.0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Adds curricula/rust-cli.md -- a Rust CLI track building toward
Ferrogrep, deliberately calibrated opposite to python-basics
(mastery: medium, consequence: high, intent: output vs. low, low,
growth) so switching between them exercises an actual posture
change, not just a second copy of the same shape.

New scenario 08 checks what /sage-tracks and /sage-switch have never
had a chance to get wrong: progress isolation, hint-streak isolation,
and axis-posture isolation between two concurrently-tracked courses,
plus /tracks status accuracy across both. 8/8 PASS on the first live
run (see #2's "out of scope for this pass" list).

One real spec gap surfaced while drafting the scenario and got fixed
in SKILL.md: Track Management gave /tracks and /switch one line each,
thin enough that status vocabulary and switch semantics (resume vs.
initialize, never re-onboard) were only inferable by chaining
together Progress Rule 9 and Track Setup's gating language. Added an
explicit paragraph.

Toolchain limitation disclosed in CHANGELOG rather than hidden: the
live-run machine had no Rust toolchain, so the one rust-cli exercise
was verified by manual trace instead of a real rustc run.

Pre-release checklist bumped from "all seven" to "all eight"
scenarios. Version bumped to 1.5.0.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @luxsolari! 👋

Your private repo does not have access to Sourcery.

Please upgrade to continue using Sourcery ✨

@luxsolari
luxsolari merged commit c230d03 into main Jul 2, 2026
1 check passed
@luxsolari
luxsolari deleted the main-yet2no branch July 2, 2026 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

v1.3: cover the custom-track creation path with a Tier 2 scenario

2 participants