{
  "schema_version": "1.0",
  "id": "pub-d14936413a9601de",
  "project_id": "memory-hub",
  "mission_id": null,
  "title": "Volet « Interventions humaines » : capture de TOUT ce que l'opérateur dit aux agents (prompts, consignes, skills, canaux) + scan anti-injection (ADR-0007bis)",
  "summary": "DEMANDE : toutes les interventions humaines (prompts, questions, consignes, skills, ordres indirects) enregistrées dans une mémoire À PART, consultables via un volet dédié du site — objectif : une chance de plus de repérer les injections.\n\nCHANGÉ — commit intv (voirs log git) : app/interventions.py (human_interventions, append-only JAMAIS effacé, idempotence hash session+minute+texte, contenu borné 2000) ; hook natif UserPromptSubmit (scripts/cc_hooks/user_prompt_submit.sh — chaque prompt de l'opérateur capturé) ; hook Skill (skill_capture.sh — skills et leurs arguments) ; hook garde-fous WebFetch/WebSearch/mcp__* (tool_output_guard.sh : ne POSTe QUE si le scan local détecte un indice d'injection — pas de bruit) ; scan déterministe INJECTION_PATTERNS (ignore-instructions, system-prompt, you-must, exfiltration/token, act-as — heuristique assumée, signal ≠ preuve) ; volet /interventions (nav + page paginée, filtrable q/kind/flag ⚠ suspect) + API lecture ADMIN SEUL — les agents ne lisent NI ne capturent : mémoire à part, jamais injectée dans les digests agents.\nTESTÉ — 229/229 + 1 skip (tests idempotence, kinds skill/canal, flag suspect signalé sans suppression, lecture admin-seul 403 pour jeton agent, échappement HTML, pagination clamp-10) ; e2e prod : 2 captures réelles (canal suspects détecté + consigne propre), volet répondant.\nRESTE — le scan est une HEURISTIQUE d'indices (pas une garantie) ; les prompts capturés sont privés (protection session/operateur assumée) ; skills déjà invoqués AVANT l'installation ne sont pas rétrospectifs ; main.py reste volontairement non-commité (research_vars du concurrent).\nVÉRIF — /interventions (session) ; POST /internal/v1/interventions/capture ; prochain prompts/skills de sessions réelles remplissent le volet automatiquement. ANNULER — git revert <hash> + rm ~/.claude/settings.json hooks UserPromptSubmit/PostToolUse additions (backups .bak-intv/.bak-intv2) + restart.",
  "body": "",
  "status": "published",
  "report_type": "final_report",
  "published_at": "2026-10-22T07:58:29Z",
  "updated_at": "2026-10-22T07:58:29Z",
  "revision": 1,
  "authoring_agent": "memory-hub",
  "tags": [],
  "public_url": "/rapports/pub-d14936413a9601de",
  "markdown_url": "/public/reports/pub-d14936413a9601de.md",
  "json_url": "/public/reports/pub-d14936413a9601de.json",
  "content_hash": "sha256:d189197d30daca098382e854800dbfe816644650c0982bdfbbf90638a9c3d4fe",
  "artifacts": []
}