feat(content-lint): reusable Feldenkrais content-lint module (automated principle gate) #58
No reviewers
Labels
No labels
backend
bug
completed
documentation
duplicate
enhancement
feature
frontend
good first issue
help wanted
in-progress
invalid
performance
phase-1
Phase1
Phase2
Phase3
planning
question
refactor
security
test
testing
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Kalle/ATM!58
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/lesson-content-lint"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Plan
Convert the Feldenkrais sacred principles (no correction/judgement, no strain, quality over quantity, the lesson is never "finished") from human-review-only into an automated, reusable content gate — so any lesson-content pipeline (seed lessons, AI-generated lessons, practitioner-authored content) can be machine-checked against the ATM domain "Common content errors to reject".
Outcome
Added
src/lib/lesson-content-lint.ts— a pure, bilingual (DE/EN) linter exposinglintLessonText()/lintLesson()returning structured{rule, severity, message, evidence}findings. Seven rules map 1:1 to documented bad→good reframes:timed-holdeffort-strainjudgementscoringlesson-finishedprescriptionmissing-rest-option(structural)17 new unit tests prove each rule rejects the bad cue and accepts the reframed cue; a principle-compliant passage yields zero findings.
Impact on release goals
Release Hardening → new item "Feldenkrais principle gate (content lint in CI)" delivered
[x]. The non-negotiables are now enforceable automatically across all content pipelines — directly de-risking the Phase-3 AI-generation roadmap item ("AI generation produces poor lessons" is the #1 Critical risk in the roadmap Risk Register) and every future launch lesson. This is the foundation for a CI step that blocks principle-violating content before it reaches users.Blackbox
python3 scripts/blackbox_test.py --target testing→ 11/12 (unchanged — additive only; no endpoint or runner touched)tsc --noEmitclean.GET /api/lessons) is the pre-existing blocker that PR #53 resolves (human merge), not a regression from this iteration.Six-perspectives check
missing-rest-optionrule enforces rest is always offered; rejects scoring/strain that would damage intrinsic motivation.effort-strainrule specifically reframes effort cues toward gravity-allied, reversible movement.Risk
Low. Additive only — two new files; no existing route, component, or test modified. The lint is pure (no I/O), safe to call from API routes, build steps, or tests. Detection is conservative and word-boundary aware to avoid over-matching neutral language (verified by the negative test cases). No file conflict with open PRs #52–#57 (different files; only
.development/*docs overlap, which all PRs touch).Checklist
dev(a167f28)feat(content-lint):,docs:).development/patchlog.md).development/roadmap.md)This PR was created by an AI agent (OpenHands) on behalf of the ATM development automation. No merge performed — human review and merge, per workflow.
View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.Merge
Merge the changes and update on Forgejo.Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.