shinkan-jinkendo/backend/tests/test_planning_intent_context.py
Lars 4ef3f00e6b
All checks were successful
Deploy Development / deploy (push) Successful in 42s
Test Suite / pytest-backend (push) Successful in 44s
Test Suite / lint-backend (push) Successful in 0s
Test Suite / build-frontend (push) Successful in 13s
Test Suite / k6 /health Baseline (push) Successful in 34s
Test Suite / playwright-tests (push) Successful in 1m13s
Enhance Planning Intent Context and Stage Specification Finalization
- Introduced `intent_context` and `semantic_brief` parameters in `try_llm_stage_specs` to improve context handling for stage specifications.
- Updated `build_goal_analysis` to extract explicit exclusions from goal queries, enhancing constraint management.
- Enhanced `roadmap_context_from_override` to enrich semantic briefs with path constraints and finalize stage specifications with intent context.
- Incremented application version to reflect these updates.
2026-06-11 08:47:26 +02:00

59 lines
2.6 KiB
Python

"""Tests gemeinsames Planungs-Intent-Modul (Progressionsgraph → Trainingsplanung)."""
from planning_intent_context import (
build_planning_intent_context,
extract_explicit_exclusions,
finalize_stage_specs_with_intent,
)
from planning_progression_roadmap import (
MajorStep,
StageSpecArtifact,
build_goal_analysis,
build_stage_specs,
run_progression_roadmap_pipeline,
)
from planning_exercise_semantics import build_semantic_brief, enrich_brief_with_path_constraints
def test_extract_explicit_exclusions_parses_negations():
q = "gesprungener Mawashi Geri, keine Kumite-Anwendung gewünscht"
out = extract_explicit_exclusions(q)
assert any("kumite" in x.lower() for x in out)
def test_build_planning_intent_context_includes_path_anti():
q = "Mawashi Geri Sprungkraft, keine Kumite-Anwendung"
brief = enrich_brief_with_path_constraints(build_semantic_brief(q), q)
ga = build_goal_analysis(q, brief)
intent = build_planning_intent_context(q, semantic_brief=brief, goal_analysis=ga.model_dump())
assert intent.explicit_exclusions
assert any("kumite" in a for a in intent.path_anti_patterns)
def test_finalize_stage_specs_merges_intent_into_each_stage():
q = "gesprungener Mawashi Geri, keine Kumite-Anwendung"
brief = enrich_brief_with_path_constraints(build_semantic_brief(q), q)
ga = build_goal_analysis(q, brief)
intent = build_planning_intent_context(q, semantic_brief=brief, goal_analysis=ga.model_dump())
majors = [
MajorStep(index=0, phase="grundlage", learning_goal="Grundtechnik Mawashi", consolidates=["m1"]),
MajorStep(index=1, phase="vertiefung", learning_goal="Sprungkoordination", consolidates=["m2"]),
]
raw_specs = [
StageSpecArtifact(major_step_index=0, learning_goal=majors[0].learning_goal),
StageSpecArtifact(major_step_index=1, learning_goal=majors[1].learning_goal),
]
finalized = finalize_stage_specs_with_intent(raw_specs, majors, intent=intent)
assert len(finalized) == 2
for spec in finalized:
assert spec.success_criteria
assert any("kumite" in a.lower() for a in spec.anti_patterns)
assert any("messbar" in c.lower() or "übungsziel" in c.lower() for c in spec.success_criteria)
def test_pipeline_stage_specs_carry_exclusions_without_llm():
q = "gesprungener Mawashi Geri Sprungphase, keine Kumite-Anwendung"
ctx = run_progression_roadmap_pipeline(q, max_steps=3, include_llm_roadmap=False)
assert len(ctx.stage_specs) == 3
for spec in ctx.stage_specs:
assert any("kumite" in a.lower() for a in (spec.anti_patterns or []))