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.
28 KiB
Anforderungsdokument
Einleitung
Dieses Dokument beschreibt die Anforderungen für ein neues Feature der Teamlandkarte: das Matching gegen Team-Profile als zusätzliche Profilart neben den bestehenden Kapazitätsprofilen. Bisher vergleicht das System eine offene Aufgabe ausschließlich mit Kapazitätsprofilen einzelner Mitarbeitender (teamlandkarte_v_capacities_latest und zugehörige Tabellen). Künftig soll der Nutzer pro Suchanfrage wählen können, ob eine Aufgabe gegen Kapazitätsprofile (bisheriges Verhalten) oder gegen Team-Profile (neue Profilart) gematcht wird.
Ein Team-Profil aggregiert Daten aus mehreren Datenbank-Views: Stammdaten und Beschreibung aus teamlandkarte_v_teams_latest (Spalten about_us, offerings, interests, focus_name), den Teamnamen über INNER JOIN mit teamlandkarte_v_teammeter_organizational_units_latest (Join team_id = id), Team-Kompetenzen aus teamlandkarte_v_teammeter_team_competences_latest (Join über ouid, mit Top-Kompetenz-Markierung über top_competency) sowie Team-Referenzen aus teamlandkarte_v_team_references_latest (Join über ouid, Partner-Auflösung über teamlandkarte_v_partners_latest.id via partner_id, plus Projektbeschreibung in projects).
Das neue Feature soll die bestehenden Matching-Verfahren (score und llm_fulltext) wiederverwenden, sodass der Nutzer beide Verfahren auch auf Team-Profile anwenden kann. MCP-Tools, Agenten-Konfigurationen, Architekturdokumentation und README werden entsprechend erweitert.
Glossar
- MCP_Server: Der Teamlandkarte MCP-Server (Modul
mcp_server.py), der die MCP-Tools für Matching, Suche und Datenanzeige bereitstellt. - DBClient: Protokollklasse aus
database/types.py, die alle Datenbankzugriffe abstrahiert. - TrinoClient: Konkrete
DBClient-Implementierung (database/trino_client.py) für Trino/Presto. - Matcher: Bestehende, Score-basierte Matching-Komponente in
matching/matcher.py. - LLM_Fulltext_Matcher: Bestehendes Modul für den LLM-basierten Volltext-Vergleich (
matching/llm_fulltext_matcher.py). - AzureOpenAIClient: Wrapper für Azure-OpenAI-Aufrufe in
azure/openai_client.py. - LLM: Large Language Model (Azure OpenAI Chat Completion).
- Capacity: Frozen Dataclass
Capacityinmodels.py(Kapazitätseintrag eines Mitarbeitenden). - Team: Neue Frozen Dataclass, die ein Team mit aggregierten Profilfeldern (Name,
about_us,offerings,interests,focus_name, Kompetenzen, Referenzen) repräsentiert. - Team_Id: Wert der Spalte
team_idinteamlandkarte_v_teams_latestbzw. der Spalteidinteamlandkarte_v_teammeter_organizational_units_latest. Eindeutiger fachlicher Identifikator eines Teams. - Ouid: Wert der Spalte
ouid, die inteamlandkarte_v_teams_latest,teamlandkarte_v_teammeter_team_competences_latestundteamlandkarte_v_team_references_latestvorkommt und als Join-Schlüssel zwischen Stammdaten, Kompetenzen und Referenzen eines Teams dient. - Team_Name: Wert der Spalte mit dem Teamnamen aus
teamlandkarte_v_teammeter_organizational_units_latest, ermittelt über INNER JOIN mitteamlandkarte_v_teams_latest(team_id = id). - Team_About_Us: Wert der Spalte
about_usausteamlandkarte_v_teams_latest(Beschreibung des Teams). - Team_Offerings: Wert der Spalte
offeringsausteamlandkarte_v_teams_latest(Leistungen des Teams). - Team_Interests: Wert der Spalte
interestsausteamlandkarte_v_teams_latest(Interessen des Teams). - Team_Focus_Name: Wert der Spalte
focus_nameausteamlandkarte_v_teams_latest(Schwerpunkt des Teams). - Team_Competence: Eintrag aus
teamlandkarte_v_teammeter_team_competences_latestmit den Felderncompetence_id(Fremdschlüssel auf den Kompetenz-Namen analog zu Kapazitätskompetenzen) undtop_competency(Boolean). Ein Team kann mehrere Team_Competence-Einträge haben (1:n überouid). - Top_Competency: Boolean-Spalte
top_competencyausteamlandkarte_v_teammeter_team_competences_latest, die kennzeichnet, ob eine Team_Competence eine Top-Kompetenz des Teams ist. - Team_Reference: Eintrag aus
teamlandkarte_v_team_references_latestmit den Feldernpartner_id(Fremdschlüssel aufteamlandkarte_v_partners_latest.id) undprojects(Projektbeschreibung). Ein Team kann mehrere Team_Reference-Einträge haben (1:n überouid). - Partner: Eintrag aus
teamlandkarte_v_partners_latest. Eine Team_Reference verweist über die Spaltepartner_idauf einen Partner; die Verknüpfung erfolgt überteamlandkarte_v_team_references_latest.partner_id = teamlandkarte_v_partners_latest.id. - Partner_Name: Wert der Spalte
nameausteamlandkarte_v_partners_latest, der einer Team_Reference überpartner_idzugeordnet ist. Istpartner_idNULLoder existiert kein passender Partner, gilt der Partner_Name als leere Zeichenkette. - Team_Profile: Aggregiertes Volltext-Profil eines Teams, bestehend aus
Team_Id,Team_Name,Team_Focus_Name,Team_About_Us,Team_Offerings,Team_Interests, einer Liste von Kompetenznamen mit Top-Markierung sowie einer Liste von Referenzeinträgen (Partner_Name + Projektbeschreibung). - Capacity_Profile: Bestehendes aggregiertes Volltext-Profil einer Kapazität (Rolle, Kompetenzen, Beschreibung, Referenzen, Zertifikate).
- Task_Profile: Bestehendes aggregiertes Volltext-Profil einer Aufgabe (Titel, Beschreibung, gesuchte Kompetenzen).
- Profile_Type: Auswahlwert für die zu matchende Profilart. Erlaubte Werte:
capacity(Kapazitätsprofile, bisheriges Verhalten) undteam(Team-Profile, neu). - Matching_Method: Bestehender Auswahlwert für das Verfahren. Erlaubte Werte:
scoreundllm_fulltext. - Kategorie: Eine der Ergebniskategorien
Top,Good,Partial,Low,Irrelevant. - Rationale: Vom LLM erzeugte Kurzbegründung (1–2 Sätze) für die zugewiesene Kategorie (nur im
llm_fulltext-Modus). - find_matching_capacities: MCP-Tool für die Suchrichtung Aufgabe→Kapazität (bestehend).
- find_matching_teams: Neues MCP-Tool für die Suchrichtung Aufgabe→Team.
- SearchCache: Bestehende Cache-Komponente für persistierte Suchergebnisse.
- Teamlandkarte_Agent: GitHub-Copilot-Agent in
.github/agents/teamlandkarte_agent.mdund Kiro-Pendant in.kiro/agents/teamlandkarte.md. - Architecture_Doc:
docs/architecture.md. - Readme:
README.mdim Repository-Root.
Anforderungen
Anforderung 1: Auswahl des Profil-Typs für das Matching
User Story: Als Nutzer möchte ich beim Matching für eine offene Aufgabe entscheiden können, ob ich gegen Kapazitätsprofile oder gegen Team-Profile matche, damit ich je nach Fragestellung Personen oder Teams als Vorschläge erhalte.
Akzeptanzkriterien
- THE MCP_Server SHALL einen Profile_Type mit den erlaubten Werten
capacityundteamdefinieren. - WHEN der Nutzer eine Aufgabe gegen Kapazitätsprofile matchen möchte, THE MCP_Server SHALL das bestehende Tool
find_matching_capacitiesmit unverändertem Verhalten bereitstellen (Profile_Type implizitcapacity). - WHEN der Nutzer eine Aufgabe gegen Team-Profile matchen möchte, THE MCP_Server SHALL ein neues Tool
find_matching_teamsbereitstellen, das Profile_Typeteamrealisiert. - THE MCP_Server SHALL den verwendeten Profile_Type (
capacityoderteam) im Antwort-META-JSON sowie in der angezeigten Suchkonfiguration ausweisen. - THE MCP_Server SHALL den Parameter
matching_method(scoreoderllm_fulltext) auch im Toolfind_matching_teamsakzeptieren und mit den gleichen Default- und Validierungsregeln behandeln wie infind_matching_capacities. - IF der Nutzer in
find_matching_teamseinen ungültigen Wert fürmatching_methodübergibt, THEN THE MCP_Server SHALL eine Fehlermeldung zurückgeben, die die erlaubten Werte (score,llm_fulltext) auflistet, und die Suche nicht ausführen.
Anforderung 2: Datenabfrage für Team-Stammdaten und Teamname
User Story: Als Entwickler möchte ich, dass das System Team-Stammdaten inklusive Teamnamen aus der Datenbank lädt, damit Team-Profile vollständig aufgebaut werden können.
Akzeptanzkriterien
- THE DBClient SHALL eine Methode bereitstellen, die alle aktiven Teams aus
teamlandkarte_v_teams_latestzurückgibt, inklusive der Spaltenteam_id,ouid,about_us,offerings,interestsundfocus_name. - THE DBClient SHALL den Team_Name pro Team über INNER JOIN von
teamlandkarte_v_teams_latestmitteamlandkarte_v_teammeter_organizational_units_latestüber die Bedingungteamlandkarte_v_teams_latest.team_id = teamlandkarte_v_teammeter_organizational_units_latest.idermitteln. - WHEN für ein Team kein passender Eintrag in
teamlandkarte_v_teammeter_organizational_units_latestexistiert, THE DBClient SHALL dieses Team durch den INNER JOIN aus dem Ergebnis ausschließen. - WHEN eine der Spalten
about_us,offerings,interestsoderfocus_nameNULLoder leer ist, THE DBClient SHALL für das jeweilige Feld eine leere Zeichenkette zurückgeben. - THE DBClient SHALL eine Methode bereitstellen, die ein einzelnes Team anhand seiner Team_Id (oder Ouid) zurückgibt, einschließlich Team_Name über denselben INNER JOIN.
- THE TrinoClient SHALL alle neuen SQL-Abfragen ausschließlich als
SELECT-Statements ausführen und die bestehende Read-Only-Guard_ensure_select_onlyverwenden. - THE TrinoClient SHALL die neuen Abfragen über die bestehende Connection-Pool-Infrastruktur und die Retry-Logik (
_retry) ausführen.
Anforderung 3: Datenabfrage für Team-Kompetenzen
User Story: Als Entwickler möchte ich, dass das System die Kompetenzen eines Teams inklusive Top-Kompetenz-Markierung und aufgelöstem Kompetenz-Namen lädt, damit Team-Profile die fachlichen Fähigkeiten korrekt abbilden.
Akzeptanzkriterien
- THE DBClient SHALL eine Methode bereitstellen, die für eine gegebene Ouid alle zugeordneten Team_Competence-Einträge aus
teamlandkarte_v_teammeter_team_competences_latestzurückgibt, inklusive der Feldercompetence_idundtop_competency. - THE DBClient SHALL den Kompetenz-Namen pro Team_Competence durch denselben Join-Mechanismus ermitteln, der bereits für Kapazitäts-Kompetenzen verwendet wird, sodass aus der
competence_idder lesbare Kompetenz-Name abgeleitet wird. - THE DBClient SHALL eine Batch-Variante bereitstellen, die für eine Liste von Ouid-Werten alle zugehörigen Team_Competence-Einträge inklusive aufgelöster Kompetenz-Namen in höchstens einer SQL-Abfrage lädt.
- WHEN ein Team keine Team_Competence-Einträge besitzt, THE DBClient SHALL eine leere Liste für dieses Team zurückgeben.
- WHEN
top_competencyfür einen Team_Competence-EintragNULList, THE DBClient SHALL den Wert alsfalseinterpretieren. - WHEN die
competence_ideines Team_Competence-Eintrags zu keinem Kompetenz-Namen aufgelöst werden kann, THE DBClient SHALL diesen Eintrag aus dem Ergebnis ausschließen. - THE DBClient SHALL die Reihenfolge der Team_Competence-Einträge pro Team deterministisch zurückgeben (primär: Top-Kompetenzen vor Nicht-Top-Kompetenzen, sekundär: Kompetenz-Name aufsteigend).
Anforderung 4: Datenabfrage für Team-Referenzen
User Story: Als Entwickler möchte ich, dass das System die Referenzen eines Teams inklusive Partner-Namen und Projektbeschreibung lädt, damit Team-Profile bisherige Projekte und Auftraggeber abbilden.
Akzeptanzkriterien
- THE DBClient SHALL eine Methode bereitstellen, die für eine gegebene Ouid alle zugeordneten Team_Reference-Einträge aus
teamlandkarte_v_team_references_latestzurückgibt, einschließlich der Spalteprojectsund des überpartner_idaufgelösten Partner_Name. - THE DBClient SHALL den Partner_Name pro Team_Reference über LEFT JOIN auf
teamlandkarte_v_partners_latestmit der Bedingungteamlandkarte_v_team_references_latest.partner_id = teamlandkarte_v_partners_latest.idermitteln und die Spaltenameals Partner_Name übernehmen. - THE DBClient SHALL eine Batch-Variante bereitstellen, die für eine Liste von Ouid-Werten alle zugehörigen Team_Reference-Einträge inklusive aufgelöster Partner_Name in höchstens einer SQL-Abfrage lädt; der Partner-Join SHALL Bestandteil derselben Referenz-Abfrage sein und keine zusätzliche SQL-Abfrage erzeugen.
- WHEN ein Team keine Team_Reference-Einträge besitzt, THE DBClient SHALL eine leere Liste für dieses Team zurückgeben.
- IF die
partner_ideiner Team_ReferenceNULList oder der Join aufteamlandkarte_v_partners_latestkeinen Treffer liefert, THEN THE DBClient SHALL den Partner_Name dieser Team_Reference als leere Zeichenkette zurückgeben und die Referenz dennoch mit dem Feldprojectsin der Ergebnisliste belassen. - WHEN das Feld
projectseiner Team_ReferenceNULLoder ausschließlich Whitespace ist, THE DBClient SHALL diesen Eintrag aus dem Ergebnis ausschließen. - THE DBClient SHALL die Reihenfolge der Team_Reference-Einträge pro Team deterministisch zurückgeben (z. B. nach Partner_Name aufsteigend, dann nach Projektbeschreibung aufsteigend).
Anforderung 5: Aufbau des Team_Profile
User Story: Als Entwickler möchte ich, dass das System aus den Datenbankfeldern ein konsistentes Volltext-Profil pro Team erzeugt, damit beide Matching-Verfahren eine einheitliche Eingabe erhalten.
Akzeptanzkriterien
- THE MCP_Server SHALL pro Team ein Team_Profile bilden, das die folgenden Felder enthält:
team_id,ouid,team_name,focus_name,about_us,offerings,interests,competences(Liste von Einträgen mit Kompetenz-Namen undtop_competency-Flag) undreferences(Liste von Einträgen mitpartner_nameundprojects). - WHEN ein Feld in der Datenbank leer oder
NULList, THE MCP_Server SHALL das entsprechende Feld im Team_Profile mit einer leeren Zeichenkette bzw. einer leeren Liste belegen, ohne das gesamte Profil zu verwerfen. - WHEN der Partner_Name eines Team_Reference-Eintrags leer ist, THE MCP_Server SHALL die Referenz dennoch in
referencesaufnehmen und ausschließlich das Feldprojectsin die serialisierte Darstellung übernehmen, ohne einen Platzhaltertext für den Partner einzufügen. - THE MCP_Server SHALL das Team_Profile in einer für das LLM lesbaren, deterministischen Textstruktur serialisieren, in der jedes Feld klar mit einer Überschrift gekennzeichnet ist (z. B.
Teamname:,Schwerpunkt:,Über uns:,Leistungen:,Interessen:,Kompetenzen:,Referenzen:). - THE MCP_Server SHALL Top-Kompetenzen in der serialisierten Darstellung erkennbar markieren (z. B. durch ein vorangestelltes Symbol oder das Suffix
(Top)), sodass das LLM und der Nutzer Top-Kompetenzen von Nicht-Top-Kompetenzen unterscheiden können. - THE MCP_Server SHALL jeden Eintrag im Abschnitt
Referenzen:so darstellen, dass sowohl Partner_Name als auch Projekte für das LLM sichtbar sind (z. B. im FormatPartner: <partner_name> – Projekte: <projects>oder als gleichwertige strukturierte Darstellung). - THE MCP_Server SHALL die Reihenfolge der Felder in der serialisierten Darstellung über alle Teams konstant halten, sodass die Eingabe für das LLM bzw. den Score-Matcher deterministisch ist.
Anforderung 6: Score-basiertes Matching für Team-Profile
User Story: Als Nutzer möchte ich Team-Profile auch im Score-basierten Modus matchen können, damit ich Teams mit denselben numerischen Bewertungen wie Kapazitäten vergleichen kann.
Akzeptanzkriterien
- WHEN
find_matching_teamsmitmatching_method = "score"aufgerufen wird, THE MCP_Server SHALL das Score-basierte Matching auf Team-Profile anwenden und für jedes Team eine Competence Score, eine Role Score und eine Overall Score berechnen. - THE MCP_Server SHALL die Competence Score eines Teams aus den Team_Competence-Einträgen berechnen, wobei die Liste der Kompetenz-Namen analog zur Liste der Kapazitäts-Kompetenzen verwendet wird.
- THE MCP_Server SHALL die Role Score eines Teams aus dem Team_Focus_Name als Stellvertreter für die Rolle berechnen, da Teams keine Rolle im Sinne einer Kapazität besitzen.
- WHERE Top-Kompetenzen vorhanden sind, THE MCP_Server SHALL Top-Kompetenzen bei der Berechnung der Competence Score höher gewichten als Nicht-Top-Kompetenzen, wobei der Gewichtungsfaktor in der Konfiguration unter dem Schlüssel
matching.team.top_competency_weightmit Standardwert1.5einstellbar ist. - THE MCP_Server SHALL die Ergebnisse in dieselben Kategorien (
Top,Good,Partial,Low,Irrelevant) einordnen, die auch für Kapazitätsprofile gelten. - THE MCP_Server SHALL die Ergebnistabelle für
find_matching_teamsimscore-Modus mit den SpaltenTeam Name,Schwerpunkt,Top-Kompetenzen,Role Score,Competence Score,Overall Score,Categoryausgeben. - THE MCP_Server SHALL die Verfügbarkeit eines Teams nicht prüfen, da Team-Profile keinen Verfügbarkeitszeitraum besitzen; ein etwaig übergebener Zeitraum SHALL ignoriert und in der
Applied Filters-Tabelle als nicht wirksam markiert werden.
Anforderung 7: LLM-Volltext-Matching für Team-Profile
User Story: Als Nutzer möchte ich Team-Profile auch im LLM-Volltext-Modus matchen können, damit der Vergleich auf Basis der Beschreibungstexte (about_us, offerings, interests) und Referenzen erfolgt.
Akzeptanzkriterien
- WHEN
find_matching_teamsmitmatching_method = "llm_fulltext"aufgerufen wird, THE LLM_Fulltext_Matcher SHALL für jedes Team einen LLM-Vergleich zwischen Task_Profile und Team_Profile durchführen. - THE LLM_Fulltext_Matcher SHALL pro Team genau eine Kategorie aus der Menge
Top,Good,Partial,Low,Irrelevantzurückgeben. - THE LLM_Fulltext_Matcher SHALL pro Team eine Rationale mit 1 bis 2 Sätzen zurückgeben, die die Zuweisung in die jeweilige Kategorie erläutert.
- THE LLM_Fulltext_Matcher SHALL die LLM-Antwort als strukturiertes JSON pro Team anfordern und parsen (Felder:
category,rationale). - IF das LLM für ein Team eine Kategorie zurückgibt, die nicht in der erlaubten Menge liegt, THEN THE LLM_Fulltext_Matcher SHALL dieses Team der Kategorie
Irrelevantzuordnen und die Rationale durch einen Hinweis auf die ungültige LLM-Antwort ergänzen. - IF der LLM-Aufruf für ein Team fehlschlägt, THEN THE LLM_Fulltext_Matcher SHALL dieses Team in einer separaten Fehlerliste ausweisen und es nicht als reguläres Ergebnis kategorisieren.
- THE LLM_Fulltext_Matcher SHALL die Ergebnisse nach Kategorie gruppieren und innerhalb jeder Kategorie eine deterministische Sortierreihenfolge anwenden (Sortierung primär nach Kategorie, sekundär nach
team_idaufsteigend). - WHEN
matching_method = "llm_fulltext"verwendet wird, THE MCP_Server SHALL die Ergebnistabelle fürfind_matching_teamsmit den SpaltenTeam Name,Schwerpunkt,Top-Kompetenzen,Category,Begründungausgeben.
Anforderung 8: Persistenz und Pagination der Team-Suche
User Story: Als Nutzer möchte ich auch bei einer Team-Suche durch Kategorien blättern und Filter anwenden können, damit der bestehende Such-Workflow konsistent bleibt.
Akzeptanzkriterien
- WHEN
find_matching_teamsein Suchergebnis erzeugt, THE MCP_Server SHALL ein gültigessearch_idzurückgeben, das mitget_results_by_categoryundfilter_search_resultsverwendet werden kann. - THE MCP_Server SHALL im persistierten Suchergebnis (
SearchCache) ein Feldsearch_typemit dem Wertteam_searchhinterlegen, um Team-Suchen von Kapazitäts-Suchen (capacity_search) zu unterscheiden. - THE MCP_Server SHALL im
META-JSON des Suchergebnisses sowohlsearch_type = "team_search"als auch das verwendetematching_methodausweisen, damit Folgewerkzeuge das Schema korrekt interpretieren können. - WHEN
get_results_by_categoryein Team-Suchergebnis paginiert, THE MCP_Server SHALL die Ergebnistabelle mit den für Teams definierten Spalten (Team Name,Schwerpunkt,Top-Kompetenzen, ...) ausgeben. - WHEN
filter_search_resultsein Team-Suchergebnis filtert, THE MCP_Server SHALL die Filterung auf für Teams sinnvolle Filter beschränken (Schwerpunkt-Filter, Kompetenz-Filter, Top-Kompetenz-Filter). - IF ein für Teams nicht anwendbarer Filter (z. B.
availability_date_start,availability_date_end,is_fully_available) auf ein Team-Suchergebnis angewendet wird, THEN THE MCP_Server SHALL den Filter ignorieren und in derApplied Filters-Tabelle einen Hinweis aufnehmen, dass der Filter im Team-Suchmodus nicht wirksam ist.
Anforderung 9: Detail- und Listen-Tools für Teams
User Story: Als Nutzer möchte ich einzelne Teams einsehen und eine Liste verfügbarer Teams abrufen können, damit ich Teams unabhängig von einem Matching-Lauf erkunden kann.
Akzeptanzkriterien
- THE MCP_Server SHALL ein Tool
list_teamsbereitstellen, das die erstenlimitTeams (Default 20) als Markdown-Tabelle mit den SpaltenTeam Id,Team Name,Schwerpunkt,Anzahl Kompetenzen,Anzahl Referenzenausgibt. - THE MCP_Server SHALL ein Tool
get_team_detailsbereitstellen, das anhand einer Team_Id ein einzelnes Team_Profile als Markdown-Tabelle plus Beschreibungstexte (Über uns,Leistungen,Interessen) und Listen (Kompetenzenmit Top-Markierung,Referenzenmit Partner_Name und Projektbeschreibung) ausgibt. - IF kein Team mit der angegebenen Team_Id existiert, THEN THE MCP_Server SHALL eine Fehlermeldung zurückgeben, die die ungültige Team_Id nennt.
- THE MCP_Server SHALL die Listen
KompetenzenundReferenzenin der gleichen deterministischen Reihenfolge ausgeben, die der DBClient liefert (siehe Anforderungen 3.7 und 4.7).
Anforderung 10: Anpassung der Agenten-Konfigurationen
User Story: Als Nutzer möchte ich, dass sowohl der GitHub-Copilot-Agent teamlandkarte_agent als auch der Kiro-Pendant-Agent das neue Matching gegen Team-Profile kennen und mich aktiv nach der gewünschten Profilart fragen, damit das neue Feature über die Agenten nutzbar ist.
Akzeptanzkriterien
- THE Teamlandkarte_Agent SHALL in seiner Konfigurationsdatei (
.github/agents/teamlandkarte_agent.md) und im Pendant.kiro/agents/teamlandkarte.mddie Existenz und den Zweck der beiden Profile_Type-Wertecapacityundteamdokumentieren. - WHEN der Nutzer eine Suche nach passenden Profilen für eine Aufgabe startet, THE Teamlandkarte_Agent SHALL den Nutzer explizit nach dem gewünschten Profile_Type (
capacityoderteam) fragen, sofern dieser nicht bereits aus dem Verlauf hervorgeht. - THE Teamlandkarte_Agent SHALL die Skills/Workflows so erweitern, dass
find_matching_teamsals alternatives Such-Tool zufind_matching_capacitiesverfügbar ist und mit dem Parametermatching_methodaufgerufen wird. - THE Teamlandkarte_Agent SHALL den Nutzer darauf hinweisen, dass bei einer Team-Suche keine Verfügbarkeitsfilter wirksam sind und die Ergebnisspalten von einer Kapazitäts-Suche abweichen.
- THE Teamlandkarte_Agent SHALL den bestehenden Bestätigungs-Workflow (
show_pending_requirements,confirm_requirements) beibehalten und für beide Profile_Type-Werte gleich anwenden. - THE Teamlandkarte_Agent SHALL die neuen Detail- und Listen-Tools (
list_teams,get_team_details) in den Skills/Workflows erwähnen.
Anforderung 11: Aktualisierung von Architektur- und README-Dokumentation
User Story: Als Entwickler oder Onboardee möchte ich, dass architecture.md und README.md das Matching gegen Team-Profile beschreiben, damit ich Architektur und Nutzung des Systems korrekt verstehe.
Akzeptanzkriterien
- THE Architecture_Doc SHALL einen Abschnitt enthalten, der das Team_Profile als zusätzliche Profilart beschreibt, einschließlich seiner Felder, Datenquellen und der Verknüpfungen zwischen den Views.
- THE Architecture_Doc SHALL die zusätzlichen Datenquellen (
teamlandkarte_v_teams_latest,teamlandkarte_v_teammeter_organizational_units_latest,teamlandkarte_v_teammeter_team_competences_latest,teamlandkarte_v_team_references_latest) im Datenmodell- und Schema-Verifikationsabschnitt aufführen, einschließlich der relevanten Spalten. - THE Architecture_Doc SHALL die Verknüpfungen zwischen
teamlandkarte_v_teams_latest.team_idundteamlandkarte_v_teammeter_organizational_units_latest.id(INNER JOIN für Team_Name) sowie überouidzu Kompetenzen und Referenzen dokumentieren. - THE Architecture_Doc SHALL die Verknüpfung zwischen
teamlandkarte_v_team_references_latest.partner_idundteamlandkarte_v_partners_latest.idsowie die Übernahme der Spaltenameals Partner_Name in das Team_Profile dokumentieren. - THE Architecture_Doc SHALL den Profile_Type-Parameter und seine Wertebereiche im Tool-Surface-Abschnitt für die neuen und geänderten Tools dokumentieren.
- THE Architecture_Doc SHALL den Runtime-View für die Suchrichtung Aufgabe→Team in beiden Matching-Methoden (
scoreundllm_fulltext) ergänzen. - THE Readme SHALL im Quick-Start- und Usage-Abschnitt erklären, wie der Nutzer zwischen
capacity- undteam-Suche wählt. - THE Readme SHALL die zusätzlichen Datenbank-Views aufführen, die der Server für Team-Profile liest, einschließlich der Join-Bedingungen für Team_Name (über
team_id/id), Kompetenzen und Referenzen (überouid) sowie Partner (überpartner_id). - THE Readme SHALL beschreiben, dass für Team-Suchen keine Verfügbarkeitsfilter angewendet werden und welche Ergebnisspalten in den jeweiligen Modi (
score,llm_fulltext) ausgegeben werden.
Anforderung 12: Konfiguration und Schema-Verifikation
User Story: Als Betreiber möchte ich, dass die neuen Datenbank-Views beim Start des Servers verifiziert werden und dass relevante Defaults konfigurierbar sind, damit Fehlkonfigurationen früh erkannt werden.
Akzeptanzkriterien
- THE MCP_Server SHALL beim Start die Existenz der Spalten
team_id,ouid,about_us,offerings,interests,focus_nameinteamlandkarte_v_teams_latestüber die Schema-Verifikation prüfen. - THE MCP_Server SHALL beim Start die Existenz der Spalte
id(sowie der Spalte für den Teamnamen) inteamlandkarte_v_teammeter_organizational_units_latestüber die Schema-Verifikation prüfen. - THE MCP_Server SHALL beim Start die Existenz der Spalten
ouid,competence_id,top_competencyinteamlandkarte_v_teammeter_team_competences_latestüber die Schema-Verifikation prüfen. - THE MCP_Server SHALL beim Start die Existenz der Spalten
ouid,partner_id,projectsinteamlandkarte_v_team_references_latestüber die Schema-Verifikation prüfen. - THE MCP_Server SHALL die Konfigurationsdatei
config.tomlum einen optionalen Schlüsselmatching.team.top_competency_weight(Default1.5) erweitern, der die Gewichtung von Top-Kompetenzen im Score-Matching steuert. - IF
matching.team.top_competency_weighteinen nicht-numerischen Wert oder einen Wert kleiner als1.0enthält, THEN THE MCP_Server SHALL beim Start einenConfigErrormit beschreibender Meldung werfen. - THE MCP_Server SHALL alle bestehenden Tests so erweitern oder ergänzen, dass sowohl die Profile_Type-Werte
capacityals auchteam(mit beiden Matching-Methoden, gemocktem LLM und gemockter DB) abgedeckt sind.
Anforderung 13: Round-Trip-Eigenschaft der Team-Profil-Serialisierung
User Story: Als Entwickler möchte ich sicherstellen, dass die deterministische Serialisierung eines Team_Profile stabil ist und sich semantisch identische Eingaben auf identische Ausgaben abbilden, damit die LLM-Eingabe reproduzierbar und cachebar ist.
Akzeptanzkriterien
- FOR ALL Team-Profile mit identischen Feldwerten in identischer Reihenfolge, THE MCP_Server SHALL identische serialisierte Strings produzieren (Determinismus).
- WHEN ein Team_Profile zweimal hintereinander aus identischen Datenbankzeilen aufgebaut und serialisiert wird, THE MCP_Server SHALL beide Male denselben Serialisierungsstring produzieren (Idempotenz der Profil-Bildung).
- THE MCP_Server SHALL in der serialisierten Darstellung jedes Profilfeld mit einer eindeutigen, festen Überschrift versehen, sodass aus dem Serialisierungsstring die Zuordnung der Werte zu den Feldern eindeutig ablesbar ist.
- THE MCP_Server SHALL die Reihenfolge der Listen-Elemente (
competences,references) in der serialisierten Darstellung mit der vom DBClient gelieferten Reihenfolge übereinstimmen lassen, sodass keine Sortier-Diskrepanzen zwischen DB-Schicht und Serialisierungs-Schicht entstehen.