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
- 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.
59 lines
2.6 KiB
Python
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 []))
|