Migrate all repos into monorepo context folders

Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
2026-06-30 20:39:52 +02:00
parent 2f2b295531
commit a5f8fb49ab
1717 changed files with 447332 additions and 0 deletions
+113
View File
@@ -0,0 +1,113 @@
from __future__ import annotations
from teamlandkarte_mcp.config import MatchingConfig, MatchingThresholds
from teamlandkarte_mcp.matching.scorer import categorize, compute_overall
def test_compute_overall_round6_weights() -> None:
cfg = MatchingConfig(
competence_weight=0.8,
role_weight=0.2,
thresholds=MatchingThresholds(top=0.8, good=0.6, partial=0.4),
)
b = compute_overall(competence_score=1.0, role_score=0.0, cfg=cfg)
assert b.overall_score == 0.8
assert b.category == "Top"
b = compute_overall(competence_score=0.0, role_score=1.0, cfg=cfg)
assert b.overall_score == 0.2
assert b.category == "Low"
def test_categorize_threshold_boundaries() -> None:
"""Test categorization with recommended thresholds (Feb 2026)."""
cfg = MatchingConfig(
competence_weight=0.8,
role_weight=0.2,
thresholds=MatchingThresholds(
top=0.8,
good=0.65,
partial=0.5,
low=0.3,
),
)
# Top boundary
assert categorize(0.8, cfg) == "Top"
assert categorize(0.79, cfg) == "Good"
# Good boundary
assert categorize(0.65, cfg) == "Good"
assert categorize(0.64, cfg) == "Partial"
# Partial boundary
assert categorize(0.5, cfg) == "Partial"
assert categorize(0.49, cfg) == "Low"
# Low boundary
assert categorize(0.3, cfg) == "Low"
assert categorize(0.29, cfg) == "Irrelevant"
def test_categorize_with_low_threshold_config() -> None:
"""Test categorization with low=0.2 threshold (user's actual config)."""
cfg = MatchingConfig(
competence_weight=1.0,
role_weight=0.0,
thresholds=MatchingThresholds(
top=0.8,
good=0.6,
partial=0.4,
low=0.2, # User's actual config
),
)
# Exact boundaries
assert categorize(0.8, cfg) == "Top"
assert categorize(0.6, cfg) == "Good"
assert categorize(0.4, cfg) == "Partial" # ← Should be Partial!
assert categorize(0.2, cfg) == "Low"
assert categorize(0.19, cfg) == "Irrelevant"
# Scores slightly above 0.4 should be Partial
assert categorize(0.41, cfg) == "Partial"
assert categorize(0.42, cfg) == "Partial"
assert categorize(0.45, cfg) == "Partial"
assert categorize(0.5, cfg) == "Partial"
# Scores between 0.2 and 0.4 should be Low
assert categorize(0.21, cfg) == "Low"
assert categorize(0.3, cfg) == "Low"
assert categorize(0.39, cfg) == "Low"
# Scores below 0.2 should be Irrelevant
assert categorize(0.15, cfg) == "Irrelevant"
assert categorize(0.1, cfg) == "Irrelevant"
def test_compute_overall_with_user_config() -> None:
"""Test overall score computation with user's actual config (competence_weight=1.0)."""
cfg = MatchingConfig(
competence_weight=1.0,
role_weight=0.0,
thresholds=MatchingThresholds(
top=0.8,
good=0.6,
partial=0.4,
low=0.2,
),
)
# When role_weight=0, overall score should equal competence score
b = compute_overall(competence_score=0.45, role_score=0.0, cfg=cfg)
assert b.overall_score == 0.45
assert b.category == "Partial", f"Score 0.45 should be Partial, got {b.category}"
b = compute_overall(competence_score=0.4, role_score=0.0, cfg=cfg)
assert b.overall_score == 0.4
assert b.category == "Partial", f"Score 0.4 should be Partial, got {b.category}"
b = compute_overall(competence_score=0.39, role_score=0.5, cfg=cfg)
assert b.overall_score == 0.39 # role is ignored (weight=0)
assert b.category == "Low", f"Score 0.39 should be Low, got {b.category}"