feat(iace): Sprint 3B — Human Interaction Model

- 6 Standard-Rollen: operator, maintenance_tech, programmer, cleaning_staff, bystander, supervisor
- HumanRoles []string Feld in HazardPattern, MatchInput, PatternMatch
- patternMatches() filtert Patterns nach Rolle (nil = feuert fuer alle Rollen)
- MatchReason um human_role Typ erweitert (Explainability)
- 25 bestehende Patterns mit Rollen annotiert:
  - Cobot HP059/062/064 → operator/programmer
  - Maintenance HP700-714 → maintenance_tech/programmer
  - Operational HP070/073-078/080 → operator/maintenance_tech/programmer
- Init + Parser Handler reichen Roles an MatchInput durch
- 4 neue Tests: NilFiresAlways, MaintenanceTechFilter, ProgrammerTeachMode, RoleCount

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-10 08:22:55 +02:00
parent f201c01a06
commit f07c4db164
8 changed files with 183 additions and 25 deletions
@@ -104,6 +104,7 @@ func (h *IACEHandler) InitializeProject(c *gin.Context) {
CustomTags: parseResult.CustomTags,
OperationalStates: parseResult.OperationalStates,
StateTransitions: parseResult.StateTransitions,
HumanRoles: parseResult.Roles,
})
steps = append(steps, InitStep{
Name: "Patterns abgeglichen",
@@ -75,6 +75,7 @@ func (h *IACEHandler) ParseNarrative(c *gin.Context) {
CustomTags: parseResult.CustomTags,
OperationalStates: parseResult.OperationalStates,
StateTransitions: parseResult.StateTransitions,
HumanRoles: parseResult.Roles,
}
matchOutput := engine.Match(matchInput)