Lot 43 : jobs d'arrière-plan du mode Code tenus par la façade

bash_bg et bash_tail des tours de la façade ne passent plus par /tool/exec
du Go : src/tools/jobs.rs porte code_jobs.go. Refus avant lancement
(commande vide ou dangereuse, optimisation en cours), journal
.loki/jobs/<id>.log dans le dossier de la discussion, processus qui survit
au tour, shell sans le jeton interne ; relecture bornée (40 lignes par
défaut, 200 au plus), état et durée, arrêt relu aussitôt comme le Go.
paths::go_mkdir_all reproduit os.MkdirAll, erreur comprise.

Les jobs d'une discussion supprimée s'arrêtent avec elle. L'optimiseur du
Go compte ceux de la façade (POST /internal/facade/v1/bgjobs) avant de
mesurer ; façade injoignable : les siens seulement.

Parité : journal de 24 étapes tiré du Go (parity_jobs_test.go →
tests/parity_jobs/jobs.json), rejoué par tests/jobs.rs ; un tour de la
façade qui lance un job (tests/lot6.rs) ; TestFacadeJobsArrierePlan.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
Claude committed 2026-10-16 05:42:32 +00:00
1 parent f66d1b7621
commit 7288db632e
16 files changed
+1132 -4

No files matched your search

+18 -3
View File
@@ -177,10 +177,25 @@ func toolBashTail(args map[string]any) string {
return out + "\n" + tailRunes(tail, toolMaxOutput)
}
// bgJobsRunning : jobs d'arrière-plan encore en vie. L'optimiseur refuse de
// mesurer à côté d'eux : un build ou un serveur de dev prend le CPU et le
// disque que mesurent ses essais.
// bgJobsRunning : jobs d'arrière-plan encore en vie, ceux de la façade
// compris quand elle tient la conversation (lot 43 : ses tours lancent les
// leurs). L'optimiseur refuse de mesurer à côté d'eux : un build ou un
// serveur de dev prend le CPU et le disque que mesurent ses essais.
func bgJobsRunning() int {
n := localBgJobsRunning()
if facadeChat() {
var out struct {
Running int `json:"running"`
}
if err := facadePerfJSON("/internal/facade/v1/bgjobs", map[string]any{}, &out); err == nil {
n += out.Running
}
}
return n
}
// localBgJobsRunning : les jobs lancés par ce processus.
func localBgJobsRunning() int {
jobsMu.Lock()
defer jobsMu.Unlock()
n := 0