Some checks failed
Qualité & Sécurité / MegaLinter (PMD · Ruff · Bandit · gitleaks · hadolint) (push) Successful in 1m9s
Build & Push Images / build (brain) (push) Successful in 1m10s
Qualité & Sécurité / Trivy (CVE dépendances Maven / pip / npm) (push) Failing after 2m36s
Build & Push Images / build (web) (push) Successful in 1m48s
Build & Push Images / build-switcher (push) Successful in 20s
Build & Push Images / build (core) (push) Successful in 3m9s
Qualité & Sécurité / Web (ESLint · angular-eslint + sonarjs) (push) Successful in 38s
CI (Gitea Actions) : - Nouveau workflow quality.yml (séparé de ci.yml, non bloquant pour la release) : MegaLinter v9 (PMD, Ruff, Bandit, gitleaks, hadolint), ng lint (web) et Trivy (CVE des dépendances Maven/pip/npm), sur main + beta + PR - Trivy : préchargement du cache Maven avant le scan — sans ça Maven Central rate-limite l'IP du runner (429) en résolvant les BOMs du parent Spring Boot - upload-artifact v4 → v3 : l'API artifacts v4 n'est pas supportée par Gitea (corrige aussi l'upload du rapport Playwright de e2e.yml, cassé depuis toujours) - Ruleset PMD projet (java-pmd-ruleset.xml, auto-détecté par MegaLinter) orienté bugs réels, sans le style Lombok-hostile du défaut : 11 337 → 65 findings ; PMD en mode rapport (JAVA_PMD_DISABLE_ERRORS) le temps de purger ce backlog Web : - angular-eslint 21 + eslint-plugin-sonarjs : les règles Sonar vivent désormais dans ESLint (config web/eslint.config.js, réglages justifiés en commentaire) - tsconfig : skipLibCheck + types:[] + node_modules ré-exclu — répare les builds desktop Windows/Linux cassés par le conflit @types/eslint-scope vs ESLint 9 - Purge du backlog lint : 114 erreurs → 0 sur 66 fichiers (ngOnDestroy vides supprimés, any typés avec les vrais DTOs, outputs (close) → (closed), regex super-linéaires désamorcées, ternaires/fonctions imbriqués dépliés, intention documentée sur les catch/error volontairement vides) - Bug latent corrigé au passage : license.service.disconnect() émettait undefined au lieu de true en cas de succès (masqué par un double cast)
32 lines
987 B
HTML
32 lines
987 B
HTML
<div class="cv-page">
|
|
<div class="cv-toolbar">
|
|
<button class="btn-back" (click)="back()">
|
|
<lucide-icon [img]="ArrowLeft" [size]="14"></lucide-icon>
|
|
{{ 'common.back' | translate }}
|
|
</button>
|
|
<span class="spacer"></span>
|
|
@if (characterId) {
|
|
<button class="btn-ai" (click)="toggleChat()" [class.active]="chatOpen">
|
|
<lucide-icon [img]="Sparkles" [size]="14"></lucide-icon>
|
|
{{ 'characterView.aiAssistant' | translate }}
|
|
</button>
|
|
}
|
|
<button class="btn-edit" (click)="edit()">
|
|
<lucide-icon [img]="Edit3" [size]="14"></lucide-icon>
|
|
{{ 'common.edit' | translate }}
|
|
</button>
|
|
</div>
|
|
|
|
<app-persona-view [persona]="character" [templateFields]="templateFields"></app-persona-view>
|
|
</div>
|
|
|
|
@if (characterId && campaignId) {
|
|
<app-ai-chat-drawer
|
|
[campaignId]="campaignId"
|
|
entityType="character"
|
|
[entityId]="characterId"
|
|
[isOpen]="chatOpen"
|
|
(closed)="chatOpen = false">
|
|
</app-ai-chat-drawer>
|
|
}
|