{"record":{"id":"9dfc584b40231937","repo":"ruvnet/ruflo","slug":"federation-authorization-is-in-adr-325-legacy-comp","errorCode":null,"errorMessage":"Federation authorization is in ADR-325 legacy compatibility mode; use observe before enabling enforce","messagePattern":"Federation authorization is in ADR-325 legacy compatibility mode; use observe before enabling enforce","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"v3/@claude-flow/plugin-agent-federation/src/plugin.ts","lineNumber":276,"sourceCode":"\n    const authorizationMode =\n      (config['authorizationMode'] as FederationAuthorizationMode | undefined) ?? 'legacy';\n    const grantedClaims = Array.isArray(config['federationClaims'])\n      ? config['federationClaims'].filter((claim): claim is string => typeof claim === 'string')\n      : [];\n    const claimChecker = createFederationClaimChecker({\n      mode: authorizationMode,\n      grantedClaims,\n      onObservation: (claim, granted) => {\n        context.eventBus.emit('federation:policy-observation', {\n          claim,\n          granted,\n          mode: authorizationMode,\n        });\n      },\n    });\n    if (claimChecker.mode === 'legacy') {\n      context.logger.warn(\n        'Federation authorization is in ADR-325 legacy compatibility mode; ' +\n          'use observe before enabling enforce',\n      );\n    }\n    const policyEngine = new PolicyEngine({ checkClaim: claimChecker.checkClaim });\n\n    const sessions: Map<string, import('./domain/entities/federation-session.js').FederationSession> = new Map();\n\n    // ADR-104 + ADR-120: load wire transport. WebSocket fallback by\n    // default; native QUIC when AGENTIC_FLOW_QUIC_NATIVE=1 (ADR-108) or\n    // MIDSTREAMER_QUIC_NATIVE=1 (ADR-120 Step 1, when midstream@0.3.0\n    // ships its real QUIC build). The midstream-aware loader picks the\n    // best available transport transparently. Failures downgrade to\n    // in-process noop (logged), preserving backward compat for\n    // tests/environments without ws available.\n    let transport: LoadedTransport | null = null;\n    try {\n      const loaded = await loadFederationTransport({","sourceCodeStart":258,"sourceCodeEnd":294,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/v3/@claude-flow/plugin-agent-federation/src/plugin.ts#L258-L294","documentation":"Startup notice from plugin initialize: the federation authorizationMode config resolved to the ADR-325 'legacy' default (or was explicitly set to legacy), meaning policy checks observe but do not block. Operators should run 'observe' to collect claim/policy evidence before switching to enforce.","triggerScenarios":"Thrown at v3/@claude-flow/plugin-agent-federation/src/plugin.ts:276 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Run in observe mode first and validate the authorization decisions, then switch from legacy to enforce per ADR-325."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}