feat(lessons): add L2 Breath & Diaphragm launch lesson (Launch Lessons 1/8 → 2/8) #71

Merged
KnallerKalle merged 8 commits from feat/lesson-l2-breath-diaphragm into dev 2026-08-14 19:24:50 +00:00
KnallerKalle commented 2026-08-14 04:32:01 +00:00 (Migrated from github.com)

Note: This PR was created by an AI agent (OpenHands) on behalf of the ATM automation.

Plan

Seed the second Awareness-Through-Movement launch lesson ('Atem & Zwerchfell') into the public catalog, advancing the Launch Lessons content pipeline from 1/8 → 2/8.

Outcome

Added the L2 lesson to SEED_LESSONS in src/lib/lessons-catalog.ts (German, catalog-safe projection). Content authored to the Feldenkrais non-negotiables:

  • Breath invited to "come and go" (gravity-allied) — never "deep breath" cues that recruit chest/shoulder effort.
  • No correction / judgement / strain language.
  • Small amplitudes and imagined movement offered as first-class techniques.
  • Rest / reducing effort as a first-class option.

Extended lessons-catalog.test.ts with 8 L2-specific assertions (RED→GREEN): seed presence, breath-safety guard (rejects deep-breath / hold-your-breath / chest-effort cues), gravity-allied letting-go language, rest as first-class option, anatomical coherence (breath/diaphragm focus), detail lookup, and catalog breadth (≥ 2 launch lessons).

Impact on release goals

Launch Lessons content: 1/8 → 2/8. The L1–L8 content workstream is the active release focus now that the platform (auth, audio engine, lesson player, share, a11y, blackbox) is released to main (v1.0 Beta, PR #64). Breath/diaphragm is the foundational ATM system — the diaphragm organises pelvis, spine, ribs and jaw together, so freeing it is the first lever and deepens the D1→D7 first-lesson value.

Blackbox

  • Unit suite 126/126 green (was 119, +8 new L2 assertions; lessons-catalog.test.ts 16/16; all 19 test files green)
  • tsc --noEmit clean
  • Blackbox on testing deployment: 41/41 green (python3 scripts/blackbox_test.py --target testing) — no regression
  • Result: 41/41 green on testing; 126/126 unit green. The L2 content itself is unit-verified (it surfaces via the public catalog endpoints once #53 + this merge & deploy; those endpoints are not yet on testing, so a deployment-dependent blackbox assertion would be a false test — not added).

Six-perspectives check

  • Product: second launch lesson deepens the catalog discovery moment; the "felt change in the first session" hook is the breath freeing, which this lesson delivers.
  • Engineering: minimal diff (100 insertions, 0 deletions; one new array entry + new tests); additive only; no existing route/store/lesson changed; tsc clean; 126/126 unit green.
  • Psychology: autonomy-supportive ("come and go", "rest whenever"); no strain/streak/judgement language; breath invited, not commanded.
  • Biomechanics: gravity-allied (let the breath move, let ribs soften); reversibility preserved (nothing locked/braced); small amplitudes first.
  • Anatomy: diaphragm framed accurately (dome muscle, thorax/abdomen) and coherently with ribs/spine/pelvis — not three disconnected facts; no end-range loading.
  • Feldenkrais: no correction/judgement, quality over quantity, the lesson is never "finished"; a unit-test guard rejects forbidden patterns.

Risk

Low. Additive only (one new SEED_LESSONS entry + new test cases); no existing lesson, route, or store changed. No per-user/private fields exposed (catalog-safe projection via toPublicCatalogEntry). The public catalog endpoints are gated by PR #53's merge — L2 surfaces only once those land. Feldenkrais-principle compliance is enforced by the unit guard.

Stacking note: this branch is based on feat/lessons-catalog-seed (PR #53, currently MERGEABLE). Once #53 merges to dev, this PR's base auto-retargets to dev.

Checklist

  • Branch off latest feat/lessons-catalog-seed (the catalog foundation; not yet merged to dev)
  • Conventional Commits (test: → feat: → docs:)
  • Patchlog entry appended
  • Roadmap status updated (Launch Lessons 1/8 → 2/8)
  • No secrets / no large binaries
> **Note:** This PR was created by an AI agent (OpenHands) on behalf of the ATM automation. ## Plan Seed the second Awareness-Through-Movement launch lesson ('Atem & Zwerchfell') into the public catalog, advancing the Launch Lessons content pipeline from **1/8 → 2/8**. ## Outcome Added the L2 lesson to `SEED_LESSONS` in `src/lib/lessons-catalog.ts` (German, catalog-safe projection). Content authored to the Feldenkrais non-negotiables: - Breath invited to "come and go" (gravity-allied) — **never** "deep breath" cues that recruit chest/shoulder effort. - No correction / judgement / strain language. - Small amplitudes and imagined movement offered as first-class techniques. - Rest / reducing effort as a first-class option. Extended `lessons-catalog.test.ts` with **8 L2-specific assertions** (RED→GREEN): seed presence, breath-safety guard (rejects deep-breath / hold-your-breath / chest-effort cues), gravity-allied letting-go language, rest as first-class option, anatomical coherence (breath/diaphragm focus), detail lookup, and catalog breadth (≥ 2 launch lessons). ## Impact on release goals **Launch Lessons content: 1/8 → 2/8.** The L1–L8 content workstream is the active release focus now that the platform (auth, audio engine, lesson player, share, a11y, blackbox) is released to `main` (v1.0 Beta, PR #64). Breath/diaphragm is the foundational ATM system — the diaphragm organises pelvis, spine, ribs and jaw together, so freeing it is the first lever and deepens the D1→D7 first-lesson value. ## Blackbox - [x] Unit suite **126/126 green** (was 119, +8 new L2 assertions; `lessons-catalog.test.ts` 16/16; all 19 test files green) - [x] `tsc --noEmit` clean - [x] Blackbox on testing deployment: **41/41 green** (`python3 scripts/blackbox_test.py --target testing`) — no regression - Result: 41/41 green on testing; 126/126 unit green. The L2 content itself is unit-verified (it surfaces via the public catalog endpoints once #53 + this merge & deploy; those endpoints are not yet on testing, so a deployment-dependent blackbox assertion would be a false test — not added). ## Six-perspectives check - [x] **Product:** second launch lesson deepens the catalog discovery moment; the "felt change in the first session" hook is the breath freeing, which this lesson delivers. - [x] **Engineering:** minimal diff (100 insertions, 0 deletions; one new array entry + new tests); additive only; no existing route/store/lesson changed; tsc clean; 126/126 unit green. - [x] **Psychology:** autonomy-supportive ("come and go", "rest whenever"); no strain/streak/judgement language; breath invited, not commanded. - [x] **Biomechanics:** gravity-allied (let the breath move, let ribs soften); reversibility preserved (nothing locked/braced); small amplitudes first. - [x] **Anatomy:** diaphragm framed accurately (dome muscle, thorax/abdomen) and coherently with ribs/spine/pelvis — not three disconnected facts; no end-range loading. - [x] **Feldenkrais:** no correction/judgement, quality over quantity, the lesson is never "finished"; a unit-test guard rejects forbidden patterns. ## Risk Low. Additive only (one new `SEED_LESSONS` entry + new test cases); no existing lesson, route, or store changed. No per-user/private fields exposed (catalog-safe projection via `toPublicCatalogEntry`). The public catalog endpoints are gated by PR #53's merge — L2 surfaces only once those land. Feldenkrais-principle compliance is enforced by the unit guard. **Stacking note:** this branch is based on `feat/lessons-catalog-seed` (PR #53, currently `MERGEABLE`). Once #53 merges to `dev`, this PR's base auto-retargets to `dev`. ## Checklist - [x] Branch off latest `feat/lessons-catalog-seed` (the catalog foundation; not yet merged to dev) - [x] Conventional Commits (`test:` → `feat:` → `docs:`) - [x] Patchlog entry appended - [x] Roadmap status updated (Launch Lessons 1/8 → 2/8) - [x] No secrets / no large binaries
KnallerKalle commented 2026-08-14 16:22:10 +00:00 (Migrated from github.com)

Integration update (2026-08-14, integration-unstick run)

Note: posted by an AI agent (OpenHands) on behalf of the maintainer.

This run rebased this branch onto the updated feat/lessons-catalog-seed (which now has current dev merged in), so the stack is clean against both dev and #53:

  • Only the docs(dev) commit conflicted (roadmap union — dev's [x] Audio-engine line + this branch's L2 catalog line). Test and feat commits applied cleanly.
  • Verified on the rebased tree: vitest 143/143 green (21 files, incl. the 16 lessons-catalog.test.ts assertions with the L2 breath-safety guard), tsc --noEmit clean.
  • Local end-to-end: GET /api/lessons → 200 {total: 2} with L2 present; GET /api/lessons/l2-breath-diaphragm → 200; unknown id → 404.
  • Mergeability: MERGEABLE/CLEAN against feat/lessons-catalog-seed. Note this PR's base is the #53 branch, and CI only triggers on PRs targeting dev/main — a build-check run was manually dispatched on this branch: https://github.com/KnallerGmbH/ATM/actions/runs/31818920970
  • Patchlog + watcher-state snapshot appended on this branch (heads the stack, so both PRs see it).

Verdict: self-review P2 — no P0/P1 findings. Awaiting human review; #53 must merge first, then this PR retargets to dev.

## Integration update (2026-08-14, integration-unstick run) > **Note: posted by an AI agent (OpenHands) on behalf of the maintainer.** This run rebased this branch onto the updated `feat/lessons-catalog-seed` (which now has current `dev` merged in), so the stack is clean against both `dev` and #53: - Only the `docs(dev)` commit conflicted (roadmap union — dev's `[x]` Audio-engine line + this branch's L2 catalog line). Test and feat commits applied cleanly. - Verified on the rebased tree: **vitest 143/143 green** (21 files, incl. the 16 `lessons-catalog.test.ts` assertions with the L2 breath-safety guard), `tsc --noEmit` clean. - Local end-to-end: `GET /api/lessons → 200 {total: 2}` with **L2 present**; `GET /api/lessons/l2-breath-diaphragm → 200`; unknown id → 404. - Mergeability: **MERGEABLE/CLEAN** against `feat/lessons-catalog-seed`. Note this PR's base is the #53 branch, and CI only triggers on PRs targeting `dev`/`main` — a `build-check` run was manually dispatched on this branch: https://github.com/KnallerGmbH/ATM/actions/runs/31818920970 - Patchlog + watcher-state snapshot appended on this branch (heads the stack, so both PRs see it). Verdict: self-review **P2** — no P0/P1 findings. Awaiting human review; **#53 must merge first**, then this PR retargets to `dev`.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Kalle/ATM!71
No description provided.