Skip to content

Epic closure note — CVN-N014-ED · Inter-task data transport

Note de clôture de l'Epic CVN-N014-ED. Produite par le rituel epic-close (CVN-N014-EC-S18) — résume et lie la rétrospective (input obligatoire), ne la remplace pas. Premier dogfood réel de epic-close.

Outcome

L'Epic est complet. Le bug fondateur — transport inter-tâches bricolé par-tâche (incident s43 : np.savez vers un /tmp pod-local → cohorte vide cross-pod → INCONCLUSIVE_TOOLING) — est corrigé (S01–S03) et structurellement dissuadé / review-gated (S04). Critère d'acceptance qualitatif atteint : le bug ne peut plus revenir silencieusement — un standard écrit + un gate de review couvrant la surface runtime réelle l'attrapent à la PR.

Scope delivered

Standard de transport object-storage XCom (S01) → validé in-vivo sur s43 cross-pod (S02) → inventaire des workarounds soldé, vide (S03) → guideline + gate de review anti-régression (S04).

Story-by-story closure table

Story wp / issue Livré Statut
S01 — flip global backend object-storage XCom (fondation) wp#242 / #1105 Route A recon-fondée ; Route Y numpy ; RCA section dottée (common.io→env underscore) + fix-forward (#1118/#1119) Closed
S02 — s43 cross-pod transport (1er bénéficiaire) wp#243 / #1106 pass-by-référence S3 (s43_io) ; smoke 5/5 pods, verdict science ≠ signature bug Closed
S03 — cleanup opportuniste borné wp#244 / #1107 inventaire vide publié ; lifecycle xcom/ 7 j appliqué ; enforcement transféré à S04 Closed
S04 — standard & review gate (fence) wp#245 / #1108 guideline DAG-author + gate CodeRabbit (dags/**+src/commun/finetune/**+scripts/**) + checklist comité ; plan_review a corrigé le périmètre du gate Closed

Acceptance evidence

  • Criterion : le bug « transport bricolé par-tâche cross-pod » est corrigé et structurellement empêché de revenir silencieusement (critère qualitatif de l'Epic).
  • Evidence : S02 smoke 5/5 pods distincts (cross-pod prouvé) ; S03 inventaire vide ; S04 guideline live (HTTP 200) + gate live sur main sur les 3 globs runtime.
  • Source : PRs #1118/#1119 (S01), #1125/#1128 (S02), #1127/#1128 (S03), #1131 (S04) ; Meetings #249/#260/#262.
  • Operator confirmation : clôture validée par l'opérateur via epic-close (dogfood réel).

Retrospective summary

La rétrospective recense 5 hypothèses (3 infirmées de façon productive : numpy non-natif, inventaire vide, gate dags/**-only insuffisant), les garde-fous déclenchés (cut-over S01, plan_review S04), ce qui a marché (recon avant build, preuve in-vivo, fermer sur l'évidence, le plan_review comme filet de conception) et les enseignements durables (vérifier la résolution config ; un gate couvre la surface runtime). Voir la rétro pour le détail.

Decisions and trade-offs

  • Route A (recon-fondée) plutôt que blue/green Tier-1 (S01) — parc near-inert prouvé.
  • Route Y numpy (XCom = références, pas arrays bruts) après le finding « pas de sérialisation numpy native ».
  • Gate à la review, pas runtime (S04) — seul endroit distinguant store bricolé cross-pod vs capture single-pod légitime.
  • Périmètre du gate étendu à src/ (correction plan_review) — le code de transport vit hors du fichier DAG.

Residual risks / follow-ups

  • Fixture de régression du gate (S04 §4.5, P1).
  • Step-script KPO via image custom hors globs : non couvert → check CI statique = extension future possible.
  • Lifecycle S3 (xcom-objectstorage-7d + s43-predictions-7d) actifs sur cvntrade-artifacts.

OpenProject / GitHub references

  • OP Epic wp#205-family (CVN-N014-ED) · Stories wp#242–245 · Meetings #249/#260/#262.
  • GitHub issues #1105–1108 (Closed) · PRs #1118/#1119/#1125/#1127/#1128/#1131.

Divergence waivers : aucun (toutes sources concordantes). Version-close : geste UI opérateur, vérifié post-hoc.