PULSARCHU DE GUYANE · DSIO
Dossier de fabrique · recette build-time

Sonde PULSAR — fabrique & reprise

Tout ce qu'il faut pour comprendre, reconstruire et maintenir la sonde sans l'IA : topologie, dessins des flux, provenance du build, décisions (ADR), vérifications, dossier de reprise.

① Topologie② Flux d'une action③ Architecture ④ Provenance du build⑤ Décisions (ADR)⑥ Vérification⑦ Reprise

Ce dossier est la sortie de la recette de fabrique (mode build-time) : un livrable n'est « bon » que s'il est reproductible et documenté. Il complète le dossier d'architecture.

1 Topologie

🪟 WIN10 — poste cible 192.168.1.10 PULSAR-Sonde.exe (sortant) remotemkd (cible de test) ✓ aucun port ouvert (anti-inbound) 🐧 ABUX — serveur souverain 192.168.1.55 serveur_recette.py · 9333 HTTPS téléchargement · 9345 orchestrateur + audit + registre présence + heartbeat → 9333 poll commandes / résultats / chat téléchargement de l'exe ← 9345

Tous les liens utiles partent de WIN10 vers Abux (modèle sortant) : aucun port ouvert sur le poste. Seul le téléchargement initial de l'exe va dans l'autre sens (HTTP 9345).

2 Flux d'une action (cycle de vie)

① Opérateur / IAenqueue (gouverné) ② File commandesmode.json gate ③ Sonde pollsortant · exécute ④ Résultat+ capture ⑤ Ticket + AUDIThash-chaîné

Chaque action est gouvernée (étape ②, selon mode.json) et tracée (étape ⑤, audit hash-chaîné). La connexion d'une sonde déclenche en plus une recette d'exploitation proposée (orchestrateur).

3 Architecture en couches

CoucheComposantRôle
PrésentationWinForms (exe) · console webAdmin sonde, chat, « Postes connectés », « Recette gouvernée »
TransportHTTPS 9333 (jeton) · sortantprésence, commandes, résultats, chat, watch
Gouvernancemode.json · RBAC · auditpilote/hybride/autonome ; preuve hash-chaînée
Orchestrationworker présenceréflexe autonome : fiche + recette proposée
Stockagepresence.json · inbox · recettes/ · interventions.jsonlétat + preuves, lisibles sur disque

Détail dans le dossier d'architecture.

4 Provenance du build (chaîne reproductible)

Program.cs +PulsarSonde.csproj dotnet publish -c Releaseself-contained, win-x64 PULSAR-Sonde.exe~64 Mo, PE32+ x64 copie → demo-kit/ diffusion HTTP 9345
# Reconstruire à l'identique (depuis Abux, SDK .NET 8 en $HOME/.dotnet)
export DOTNET_ROOT=$HOME/.dotnet ; export PATH=$HOME/.dotnet:$PATH
cd recette/sonde-exe
rm -rf bin obj
dotnet publish -c Release
cp bin/Release/net8.0-windows/win-x64/publish/PULSAR-Sonde.exe ../demo-kit/PULSAR-Sonde.exe

Cross-build Windows depuis Linux grâce à <EnableWindowsTargeting>true</EnableWindowsTargeting>. Logo CHU embarqué en ressource (chu-logo.png).

5 Décisions d'architecture (ADR)

#DécisionRaison
ADR-1Modèle sortant (la sonde appelle le serveur)Souveraineté : aucun port ouvert sur les postes du CHU.
ADR-2Pas de SSH ni de serveur web sur la sondeInbound = surface d'attaque ; hors gouvernance PULSAR.
ADR-3Présence par annonce (heartbeat) + orchestrateur« La sonde est là, prête » sans inbound ; précurseur du fast-lane.
ADR-4Recette gouvernée (proposée, pas auto-exécutée)L'humain autorise ; trace + PV documenté.
ADR-5Commandes encodées base64 / -EncodedCommandZéro souci de guillemets / accents / multi-lignes.
ADR-6Exe self-contained (.NET embarqué)Aucun pré-requis sur le poste ; plus de souci d'encodage BOM.
ADR-7Élévation Windows par UAC visible (jamais de bypass)Cohérent avec un control plane qui détecte l'élévation furtive.

6 Vérification (preuves)

7 Dossier de reprise (maintenir sans l'IA)

Quoi
Code sonde (exe)recette/sonde-exe/Program.cs · PulsarSonde.csproj
Serveur + consolerecette/serveur_recette.py (endpoints, orchestrateur, pages)
Modèle de recetterecette/recette_checklists.json (run + build)
Sonde PowerShell (équiv.)recette/demo-kit/PULSAR-Sonde-Admin.ps1
Pilotage / diagnosticrecette/pulse.py · recette/win/winssh · winshot
Preuves / étatpresence.json · recettes/ · interventions.jsonl · inbox/ · registre-actions.jsonl
🛡️ Principe. L'IA produit et documente ; l'humain autorise ; la trace prouve. Ce dossier garantit qu'une équipe DSIO reprend la sonde — la reconstruit, la fait évoluer — sans dépendre de l'IA. Dette technique connue : l'orchestrateur utilise @app.on_event("startup") (déprécié FastAPI) → migrer vers lifespan.