/** Metadados INFRA CODE — API, VM, código-fonte e pasta Spec por serviço (Spec 033). */
window.STACK_SERVICE_META = {
  'vm112-onboard-api': {
    specFolder: 'specs/001-onboarding-webhooks/',
    apiPath: 'GET /api/onboarding/health',
    codePaths: ['deploy/vm112-wizard/', 'VM112 onboard API :8090'],
    probeCode: 'api/app/stack_health.py → vm112-onboard-api',
    validation: 'HTTP 200 no health do portal onboard',
  },
  'vm112-onboard-ui': {
    specFolder: 'specs/025-wizard-ui/',
    apiPath: 'GET https://onboard.ligbox.com.br/',
    codePaths: ['deploy/vm112-wizard/frontend/', 'CT114 Traefik router onboard'],
    probeCode: 'api/app/stack_health.py → vm112-onboard-ui',
    validation: 'Wizard público responde 200/301/302/403',
  },
  'vm112-carbonio': {
    specFolder: 'specs/022-carbonio-mail/',
    apiPath: 'GET https://10.10.10.112/',
    codePaths: ['VM112 Carbonio CE', 'deploy/carbonio/'],
    probeCode: 'api/app/stack_health.py → vm112-carbonio',
    validation: 'HTTPS Carbonio (TLS interno, verify=false)',
  },
  'vm112-domain-api': {
    specFolder: 'specs/017-vm112-domain-orchestration/',
    apiPath: 'GET /api/onboarding/health (proxy admin)',
    codePaths: ['deploy/vm112-wizard/', 'api/admin/domains'],
    probeCode: 'api/app/stack_health.py → vm112-domain-api',
    validation: 'API VM112 acessível — domínios via Spec 017',
  },
  'vm114-traefik': {
    specFolder: 'specs/026-traefik-edge/',
    apiPath: 'GET :8080/api/overview',
    codePaths: ['CT114 docker/traefik/', 'dynamic routers YAML'],
    probeCode: 'api/app/stack_health.py → vm114-traefik',
    validation: 'Traefik API responde (200/401/403)',
  },
  'vm114-desk-route': {
    specFolder: 'specs/026-traefik-edge/',
    apiPath: 'GET https://desk.ligbox.com.br/',
    codePaths: ['CT114 router desk.ligbox.com.br', 'VM122 frontend :8091'],
    probeCode: 'api/app/stack_health.py → vm114-desk-route',
    validation: 'Rota WAN Desk via Traefik',
  },
  'vm114-api-route': {
    specFolder: 'specs/027-desk-api-public/',
    apiPath: 'GET https://api.ops.ligbox.com.br/health',
    codePaths: ['CT114 router api.ops', 'VM122 api :8080'],
    probeCode: 'api/app/stack_health.py → vm114-api-route',
    validation: 'API pública Ops responde /health',
  },
  'vm122-desk-api': {
    specFolder: 'specs/003-desk-auth-rbac/',
    apiPath: 'GET /health · /api/v1/*',
    codePaths: ['projects/ops-desk/api/app/', 'docker ligbox-ops-platform_api'],
    probeCode: 'api/app/stack_health.py → vm122-desk-api',
    validation: 'FastAPI local :8080/health',
  },
  'vm122-desk-ui': {
    specFolder: 'specs/040-desk-design-system-v013/',
    apiPath: 'GET http://10.10.10.122:8091/',
    codePaths: ['projects/ops-desk/frontend/', 'assets/ligbox-ds.css', 'assets/user-wizard.js', 'assets/access-control-hub.js'],
    probeCode: 'api/app/stack_health.py → vm122-desk-ui',
    validation: 'Nginx frontend · footer v0.13.0 · Spec 040',
  },
  'vm122-governance-api': {
    specFolder: 'specs/040-desk-design-system-v013/',
    apiPath: 'POST /api/v1/governance/users/wizard · GET /governance/audit',
    codePaths: ['api/app/governance_routes.py', 'api/app/desk_governance_store.py'],
    probeCode: 'DS-API-002 governance_routes',
    validation: 'Wizard create user + audit log · Spec 040',
  },
  'vm122-ops-inbox-api': {
    specFolder: 'specs/041-desk-operational-feed/',
    apiPath: 'GET /api/v1/ops-inbox/stats · GET /events · POST /events/{id}/messages',
    codePaths: ['api/app/ops_inbox_routes.py', 'api/app/ops_inbox_store.py', 'assets/operational-feed.js'],
    probeCode: 'OF-API-002 ops_inbox_routes',
    validation: 'Central Operacional mock · Spec 041',
  },
  'vm122-redis': {
    specFolder: '—',
    apiPath: 'redis://redis:6379/0 PING',
    codePaths: ['docker-compose redis', 'api/app assist_store / cache'],
    probeCode: 'api/app/stack_health.py → _probe_redis',
    validation: 'PING OK no Redis do stack',
  },
  'vm122-webhook-soc': {
    specFolder: 'specs/001-onboarding-webhooks/',
    apiPath: 'GET /api/v1/integrations/health',
    codePaths: ['api/app/integration_health.py', 'api/app/assist_routes.py'],
    probeCode: 'infra_stack_routes.py enrich + integration_health',
    validation: 'Gap webhook VM112 + status integração',
  },
  'vm122-purge-auth': {
    specFolder: 'specs/032-purge-domain-extra-auth/',
    apiPath: 'GET/POST /api/v1/infra/purge-auth-*',
    codePaths: ['api/app/infra_stack_routes.py', 'api/app/purge_auth*'],
    probeCode: 'Módulo local Desk — sem probe HTTP externo',
    validation: 'Códigos purge Spec 032 · super_admin',
  },
  'vm122-email-relay': {
    specFolder: 'docs/postfix-vm122.md',
    apiPath: 'GET /api/v1/infra/email-relay/status · POST /test',
    codePaths: [
      '/etc/postfix/main.cf (VM122 host)',
      '/etc/postfix/transport',
      'api/app/email_relay.py',
      'api/app/mail_notify.py',
      'VM112 mail.ligbox.com.br (Carbonio relay)',
    ],
    probeCode: 'api/app/stack_health.py → vm122-email-relay',
    validation: 'Postfix VM122 · relayhost VM112 · ligbox-ops@ ligbox.com.br · convites Desk',
  },
  'vm123-foss': {
    specFolder: 'specs/024-fossbilling-odoo/',
    apiPath: 'GET http://10.10.10.123:8092/',
    codePaths: ['VM123 FOSSBilling container'],
    probeCode: 'api/app/stack_health.py → vm123-foss',
    validation: 'FOSSBilling UI responde',
  },
  'vm123-odoo': {
    specFolder: 'specs/024-fossbilling-odoo/',
    apiPath: 'GET :8069/web/login',
    codePaths: ['VM123 Odoo 16'],
    probeCode: 'api/app/stack_health.py → vm123-odoo',
    validation: 'Odoo login page responde',
  },
  'vm123-openpanel-ui': {
    specFolder: 'specs/028-openpanel-reengineering/',
    apiPath: 'GET https://openpanel.ligbox.com.br/',
    codePaths: ['VM123 OpenPanel CE', 'CT114 router'],
    probeCode: 'api/app/stack_health.py → vm123-openpanel-ui',
    validation: 'OpenPanel WAN via Traefik',
  },
  'vm123-openadmin': {
    specFolder: 'specs/024-fossbilling-odoo/',
    apiPath: 'GET https://admin.openpanel.ligbox.com.br/',
    codePaths: ['VM123 OpenAdmin'],
    probeCode: 'api/app/stack_health.py → vm123-openadmin',
    validation: 'OpenAdmin UI responde',
  },
  'vm123-openpanel-bridge': {
    specFolder: 'specs/028-openpanel-reengineering/',
    apiPath: 'GET :18087/api (Bearer bridge token)',
    codePaths: ['VM123 bridge service', 'api/app/vm123_routes.py'],
    probeCode: 'api/app/stack_health.py → _probe_openpanel_bridge',
    validation: 'Bridge API com OPENPANEL_BRIDGE_TOKEN',
  },
  'vm123-ops-console': {
    specFolder: 'specs/019-ops-console/',
    apiPath: 'GET :8100/health',
    codePaths: ['VM123 ops console service'],
    probeCode: 'api/app/stack_health.py → vm123-ops-console',
    validation: 'Health endpoint Ops Console',
  },
  'vm123-phpmyadmin': {
    specFolder: '—',
    apiPath: 'GET :8888/',
    codePaths: ['VM123 phpMyAdmin stack'],
    probeCode: 'api/app/stack_health.py → vm123-phpmyadmin',
    validation: 'phpMyAdmin HTTP responde',
  },
  'vm123-ollama': {
    specFolder: 'specs/029-agentic-ops/',
    apiPath: 'GET :11434/api/tags',
    codePaths: ['VM123 Ollama', 'api/app/agents*'],
    probeCode: 'api/app/stack_health.py → vm123-ollama',
    validation: 'Ollama API lista modelos',
  },
  'vm130-forgejo': {
    specFolder: 'specs/031-spec-hub-forgejo/',
    apiPath: 'GET :3000/',
    codePaths: ['CT130 Forgejo', '/opt/ligbox-spec-hub repos'],
    probeCode: 'api/app/stack_health.py → vm130-forgejo',
    validation: 'Forgejo Git UI responde',
  },
  'vm130-spec-portal': {
    specFolder: 'specs/031-spec-hub-forgejo/',
    apiPath: 'GET :8080/',
    codePaths: ['CT130 spec portal', 'obsidian-vault/'],
    probeCode: 'api/app/stack_health.py → vm130-spec-portal',
    validation: 'Spec portal LAN responde',
  },
  'vm130-spec-public': {
    specFolder: 'specs/031-spec-hub-forgejo/',
    apiPath: 'GET https://spec.ligbox.com.br/',
    codePaths: ['CT130 + Traefik WAN', 'spec.ligbox.com.br'],
    probeCode: 'api/app/stack_health.py → vm130-spec-public',
    validation: 'Spec Hub público via WAN',
  },
  'integrations-json': {
    specFolder: 'specs/001-onboarding-webhooks/',
    apiPath: 'GET /api/v1/integrations',
    codePaths: ['api/app/integration_health.py', 'webhook registry DB'],
    probeCode: 'renderInfra · integrations snapshot',
    validation: 'Registry onboard + Wazuh activo',
  },
};
