Skip to content

🐛 [BUG] server-nestjs: zone.upsert/zone.delete listeners have no emitter (AppEventsService missing emitZoneEvent) — cutover blocker #2575

Closed

Description

@shikanime

Description

La migration apps/server → apps/server-nestjs mappe les syncs de plugins via des Ă©vĂ©nements :

  • apps/server (legacy) : fire hook.zone.upsert / hook.zone.delete directement dans business.ts sur les routes zone.
  • apps/server-nestjs : Ă©met via AppEventsService.emit*(...) → EventEmitter2 → consommateurs @OnEvent.

VaultService écoute sur @OnEvent('zone.upsert') et @OnEvent('zone.delete') (vault.service.ts:87, 101), mais :

  1. AppEventsService n'expose AUCUNE mĂ©thode d'Ă©mission pour zone.* — ni emitZoneEvent, ni de type ZoneEventName. La seule API publique est emitProjectEvent / emitProjectMemberEvent / emitRepositoryEvent (app-events.service.ts:72-109).
  2. Aucun service nestjs n'Ă©met zone.upsert / zone.delete — le grep emitProjectEvent|emitProjectMemberEvent|emitRepositoryEvent|eventEmitter.emit ne trouve aucune rĂ©fĂ©rence zone (hors logs).
  3. Le module zone n'existe pas encore dans server-nestjs — la route zone est toujours propriĂ©taire de apps/server (legacy).

Ce n'est pas un bug LIVE aujourd'hui (la route zone reste sur legacy, qui fire les hooks directement). C'est un rĂ©gression silencieuse au cutover : dĂšs que la route zone migrera vers server-nestjs sans brancher un emitZoneEvent, les listeners @OnEvent('zone.*') de Vault deviendront morts — le mount/policy/approle Vault des zones ne seront plus provisionnĂ©s/suprimĂ©s.

Cf. migration-parity-checklist : « if the migrated service emits eventEmitter.emitAsync('<entity>.<verb>', ...) but NO @OnEvent('<entity>.<verb>') handler exists anywhere » — ici c'est l'inverse (listener sans Ă©metteur), mĂȘme classe de rĂ©gression silencieuse.

  • Baseline unitaire : 578 passĂ© / 59 skipped (2026-08-25, Node 24).

  • Seed unitaire validĂ© : app-events.service.spec.ts ajoute une assertion de paritĂ© zone.* (listener sans Ă©metteur) — 12/12 vert.

  • vault.service.spec.ts : 4 specs nouveaux scellent la surface externe upsertZone/deleteZone (mount + policy + approle + tech-readonly) — 8/8 vert.

  • E2E vault.e2e-spec.ts : case zone ajoutĂ©e (gated E2E=1), Ă©met zone.upsert/zone.delete directement via EventEmitter2 pour couvrir le contrat externe Vault (runnable sur host connectĂ© / CI).

  • (cutover-blocker) Ajouter un module zone dans server-nestjs avec un Ă©metteur zone.upsert/zone.delete via AppEventsService — OU garder la route sur legacy jusqu'Ă  ce que l'Ă©metteur existe.

  • Le seed unitaire + e2e ci-dessus restentverts (ils valident le contrat).

Activity

  1. self-assigned this
    on Aug 26, 2026
  2. modified the milestones: 9.24.5, 9.25.0 on Aug 26, 2026
  3. modified the milestones: 9.25.0, 9.26.0 on Sep 1, 2026
  4. modified the milestones: 9.26.0, 9.27.0 on Sep 14, 2026
  5. added theissue type on Sep 29, 2026
  6. modified the milestones: 9.27.0, 9.28.0 on Oct 2, 2026
  7. modified the milestones: 9.28.0, 9.27.0 on Oct 16, 2026
  8. StephaneTrebel commented on Oct 16, 2026

    @StephaneTrebel
    Collaborator

    CorrigĂ© dans v9.27.0 : le module zone et ses Ă©missions zone.upsert/zone.delete ont Ă©tĂ© migrĂ©s dans server-nestjs par la PR #2487, incluse dans la release #2849. VĂ©rification : specs AppEventsService et ZoneService, 21/21 rĂ©ussies; le scĂ©nario E2E Vault zone.upsert/zone.delete est prĂ©sent dans test/zone.e2e-spec.ts, mais n’a pas Ă©tĂ© exĂ©cutĂ© localement (nĂ©cessite E2E=1 et un Vault accessible).

  9. moved this from Refinement to Done in Cloud Pi Nativeon Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions