diff --git a/.claude/rules/loc-exceptions.txt b/.claude/rules/loc-exceptions.txt index 853cb6ba..9c6a95eb 100644 --- a/.claude/rules/loc-exceptions.txt +++ b/.claude/rules/loc-exceptions.txt @@ -231,3 +231,13 @@ admin-compliance/app/sdk/ai-act/page.tsx # Endpoint-/Helfer-Gruppen geplant; bis dahin Exception mit Rationale. # [guardrail-change] backend-compliance/compliance/api/agent_doc_check_extras.py + +# --- 2026-06-10 CI-Unblocker: IACE handler init helpers --- +# iace_handler_init_helpers.go (530 im CI-Stand): Init-/Wiring-Helfer der +# IACE-Handler, ueber den 500-Cap gewachsen. Die andere Session hat die Datei +# im Working-Tree bereits auf 455 Zeilen gesplittet (uncommittet) — sobald +# dieser Split committet ist, MUSS diese Exception wieder entfernt werden. +# Bis dahin Exception mit Rationale, damit der Deploy nicht an pre-existing +# IACE-Refactor-Zwischenstand scheitert. +# [guardrail-change] +ai-compliance-sdk/internal/api/handlers/iace_handler_init_helpers.go diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index a4c39796..d096d828 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -422,7 +422,7 @@ jobs: steps: - name: Checkout run: | - apk add --no-cache git python3 + apk add --no-cache git python3 py3-yaml git clone --depth 1 --branch ${GITHUB_REF_NAME} ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git . - name: Validate every Dockerfile + compose block declares BUILD_SHA run: | diff --git a/ai-compliance-sdk/cmd/iace-audit/main.go b/ai-compliance-sdk/cmd/iace-audit/main.go index 11382c6b..eda07173 100644 --- a/ai-compliance-sdk/cmd/iace-audit/main.go +++ b/ai-compliance-sdk/cmd/iace-audit/main.go @@ -54,11 +54,11 @@ func cmdReachability(_ []string) { "universe_tags": len(r.UniverseTags), }) if len(r.UnreachablePatterns) > 0 { - fmt.Println("\n## Unreachable patterns (top 30 by priority):\n") + fmt.Println("\n## Unreachable patterns (top 30 by priority):") printPatternRows(r.UnreachablePatterns, 30) } if len(r.WeakPatterns) > 0 { - fmt.Println("\n## Weakly reachable (top 20 by priority):\n") + fmt.Println("\n## Weakly reachable (top 20 by priority):") printPatternRows(r.WeakPatterns, 20) } writeJSON("audit-reports/reachability.json", r) @@ -72,7 +72,7 @@ func cmdConsistency(_ []string) { "incomplete": r.Incomplete, }) if len(r.IncompleteComponents) > 0 { - fmt.Println("\n## Components missing tags for declared hazard categories:\n") + fmt.Println("\n## Components missing tags for declared hazard categories:") for _, c := range r.IncompleteComponents { fmt.Printf("- %s (%s)\n", c.ComponentID, c.NameDE) for _, miss := range c.MissingForCategories { @@ -99,7 +99,7 @@ func cmdVocabulary(args []string) { "unknown_with_pattern_hit": len(r.SuggestedDictionaryEntries), }) if len(r.SuggestedDictionaryEntries) > 0 { - fmt.Println("\n## Suggested dictionary additions (token appears in pattern scenarios but not in dict):\n") + fmt.Println("\n## Suggested dictionary additions (token appears in pattern scenarios but not in dict):") for _, s := range r.SuggestedDictionaryEntries { fmt.Printf("- '%s' → seen in %d patterns. Examples: %s\n", s.Token, len(s.PatternIDs), joinFirst(s.PatternIDs, 5)) } @@ -129,7 +129,7 @@ func cmdEcho(args []string) { "orphaned": r.Orphaned, }) if len(r.OrphanedPhrases) > 0 { - fmt.Println("\n## Orphaned phrases (no hazard echoes them):\n") + fmt.Println("\n## Orphaned phrases (no hazard echoes them):") for _, o := range r.OrphanedPhrases { fmt.Printf("- [%s] %s\n", o.Field, truncate(o.Phrase, 120)) } @@ -163,7 +163,7 @@ func cmdHierarchy(args []string) { "missing_info": r.MissingInfo, }) if len(r.IncompleteHazards) > 0 { - fmt.Println("\n## Hazards with incomplete hierarchy:\n") + fmt.Println("\n## Hazards with incomplete hierarchy:") for _, h := range r.IncompleteHazards { fmt.Printf("- [%s] %s — missing: %s\n", h.Category, truncate(h.Name, 70), joinFirst(h.MissingLevels, 3)) } diff --git a/ai-compliance-sdk/internal/iace/document_export_sources.go b/ai-compliance-sdk/internal/iace/document_export_sources.go index 1134dc91..e7df2b5f 100644 --- a/ai-compliance-sdk/internal/iace/document_export_sources.go +++ b/ai-compliance-sdk/internal/iace/document_export_sources.go @@ -94,7 +94,7 @@ func extractCitedNorms(hz []Hazard, mt []Mitigation) []string { seen := make(map[string]bool) consider := func(s string) { fields := strings.FieldsFunc(s, func(r rune) bool { - return r == ' ' || r == ',' || r == ';' || r == '\n' || r == ';' || r == '(' + return r == ' ' || r == ',' || r == ';' || r == '\n' || r == '(' }) for i := 0; i < len(fields)-1; i++ { head := strings.ToUpper(strings.TrimSpace(fields[i]))