{"entries":[{"id":"KB-PS1-ENCODING-UTF8BOM","title":"Windows PowerShell 5.1 parsing requires UTF-8 with BOM or pure ASCII for .ps1","blocking":false,"workaround":"Save .ps1 as UTF-8 BOM; avoid typographic punctuation; or run in pwsh Core.","note":"","fix":"","tags":["powershell","encoding","utf8-bom","compat"],"seen_in_threads":["2025-10-18"],"last_seen":""},{"id":"KB-PS1-TYPO-PUNCT","title":"Typographic quotes and em/en dash break PowerShell parser when file is read as ANSI","blocking":false,"workaround":"Normalize to ASCII: replace curly quotes and dashes and NBSP; keep scripts ASCII-safe.","note":"","fix":"","tags":["powershell","quotes","emdash","ansi"],"seen_in_threads":["2025-10-18"],"last_seen":""},{"id":"KB-EXEC-POLICY-BYPASS","title":"ExecutionPolicy AllSigned blocks unsigned scripts on network shares","blocking":false,"workaround":"Use -ExecutionPolicy Bypass per-process; generate .cmd wrappers that call powershell.exe -ExecutionPolicy Bypass","note":"","fix":"","tags":["powershell","executionpolicy","bypass","netshare"],"seen_in_threads":["2025-10-18"],"last_seen":""},{"id":"BUGKB-ONE-SHOT-GATING-2025-10-17","title":"Execution apres N due to non-hermetic gating and ternary misuse","blocking":false,"workaround":"","note":"","fix":"(summary=Encapsulation hermetique \u0026 { } + EXECUTE uniquement si ( -eq \u0027O\u0027); suppression du ternary; code_guardrail=System.Object[]; recipe_steps=System.Object[]}","tags":["powershell","paste-ready","gating","safe-create","governance"],"seen_in_threads":[],"last_seen":""},{"id":"BUGKB-BOOT-PACK-KB-MISSING-2025-10-17","title":"Boot-pack incomplet (KB et Patch History absents) entraine boucles et incoherences","blocking":false,"workaround":"","note":"","fix":"(summary=Rendre KB et Patch History obligatoires dans le BOOT-PACK + enforcer et audit; code_guardrail=System.Object[]; recipe_steps=System.Object[]}","tags":["governance","boot-pack","kb","patch-history","paste-ready","safe-create"],"seen_in_threads":[],"last_seen":""},{"id":"KB-20251018-130600","title":"Unhandled script error: Out-File : Le processus ne peut pas acc ...","blocking":false,"workaround":"","note":"","fix":"","tags":["powershell","autolog","ps51","unclassified","oneshot","slof"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T13:06:00+02:00"},{"id":"KB-AUTO-selftest-pipeline-unc-only-20251018_134930","title":"Selftest pipeline (UNC-only)","blocking":false,"workaround":"n/a","note":"synthetic for pipeline check","fix":"n/a","tags":["selftest","slof"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-ps-5-1-operateur-ternaire-non-supporte-20251018_135633","title":"PS 5.1: operateur ternaire non supporte","blocking":true,"workaround":"Remplacer par if()/else ou logique equivalente","note":"Syntaxe ? : non prise en charge par le parser PS 5.1","fix":"Tous les ternaires remplaces par if()/else","tags":["powershell","ps51","syntax","ternary","ps5-compat","parser"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-ps-5-1-select-string-sans-recurse-20251018_135633","title":"PS 5.1: Select-String sans -Recurse","blocking":false,"workaround":"Boucler sur Get-ChildItem et appeler Select-String fichier par fichier","note":"Parametre -Recurse indisponible en PS 5.1","fix":"Toujours pattern PS5.1-compat pour la recherche","tags":["powershell","ps51","select-string","compat"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T13:56:32+02:00"},{"id":"KB-AUTO-safe-write-creer-dossiers-avant-tmp-20251018_135633","title":"SAFE-WRITE: creer dossiers avant .tmp","blocking":false,"workaround":"Ensure-Parent(Split-Path Dest) + creer stage en amont","note":"Copy-Item vers \u003cDest\u003e.tmp echoue si parent manquant","fix":"Write-SafeTxt garantit parents avant copy/move","tags":["safe-write","io","dirs","compat"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T13:56:32+02:00"},{"id":"KB-AUTO-bug-kb-json-txt-entries-tableau-strip-footer-20251018_135633","title":"BUG_KB.json.txt: entries = tableau [] + strip footer","blocking":false,"workaround":"Forcer entries=@(...) et retirer footer a la lecture","note":"entries en {} + footer melange au JSON -\u003e parsing KO","fix":"Read-KbObj normalise entries[] et strip footer","tags":["kb","json","footer","compat"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T13:56:32+02:00"},{"id":"KB-AUTO-join-path-ne-doit-pas-recevoir-un-tableau-de-childpath-ps-5-1-20251018_155750","title":"Join-Path ne doit pas recevoir un tableau de ChildPath (PS 5.1)","blocking":false,"workaround":"Boucler sur chaque segment ou construire la liste puis Join-Path par segment; ne pas passer un tableau directement a ChildPath","note":"Join-Path a recu plusieurs ChildPath en tableau -\u003e objet System.Object[] au lieu d\u0027un chemin (erreur de binding)","fix":"SAFE-SYNC corrige en bouclant sur TargetRel et Join-Path par element; PS 5.1 proof","tags":["powershell","join-path","ps5-compat","safe-sync"],"seen_in_threads":[],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-ps-5-1-select-string-sans-recurse-boucler-fichiers-20251018_160307","title":"PS 5.1: Select-String sans -Recurse (boucler fichiers)","blocking":true,"workaround":"Lister les fichiers avec Get-ChildItem puis appeler Select-String sur chaque chemin","note":"Select-String -Recurse n\u0027existe pas sur PS 5.1 -\u003e parametre introuvable","fix":"Remplacement par boucle foreach sur la liste de fichiers","tags":["powershell","ps5-compat","select-string","recurse"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-bug-kb-json-txt-entries-tableau-strip-footer-avant-convertfrom-json-20251018_160433","title":"BUG_KB.json.txt: entries = tableau [] + strip footer avant ConvertFrom-Json","blocking":true,"workaround":"Toujours entries=[...] et retirer le footer avant parsing","note":"entries detecte comme objet {} et footer SAFE-WRITE casse ConvertFrom-Json","fix":"Canonisation ecriture JSON avec entries=[...] et de-strip footer a la lecture","tags":["kb","json","footer","safe-write","parser"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-safe-write-creer-repertoires-avant-tmp-20251018_160648","title":"SAFE-WRITE: creer repertoires avant .tmp","blocking":true,"workaround":"Ensure-Parent avant ecriture / copie .tmp","note":"Copy/Move sur .tmp dans un dossier parent inexistant -\u003e DirectoryNotFound","fix":"Ensure-Parent ajoute dans les helpers d\u0027ecriture","tags":["safe-write","io","windows"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-join-path-ne-pas-passer-un-tableau-en-childpath-20251018_161141","title":"Join-Path: ne pas passer un tableau en ChildPath","blocking":true,"workaround":"Joindre segment par segment dans une boucle","note":"Passage d\u0027un tableau a ChildPath -\u003e System.Object[] et erreur de binding","fix":"SAFE-SYNC corrige: boucle sur TargetRel","tags":["powershell","path","join-path","bugfix"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-ps-5-1-ps1-en-utf-8-avec-bom-ou-ascii-strict-20251018_162239","title":"PS 5.1: .ps1 en UTF-8 avec BOM (ou ASCII strict)","blocking":true,"workaround":"Sauver .ps1 en UTF-8 BOM ou normaliser ASCII","note":"Fichiers UTF-8 sans BOM + typo-chars -\u003e erreurs parser","fix":"Ecriture .ps1 avec UTF-8 BOM dans les scripts d\u0027installation","tags":["powershell","encoding","utf8-bom"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-typo-quotes-dashes-nbsp-normaliser-ascii-20251018_164836","title":"Typo quotes/dashes/nbsp: normaliser ASCII","blocking":false,"workaround":"Remplacer par quotes/tirets ASCII et espaces normaux","note":"Guillemets typographiques, tirets en/em, nbsp provoquent erreurs de parsing","fix":"Etape de normalisation ajoutee lors de correctifs","tags":["encoding","ascii","parser"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-executionpolicy-allsigned-sur-unc-utiliser-bypass-ou-wrapper-cmd-20251018_165000","title":"ExecutionPolicy AllSigned sur UNC: utiliser Bypass ou wrapper .cmd","blocking":true,"workaround":"powershell.exe -ExecutionPolicy Bypass -File ...","note":"AllSigned bloque .ps1 non signes sur partages UNC","fix":"Wrappers .cmd ASCII + appels Bypass systematise","tags":["executionpolicy","unc","security","wrapper"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-wrapper-cmd-ascii-et-appel-bypass-20251018_165010","title":"Wrapper .cmd: ASCII et appel Bypass","blocking":false,"workaround":"Wrapper ASCII sans BOM, appel powershell.exe -ExecutionPolicy Bypass","note":".cmd avec BOM ou appels sans Bypass posent souci","fix":"New-CmdWrapper et run_in_govshell.cmd standardises","tags":["wrapper","cmd","ascii","bypass"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-boot-pack-sections-obligatoires-boot-pack-bug-kb-json-policy-20251018_165019","title":"Boot-pack sections obligatoires: [BOOT-PACK],[BUG_KB_JSON],[POLICY]","blocking":true,"workaround":"Verifier/ajouter sections et JSON valide","note":"Sections manquantes -\u003e validation et gating incoherents","fix":"Scripts de sync mettent a jour bootpack.txt","tags":["bootpack","policy","governance"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-deprecation-bug-kb-jsonl-au-profit-de-bug-kb-json-txt-20251018_165029","title":"Deprecation BUG_KB.jsonl au profit de BUG_KB.json.txt","blocking":false,"workaround":"Converger vers BUG_KB.json.txt canonique","note":"Deux sources KB (jsonl et json.txt) entrainent divergences","fix":"Script de convergence + update bootpack","tags":["kb","canonical","jsonl","cleanup"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-unc-health-check-avant-ecritures-20251018_165039","title":"UNC health check avant ecritures","blocking":false,"workaround":"Ecriture test et verif sha256 avant operations","note":"Handles ou verrous peuvent casser writes sur UNC","fix":"UNC_HEALTH ecrit en logs + gating","tags":["unc","io","healthcheck"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-pas-de-lecteur-z-unc-only-staging-local-20251018_165050","title":"Pas de lecteur Z: UNC only + staging local","blocking":false,"workaround":"Toujours UNC + staging C:\\\\Temp_Gouvernance","note":"Lecteur mappes non persistants et sources d\u0027erreurs","fix":"Scripts normalises sur UNC-only","tags":["unc","staging","infra"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"BUGKB-ONE-SHOT-GATING-2025-10-17","title":"Unhandled script error: Out-File : Le processus ne peut pas acceder au fichier","blocking":true,"workaround":"Analyser le message, reproduire, ajouter une r gle pr cise.","note":"Erreur non classifi e (voir log).","fix":"SAFE-SYNC corrige en bouclant sur TargetRel et Join-Path par element; PS 5.1 proof","tags":["powershell","encoding","utf8-bom","compat","quotes","emdash","ansi","executionpolicy","bypass","netshare","paste-ready","gating","safe-create","governance","boot-pack","kb","patch-history","autolog","ps51","unclassified","oneshot","slof","selftest","syntax","ternary","ps5-compat","parser","select-string","safe-write","io","dirs","json","footer","join-path","safe-sync","recurse","windows","path","bugfix","ascii","unc","security","wrapper","cmd","bootpack","policy","canonical","jsonl","cleanup","healthcheck","staging","infra"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"KB-AUTO-selftest-pipeline-v1-2-preview-20251018_182309","title":"Selftest pipeline v1.2 (preview)","blocking":false,"workaround":"n/a","note":"synthetic","fix":"n/a","tags":["selftest","v1.2"],"seen_in_threads":["2025-10-18"],"last_seen":"2025-10-18T18:23:08+02:00"},{"id":"bug-ps-5-1-operateur-ternaire-interdit-20251019144124","title":"PS 5.1: operateur ternaire interdit","blocking":true,"workaround":"","note":"Parse error sur \u0027? :\u0027 dans PS5.1. Correction: remplacer par if/else.","fix":"","tags":["powershell","ps51","parser"],"seen_in_threads":[],"last_seen":"2025-10-19T14:41:24+02:00"},{"id":"bug-scripts-ps1-litteraux-mojibake-utf-8-typographiques-provoque-20251019150738","title":"Scripts .ps1: litteraux mojibake/UTF-8 typographiques provoquent ParserError","blocking":true,"workaround":"","note":"Guillemets/tirets typographiques encodes en CP1252 (affiches en \u0027a \u0027, \u0027a \u0027, \u0027a \u0027) cassent PS5.1. Corrections: forcer UTF-8 BOM, utiliser des escapes Unicode (U+2013/U+2014) ou ASCII, bannir les litteraux non-ASCII dans .ps1.","fix":"","tags":["powershell","encoding","utf8bom","mojibake","ps51","parser"],"seen_in_threads":[],"last_seen":"2025-10-19T15:07:38+02:00"},{"id":"bug-kb-bug-intake-gate-v1-2-ecriture-temporaire-dans-chemin-scri-20251019151802","title":"kb_bug_intake_gate v1.2: ecriture temporaire dans chemin script DirectoryNotFoundException","blocking":true,"workaround":"","note":"En v1.2, l\u0027AUTO etait ecrit via un chemin temporaire derive du repertoire du script (ex: kb_bug_intake_gate_v1.2.ps1\\write_xxx), provoquant DirectoryNotFoundException et la non-creation de l\u0027AUTO. Correctifs: StageRoot dedie (C:\\Temp_Gouvernance\\stage_io), Ensure-Parent/Ensure-Dir avant ecriture, ecriture atomique (.tmp -\u003e Move-Item), UTF-8 BOM.","fix":"","tags":["powershell","io","safe-write","staging","ps51"],"seen_in_threads":[],"last_seen":"2025-10-19T15:18:02+02:00"},{"id":"bug-ps-5-1-et-non-supportes-parsererror-20251019152554","title":"PS 5.1: ?. et ?? non supportes -\u003e ParserError","blocking":true,"workaround":"","note":"En PS 5.1, les operateurs ?. (null-conditional) et ?? (null-coalescing) ne sont pas pris en charge: ParserError. Corrections: remplacer par if/else, verifs explicites ($obj -and $obj.Prop), helpers (TryGet), et bannir ?. / ?? dans les scripts PS5.1.","fix":"","tags":["powershell","ps51","parser","compatibility","null-conditional","null-coalescing"],"seen_in_threads":[],"last_seen":"2025-10-19T15:25:54+02:00"},{"id":"bug-nowiso-parsing-function-nowiso-vs-f-formatting-20251019234618","title":"NowIso parsing: function NowIso vs -f formatting","blocking":true,"workaround":"","note":"Symptoms: ExpectedExpression/UnexpectedToken quand 2025-10-19T23:46:17/(NowIso()) est mele au -f. Fix: function NowIso { (Get-Date).ToString(\u0027s\u0027) } + usage propre (precompute var ou -f correct).","fix":"","tags":["powershell","parsing","formatting","ps51","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:46:18+02:00"},{"id":"bug-arg-passing-concat-preview-root-et-root-root-20251019234630","title":"Arg passing: concat -Preview-Root et Root:-Root","blocking":true,"workaround":"","note":"Symptoms: -Preview-Root, Root:-Root, chemins vides. Cause: concatenation/sequencage d\u0027args. Fix: tableau d\u0027arguments propre; ne passer -Root qu\u0027aux steps qui le prennent.","fix":"","tags":["powershell","args","binding","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:46:30+02:00"},{"id":"bug-runner-switches-injection-execute-preview-forces-param-error-20251019234641","title":"Runner switches injection: -Execute/-Preview forces -\u003e param errors","blocking":true,"workaround":"","note":"Erreur quand le runner force -Execute/-Preview sur des scripts sans ces switches. Fix: detecter switches supportes et n\u0027ajouter que si pertinent; -Root seulement si requis.","fix":"","tags":["wrapper","runner","params","preview","execute","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:46:41+02:00"},{"id":"bug-cmd-bom-header-ef-bb-bf-echo-off-20251019234653","title":"CMD BOM header: EF BB BF -\u003e ???@echo off","blocking":false,"workaround":"","note":"Cause: wrappers .cmd en UTF-8 BOM. Fix: enregistrer wrappers .cmd en ASCII/UTF-8 sans BOM (texte pur).","fix":"","tags":["encoding","cmd","utf8","bom","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:46:53+02:00"},{"id":"bug-wrapper-recursion-stack-overflow-20251019234704","title":"Wrapper recursion -\u003e stack overflow","blocking":true,"workaround":"","note":"Symptome: recursion involontaire du wrapper (re-entree). Fix: appel PS direct sur cache, trace entree, garde anti-reentree.","fix":"","tags":["wrappers","controlflow","stack","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:47:04+02:00"},{"id":"bug-root-null-empty-join-path-test-path-errors-20251019234715","title":"Root Null/Empty -\u003e Join-Path/Test-Path errors","blocking":true,"workaround":"","note":"Symptome: ParameterArgumentValidationErrorEmpty/NullNotAllowed. Cause: binding casse. Fix: valider -Root avant Join-Path/Test-Path; passer -Root uniquement aux steps qui le prennent.","fix":"","tags":["paths","validation","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:47:15+02:00"},{"id":"bug-regex-refactor-fragile-ireplace-badreplaceargument-20251019234726","title":"Regex refactor fragile (-ireplace) -\u003e BadReplaceArgument","blocking":false,"workaround":"","note":"Lecon: eviter regex intelligents pour refactor; preferer reecriture atomique/sure.","fix":"","tags":["regex","refactor","risk","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:47:26+02:00"},{"id":"bug-acceptance-pointer-null-invokemethodonnull-20251019234737","title":"Acceptance pointer null -\u003e InvokeMethodOnNull","blocking":false,"workaround":"","note":"Symptome: .ToLower() sur null. Fix: null-guards avant comparaisons; PASS ensuite.","fix":"","tags":["null-guards","acceptance","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:47:37+02:00"},{"id":"bug-manifest-emit-resume-manifest-erreurs-de-bloc-parentheses-20251019234748","title":"Manifest (emit_resume_manifest) -\u003e erreurs de bloc/parentheses","blocking":false,"workaround":"","note":"Symptomes: Expression manquante apres , ; bloc non ferme. Cause: saisie manuelle. Statut: non bloquant.","fix":"","tags":["manifest","syntax","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:47:48+02:00"},{"id":"bug-cache-local-script-not-found-20251019234800","title":"Cache local: script not found","blocking":false,"workaround":"","note":"Fix: robocopy du NAS vers cache + verif existence avant execution; comparer SHA NAS vs cache.","fix":"","tags":["cache","robocopy","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:48:00+02:00"},{"id":"bug-cli-tags-tokens-orphelins-mal-routes-ps5-1-20251019234813","title":"CLI Tags: tokens orphelins mal routes (PS5.1)","blocking":true,"workaround":"","note":"Tokens residuels non quotes glissaient vers Workaround/Fix. Fix: capture remainder en Tags + normalisation CSV/guillemets/espaces.","fix":"","tags":["powershell","parser","ps51","tags","normalize","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:48:13+02:00"},{"id":"bug-executionpolicy-allsigned-unc-bloque-ps1-20251019234824","title":"ExecutionPolicy AllSigned: UNC bloque .ps1","blocking":true,"workaround":"","note":"AllSigned interdit l\u0027execution directe depuis UNC. Solution: wrappers .cmd ASCII, copie en cache local, powershell.exe -ExecutionPolicy Bypass.","fix":"","tags":["powershell","AllSigned","UNC","wrapper","Bypass","session:guard-20251019","kb_bug_intake_gate_v1.6.ps1"],"seen_in_threads":[],"last_seen":"2025-10-19T23:48:24+02:00"}],"updated":"2025-10-19T23:48:30+02:00"}