From 3cb51e7ba75fa5b45b72fb70696ebefe3bc33d88 Mon Sep 17 00:00:00 2001 From: Ligbox Spec Hub Date: Wed, 1 Jul 2026 19:35:33 +0000 Subject: [PATCH] spec 043/044: webmail gate contrato, chat bruto e sync Obsidian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Documenta liberação formal webmail (company_gate), decisões UX Painel Admin, links Spec 044 tickets FOSS↔Desk, VM112 e chat bruto da sessão Roger. Co-authored-by: Cursor --- _sidebar.md | 94 ++++++++++- ...MAIL_GATE_TICKETS_SPEC043_044_20260701.txt | 34 ++++ ...TE_TICKETS_SPEC043_044_20260701_INDICE.txt | 7 + docs/vms/VM112.md | 2 + .../domain-manager-console-ui.md | 16 +- .../SESSION-CHECKPOINT.md | 87 +++++----- .../contracts/webmail-release-gate.md | 148 ++++++++++++++++++ specs/043-desk-client-activation-sync/spec.md | 15 +- .../043-desk-client-activation-sync/tasks.md | 12 +- specs/044-foss-desk-ticket-sync/spec.md | 2 + specs/SPEC-REGISTRY.md | 2 +- 11 files changed, 362 insertions(+), 57 deletions(-) create mode 100644 chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt create mode 100644 chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701_INDICE.txt create mode 100644 specs/043-desk-client-activation-sync/contracts/webmail-release-gate.md diff --git a/_sidebar.md b/_sidebar.md index f0206f8..7afbcd9 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -12,24 +12,30 @@ - [quickstart.md](specs/001-webhook-vm112-integration/quickstart.md) - [research.md](specs/001-webhook-vm112-integration/research.md) - [data-model.md](specs/001-webhook-vm112-integration/data-model.md) + - [SESSION-CHECKPOINT.md](specs/001-webhook-vm112-integration/SESSION-CHECKPOINT.md) - **contracts/** - [webhook-onboard](specs/001-webhook-vm112-integration/contracts/webhook-onboard.md) - **checklists/** - [requirements](specs/001-webhook-vm112-integration/checklists/requirements.md) - **017-vm112-domain-orchestration** - [📄 spec.md](specs/017-vm112-domain-orchestration/spec.md) + - [SESSION-CHECKPOINT.md](specs/017-vm112-domain-orchestration/SESSION-CHECKPOINT.md) - **022-carbonio-account-exists-release** - [📄 spec.md](specs/022-carbonio-account-exists-release/spec.md) - [tasks.md](specs/022-carbonio-account-exists-release/tasks.md) + - [SESSION-CHECKPOINT.md](specs/022-carbonio-account-exists-release/SESSION-CHECKPOINT.md) - **025-wizard-onboarding-continuity** - [📄 spec.md](specs/025-wizard-onboarding-continuity/spec.md) - [tasks.md](specs/025-wizard-onboarding-continuity/tasks.md) + - [SESSION-CHECKPOINT.md](specs/025-wizard-onboarding-continuity/SESSION-CHECKPOINT.md) - **026-purge-traefik-validation** - [📄 spec.md](specs/026-purge-traefik-validation/spec.md) + - [SESSION-CHECKPOINT.md](specs/026-purge-traefik-validation/SESSION-CHECKPOINT.md) - **010-desk-assist-takeover** - [📄 spec.md](specs/010-desk-assist-takeover/spec.md) - [tasks.md](specs/010-desk-assist-takeover/tasks.md) - [quickstart.md](specs/010-desk-assist-takeover/quickstart.md) + - [SESSION-CHECKPOINT.md](specs/010-desk-assist-takeover/SESSION-CHECKPOINT.md) ## VM122 — Ops Desk - **003-desk-auth-rbac** - [📄 spec.md](specs/003-desk-auth-rbac/spec.md) @@ -38,6 +44,7 @@ - [quickstart.md](specs/003-desk-auth-rbac/quickstart.md) - [research.md](specs/003-desk-auth-rbac/research.md) - [data-model.md](specs/003-desk-auth-rbac/data-model.md) + - [SESSION-CHECKPOINT.md](specs/003-desk-auth-rbac/SESSION-CHECKPOINT.md) - **contracts/** - [auth-api](specs/003-desk-auth-rbac/contracts/auth-api.md) - **checklists/** @@ -46,11 +53,13 @@ - [📄 spec.md](specs/004-desk-account-management/spec.md) - [tasks.md](specs/004-desk-account-management/tasks.md) - [quickstart.md](specs/004-desk-account-management/quickstart.md) + - [SESSION-CHECKPOINT.md](specs/004-desk-account-management/SESSION-CHECKPOINT.md) - **004-onboard-funnel-events** - [📄 spec.md](specs/004-onboard-funnel-events/spec.md) - [plan.md](specs/004-onboard-funnel-events/plan.md) - [tasks.md](specs/004-onboard-funnel-events/tasks.md) - [research.md](specs/004-onboard-funnel-events/research.md) + - [SESSION-CHECKPOINT.md](specs/004-onboard-funnel-events/SESSION-CHECKPOINT.md) - [cloudflare-zone-provision.md](specs/004-onboard-funnel-events/cloudflare-zone-provision.md) - **contracts/** - [webhook-funnel-events](specs/004-onboard-funnel-events/contracts/webhook-funnel-events.md) @@ -61,6 +70,7 @@ - [plan.md](specs/009-ops-audit-overview/plan.md) - [tasks.md](specs/009-ops-audit-overview/tasks.md) - [research.md](specs/009-ops-audit-overview/research.md) + - [SESSION-CHECKPOINT.md](specs/009-ops-audit-overview/SESSION-CHECKPOINT.md) - **contracts/** - [audit-api](specs/009-ops-audit-overview/contracts/audit-api.md) - **checklists/** @@ -68,16 +78,20 @@ - **010-admin-domain-validation** - [📄 spec.md](specs/010-admin-domain-validation/spec.md) - [correcao-vm112.md](specs/010-admin-domain-validation/correcao-vm112.md) + - [SESSION-CHECKPOINT.md](specs/010-admin-domain-validation/SESSION-CHECKPOINT.md) - **012-abandoned-onboarding-lead** - [📄 spec.md](specs/012-abandoned-onboarding-lead/spec.md) - [tasks.md](specs/012-abandoned-onboarding-lead/tasks.md) - [quickstart.md](specs/012-abandoned-onboarding-lead/quickstart.md) + - [SESSION-CHECKPOINT.md](specs/012-abandoned-onboarding-lead/SESSION-CHECKPOINT.md) - **015-desk-module-registry** - [📄 spec.md](specs/015-desk-module-registry/spec.md) + - [SESSION-CHECKPOINT.md](specs/015-desk-module-registry/SESSION-CHECKPOINT.md) - **027-desk-rbac-function-matrix** - [📄 spec.md](specs/027-desk-rbac-function-matrix/spec.md) - [quickstart.md](specs/027-desk-rbac-function-matrix/quickstart.md) - [data-model.md](specs/027-desk-rbac-function-matrix/data-model.md) + - [SESSION-CHECKPOINT.md](specs/027-desk-rbac-function-matrix/SESSION-CHECKPOINT.md) - [ui-access-matrix.md](specs/027-desk-rbac-function-matrix/ui-access-matrix.md) - **contracts/** - [vm123-product-roles](specs/027-desk-rbac-function-matrix/contracts/vm123-product-roles.md) @@ -87,6 +101,7 @@ - [plan.md](specs/019-ops-console-active-operations/plan.md) - [tasks.md](specs/019-ops-console-active-operations/tasks.md) - [README.md](specs/019-ops-console-active-operations/README.md) + - [SESSION-CHECKPOINT.md](specs/019-ops-console-active-operations/SESSION-CHECKPOINT.md) - **contracts/** - [chamados-api](specs/019-ops-console-active-operations/contracts/chamados-api.md) - **design/** @@ -94,31 +109,39 @@ - **023-billing-recurrence-desk-visibility** - [📄 spec.md](specs/023-billing-recurrence-desk-visibility/spec.md) - [tasks.md](specs/023-billing-recurrence-desk-visibility/tasks.md) + - [SESSION-CHECKPOINT.md](specs/023-billing-recurrence-desk-visibility/SESSION-CHECKPOINT.md) - **024-openpanel-fossbilling** - [📄 spec.md](specs/024-openpanel-fossbilling/spec.md) - [tasks.md](specs/024-openpanel-fossbilling/tasks.md) - [PROVISIONING_CLIENT_CARD.md](specs/024-openpanel-fossbilling/PROVISIONING_CLIENT_CARD.md) + - [SESSION-CHECKPOINT.md](specs/024-openpanel-fossbilling/SESSION-CHECKPOINT.md) - **019-email-migration-vm122-execution** - [📄 spec.md](specs/019-email-migration-vm122-execution/spec.md) - [tasks.md](specs/019-email-migration-vm122-execution/tasks.md) + - [SESSION-CHECKPOINT.md](specs/019-email-migration-vm122-execution/SESSION-CHECKPOINT.md) ## VM104 — Wazuh - **002-wazuh-integration** - [📄 spec.md](specs/002-wazuh-integration/spec.md) - [plan.md](specs/002-wazuh-integration/plan.md) - [tasks.md](specs/002-wazuh-integration/tasks.md) + - [SESSION-CHECKPOINT.md](specs/002-wazuh-integration/SESSION-CHECKPOINT.md) ## CT130 — Spec Hub - **031-spec-hub-portal** - [📄 spec.md](specs/031-spec-hub-portal/spec.md) + - [SESSION-CHECKPOINT.md](specs/031-spec-hub-portal/SESSION-CHECKPOINT.md) ## Outras specs - **007-mobile-push-notifications** - [📄 spec.md](specs/007-mobile-push-notifications/spec.md) - [tasks.md](specs/007-mobile-push-notifications/tasks.md) - [quickstart.md](specs/007-mobile-push-notifications/quickstart.md) + - [SESSION-CHECKPOINT.md](specs/007-mobile-push-notifications/SESSION-CHECKPOINT.md) - **011-integration-otrs** - [📄 spec.md](specs/011-integration-otrs/spec.md) + - [SESSION-CHECKPOINT.md](specs/011-integration-otrs/SESSION-CHECKPOINT.md) - **011-mail-tls-wizard-validation** - [📄 spec.md](specs/011-mail-tls-wizard-validation/spec.md) - [README.md](specs/011-mail-tls-wizard-validation/README.md) + - [SESSION-CHECKPOINT.md](specs/011-mail-tls-wizard-validation/SESSION-CHECKPOINT.md) - **013-email-server-migration** - [📄 spec.md](specs/013-email-server-migration/spec.md) - [plan.md](specs/013-email-server-migration/plan.md) @@ -127,31 +150,39 @@ - [research.md](specs/013-email-server-migration/research.md) - [data-model.md](specs/013-email-server-migration/data-model.md) - [infrastructure.md](specs/013-email-server-migration/infrastructure.md) + - [SESSION-CHECKPOINT.md](specs/013-email-server-migration/SESSION-CHECKPOINT.md) - **014-funnel-phase-timing** - [📄 spec.md](specs/014-funnel-phase-timing/spec.md) + - [SESSION-CHECKPOINT.md](specs/014-funnel-phase-timing/SESSION-CHECKPOINT.md) - **016-onboard-self-service-prefill** - [📄 spec.md](specs/016-onboard-self-service-prefill/spec.md) - [tasks.md](specs/016-onboard-self-service-prefill/tasks.md) - [BACKLOG-2FA-BACKUP-EXPORT.md](specs/016-onboard-self-service-prefill/BACKLOG-2FA-BACKUP-EXPORT.md) + - [SESSION-CHECKPOINT.md](specs/016-onboard-self-service-prefill/SESSION-CHECKPOINT.md) - **018-service-orchestration** - [📄 spec.md](specs/018-service-orchestration/spec.md) + - [SESSION-CHECKPOINT.md](specs/018-service-orchestration/SESSION-CHECKPOINT.md) - **020-purge-history-desk** - [📄 spec.md](specs/020-purge-history-desk/spec.md) + - [SESSION-CHECKPOINT.md](specs/020-purge-history-desk/SESSION-CHECKPOINT.md) - **021-wizard-cybersecurity-telemetry** - [📄 spec.md](specs/021-wizard-cybersecurity-telemetry/spec.md) - [tasks.md](specs/021-wizard-cybersecurity-telemetry/tasks.md) + - [SESSION-CHECKPOINT.md](specs/021-wizard-cybersecurity-telemetry/SESSION-CHECKPOINT.md) - **028-openpanel-ce-ligbox-reengineering** - [📄 spec.md](specs/028-openpanel-ce-ligbox-reengineering/spec.md) - [tasks.md](specs/028-openpanel-ce-ligbox-reengineering/tasks.md) - [quickstart.md](specs/028-openpanel-ce-ligbox-reengineering/quickstart.md) - [CONFIRMACAO-TESTE-API.md](specs/028-openpanel-ce-ligbox-reengineering/CONFIRMACAO-TESTE-API.md) - [DNS53_OPENPANEL_PORTA53.md](specs/028-openpanel-ce-ligbox-reengineering/DNS53_OPENPANEL_PORTA53.md) + - [SESSION-CHECKPOINT.md](specs/028-openpanel-ce-ligbox-reengineering/SESSION-CHECKPOINT.md) - **contracts/** - [foss-bridge-api](specs/028-openpanel-ce-ligbox-reengineering/contracts/foss-bridge-api.md) - **029-agentic-ops-runbooks** - [📄 spec.md](specs/029-agentic-ops-runbooks/spec.md) - [tasks.md](specs/029-agentic-ops-runbooks/tasks.md) - [quickstart.md](specs/029-agentic-ops-runbooks/quickstart.md) + - [SESSION-CHECKPOINT.md](specs/029-agentic-ops-runbooks/SESSION-CHECKPOINT.md) - [agents-roster.md](specs/029-agentic-ops-runbooks/agents-roster.md) - **contracts/** - [agent-platform-api](specs/029-agentic-ops-runbooks/contracts/agent-platform-api.md) @@ -159,28 +190,36 @@ - [📄 spec.md](specs/029-tickets-workspace/spec.md) - [ARCHITECTURE.md](specs/029-tickets-workspace/ARCHITECTURE.md) - [CORRETIVO-20260619-tickets-rebuild.md](specs/029-tickets-workspace/CORRETIVO-20260619-tickets-rebuild.md) + - [SESSION-CHECKPOINT.md](specs/029-tickets-workspace/SESSION-CHECKPOINT.md) - **030-agentic-ops-ui** - [📄 spec.md](specs/030-agentic-ops-ui/spec.md) - [tasks.md](specs/030-agentic-ops-ui/tasks.md) + - [SESSION-CHECKPOINT.md](specs/030-agentic-ops-ui/SESSION-CHECKPOINT.md) - **contracts/** - [agentic-ui-api](specs/030-agentic-ops-ui/contracts/agentic-ui-api.md) - **design/** - [wireframes](specs/030-agentic-ops-ui/design/wireframes.md) - **032-purge-domain-extra-auth** - [📄 spec.md](specs/032-purge-domain-extra-auth/spec.md) + - [SESSION-CHECKPOINT.md](specs/032-purge-domain-extra-auth/SESSION-CHECKPOINT.md) - **033-desk-infra-console-ui** - [📄 spec.md](specs/033-desk-infra-console-ui/spec.md) + - [SESSION-CHECKPOINT.md](specs/033-desk-infra-console-ui/SESSION-CHECKPOINT.md) - **034-nextcloud-carbonio-vm112-integration** - [📄 spec.md](specs/034-nextcloud-carbonio-vm112-integration/spec.md) - [tasks.md](specs/034-nextcloud-carbonio-vm112-integration/tasks.md) - [quickstart.md](specs/034-nextcloud-carbonio-vm112-integration/quickstart.md) - [infrastructure.md](specs/034-nextcloud-carbonio-vm112-integration/infrastructure.md) - [034-console-process-ui.md](specs/034-nextcloud-carbonio-vm112-integration/034-console-process-ui.md) + - [SESSION-CHECKPOINT.md](specs/034-nextcloud-carbonio-vm112-integration/SESSION-CHECKPOINT.md) - **contracts/** - [nextcloud-provisioning-api](specs/034-nextcloud-carbonio-vm112-integration/contracts/nextcloud-provisioning-api.md) - **035-ligbox-mail-bundles-foss-openpanel** - [📄 spec.md](specs/035-ligbox-mail-bundles-foss-openpanel/spec.md) - [tasks.md](specs/035-ligbox-mail-bundles-foss-openpanel/tasks.md) + - [BUNDLE-DESCRIPTIONS.md](specs/035-ligbox-mail-bundles-foss-openpanel/BUNDLE-DESCRIPTIONS.md) + - [LIGBOX-CATALOG-20.md](specs/035-ligbox-mail-bundles-foss-openpanel/LIGBOX-CATALOG-20.md) + - [SESSION-CHECKPOINT.md](specs/035-ligbox-mail-bundles-foss-openpanel/SESSION-CHECKPOINT.md) - [domain-manager-console-ui.md](specs/035-ligbox-mail-bundles-foss-openpanel/domain-manager-console-ui.md) - [foss-products.md](specs/035-ligbox-mail-bundles-foss-openpanel/foss-products.md) - [ligbox-console-shell.md](specs/035-ligbox-mail-bundles-foss-openpanel/ligbox-console-shell.md) @@ -190,32 +229,73 @@ - [📄 spec.md](specs/035-ligbox-watchman/spec.md) - [tasks.md](specs/035-ligbox-watchman/tasks.md) - [quickstart.md](specs/035-ligbox-watchman/quickstart.md) + - [SESSION-CHECKPOINT.md](specs/035-ligbox-watchman/SESSION-CHECKPOINT.md) - **contracts/** - [status-snapshot](specs/035-ligbox-watchman/contracts/status-snapshot.md) - **036-backstage-techdocs-speckit-companion** - [📄 spec.md](specs/036-backstage-techdocs-speckit-companion/spec.md) - [tasks.md](specs/036-backstage-techdocs-speckit-companion/tasks.md) - [quickstart.md](specs/036-backstage-techdocs-speckit-companion/quickstart.md) + - [SESSION-CHECKPOINT.md](specs/036-backstage-techdocs-speckit-companion/SESSION-CHECKPOINT.md) - **037-dns-multi-cloudflare-orchestration** - [📄 spec.md](specs/037-dns-multi-cloudflare-orchestration/spec.md) - [tasks.md](specs/037-dns-multi-cloudflare-orchestration/tasks.md) + - [SESSION-CHECKPOINT.md](specs/037-dns-multi-cloudflare-orchestration/SESSION-CHECKPOINT.md) - [cf-agents-sdk-architecture.md](specs/037-dns-multi-cloudflare-orchestration/cf-agents-sdk-architecture.md) - [client-cf-account-lifecycle.md](specs/037-dns-multi-cloudflare-orchestration/client-cf-account-lifecycle.md) + - [dns-viewer.md](specs/037-dns-multi-cloudflare-orchestration/dns-viewer.md) - [implementation-phases.md](specs/037-dns-multi-cloudflare-orchestration/implementation-phases.md) - [project-email-identity.md](specs/037-dns-multi-cloudflare-orchestration/project-email-identity.md) - [wizard-validation-checklist.md](specs/037-dns-multi-cloudflare-orchestration/wizard-validation-checklist.md) -- **043-desk-client-activation-sync** ⭐ mapa Wizard→FOSS→OpenPanel→Odoo +- **038-nutranik-mail-proxy-vm108** + - [📄 spec.md](specs/038-nutranik-mail-proxy-vm108/spec.md) + - [tasks.md](specs/038-nutranik-mail-proxy-vm108/tasks.md) + - [quickstart.md](specs/038-nutranik-mail-proxy-vm108/quickstart.md) + - [infrastructure.md](specs/038-nutranik-mail-proxy-vm108/infrastructure.md) + - [SESSION-CHECKPOINT.md](specs/038-nutranik-mail-proxy-vm108/SESSION-CHECKPOINT.md) + - **contracts/** + - [nutranik-wan-health-check](specs/038-nutranik-mail-proxy-vm108/contracts/nutranik-wan-health-check.md) +- **039-ligbox-ops-authorization-catalog** + - [📄 spec.md](specs/039-ligbox-ops-authorization-catalog/spec.md) + - [SESSION-CHECKPOINT.md](specs/039-ligbox-ops-authorization-catalog/SESSION-CHECKPOINT.md) + - **contracts/** +- **040-desk-design-system-v013** + - [📄 spec.md](specs/040-desk-design-system-v013/spec.md) + - [tasks.md](specs/040-desk-design-system-v013/tasks.md) + - [SESSION-CHECKPOINT.md](specs/040-desk-design-system-v013/SESSION-CHECKPOINT.md) + - **contracts/** + - [governance-api](specs/040-desk-design-system-v013/contracts/governance-api.md) +- **041-desk-operational-feed** + - [📄 spec.md](specs/041-desk-operational-feed/spec.md) + - [tasks.md](specs/041-desk-operational-feed/tasks.md) + - [SESSION-CHECKPOINT.md](specs/041-desk-operational-feed/SESSION-CHECKPOINT.md) + - **contracts/** + - [ops-inbox-api](specs/041-desk-operational-feed/contracts/ops-inbox-api.md) +- **042-ligbox-nettools-portal** + - [📄 spec.md](specs/042-ligbox-nettools-portal/spec.md) + - [tasks.md](specs/042-ligbox-nettools-portal/tasks.md) + - [quickstart.md](specs/042-ligbox-nettools-portal/quickstart.md) + - [infrastructure.md](specs/042-ligbox-nettools-portal/infrastructure.md) + - [SESSION-CHECKPOINT.md](specs/042-ligbox-nettools-portal/SESSION-CHECKPOINT.md) + - [architecture.md](specs/042-ligbox-nettools-portal/architecture.md) + - [implementation-phases.md](specs/042-ligbox-nettools-portal/implementation-phases.md) + - [tools-catalog.md](specs/042-ligbox-nettools-portal/tools-catalog.md) + - **contracts/** + - [nettools-api](specs/042-ligbox-nettools-portal/contracts/nettools-api.md) +- **043-desk-client-activation-sync** - [📄 spec.md](specs/043-desk-client-activation-sync/spec.md) - [tasks.md](specs/043-desk-client-activation-sync/tasks.md) - [ROLLBACK.md](specs/043-desk-client-activation-sync/ROLLBACK.md) + - [SESSION-CHECKPOINT.md](specs/043-desk-client-activation-sync/SESSION-CHECKPOINT.md) - **contracts/** - - [activation-field-mapping.md](specs/043-desk-client-activation-sync/contracts/activation-field-mapping.md) — **fonte única** - - [desk-activate-account-api.md](specs/043-desk-client-activation-sync/contracts/desk-activate-account-api.md) - - [mail-bundle-api.md](specs/043-desk-client-activation-sync/contracts/mail-bundle-api.md) -- **044-foss-desk-ticket-sync** ⭐ Portal OB- ↔ Desk ↔ FOSS Support + - [activation-field-mapping](specs/043-desk-client-activation-sync/contracts/activation-field-mapping.md) + - [desk-activate-account-api](specs/043-desk-client-activation-sync/contracts/desk-activate-account-api.md) + - [mail-bundle-api](specs/043-desk-client-activation-sync/contracts/mail-bundle-api.md) + - [webmail-release-gate](specs/043-desk-client-activation-sync/contracts/webmail-release-gate.md) +- **044-foss-desk-ticket-sync** - [📄 spec.md](specs/044-foss-desk-ticket-sync/spec.md) - [tasks.md](specs/044-foss-desk-ticket-sync/tasks.md) - [ROLLBACK.md](specs/044-foss-desk-ticket-sync/ROLLBACK.md) - **contracts/** - - [ticket-field-mapping.md](specs/044-foss-desk-ticket-sync/contracts/ticket-field-mapping.md) — **fonte única IDs** - - [ticket-sync-api.md](specs/044-foss-desk-ticket-sync/contracts/ticket-sync-api.md) + - [ticket-field-mapping](specs/044-foss-desk-ticket-sync/contracts/ticket-field-mapping.md) + - [ticket-sync-api](specs/044-foss-desk-ticket-sync/contracts/ticket-sync-api.md) diff --git a/chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt b/chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt new file mode 100644 index 0000000..3fc86cd --- /dev/null +++ b/chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt @@ -0,0 +1,34 @@ +# Chat bruto — Webmail gate UX + FOSS tickets sync +# Data: 2026-07-01 +# Roger + Cursor +# Specs: 043, 044, 035 (domain-manager UI) + +## Tópicos + +### 1. FOSS tickets ↔ Portal ↔ Desk +- Três filas isoladas: OB- (VM112), Desk #N, FOSS Support (VM123) +- Portal→Desk via webhook onboarding.escalated ✅ +- FOSS sem sync automático ❌ +- Criada Spec 044 com contratos ticket-field-mapping + ticket-sync-api +- Commits: ligbox-ops-platform ef126d1, obsidian-vault 4e65555 + +### 2. Onde mensagem «activar webmail» +- Infra (Traefik/cert) vs company_gate (liberação formal) +- Aviso no rodapé login Carbonio = correto (company_gate.sync_webmail_user_notice) +- Acção liberar = Painel Admin /admin (API existe, UI DomainAdmin falta) +- Banner P0 no Início + badge WEBMAIL no Resumo Contas + +### 3. VM112 paths confirmados +- company_gate.py — PENDING_WEBMAIL_USER_DESCRIPTION +- domain_admin.py — /gate/release-webmail +- WebmailReleaseModal.jsx — wizard onboarding +- dratcoin.com: aviso OK; credenciais inválidas é problema separado + +## Artefatos gerados +- specs/044-foss-desk-ticket-sync/* +- specs/043/contracts/webmail-release-gate.md (este follow-up) +- chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt + +## Próximo +- [ ] UI card Activar webmail em DomainAdmin.jsx +- [ ] Implementar Fase B Spec 044 (foss_client.create_support_ticket) diff --git a/chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701_INDICE.txt b/chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701_INDICE.txt new file mode 100644 index 0000000..7cb4f8a --- /dev/null +++ b/chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701_INDICE.txt @@ -0,0 +1,7 @@ +# Índice chat bruto — Webmail gate + FOSS tickets +# 2026-07-01 + +CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt + → Spec 043 contracts/webmail-release-gate.md + → Spec 044 foss-desk-ticket-sync/ + → Spec 035 domain-manager-console-ui.md (banner webmail) diff --git a/docs/vms/VM112.md b/docs/vms/VM112.md index 7e3fdb7..1d3a63f 100644 --- a/docs/vms/VM112.md +++ b/docs/vms/VM112.md @@ -70,6 +70,8 @@ Auth: header `X-Ops-Internal-Token` (= `OPS_INTERNAL_TOKEN` Desk VM122, em `/opt **Teste validado:** domínio `bundle-novo-spec043.ligbox.com.br` → HTTP 200 `provisioned: true`. +**Webmail gate (`company_gate`):** [043 webmail-release-gate.md](../specs/043-desk-client-activation-sync/contracts/webmail-release-gate.md) — aviso rodapé login Carbonio + liberar em Painel `/admin` (UI card pendente). + ## Integração - **→ VM122:** webhooks `onboarding.*` · Assist/takeover API diff --git a/specs/035-ligbox-mail-bundles-foss-openpanel/domain-manager-console-ui.md b/specs/035-ligbox-mail-bundles-foss-openpanel/domain-manager-console-ui.md index fe538b4..8dd8d84 100644 --- a/specs/035-ligbox-mail-bundles-foss-openpanel/domain-manager-console-ui.md +++ b/specs/035-ligbox-mail-bundles-foss-openpanel/domain-manager-console-ui.md @@ -171,6 +171,20 @@ Quota NC: [ 200 GB ▼ ] **Limite:** se `seats_used >= max_seats` → modal «Upgrade plano» (embed FOSS ou deep-link). +#### Banner «Activar webmail» (Início `/admin` — Spec 043) + +Quando `gate.webmail_released === false`: + +``` +┌─ Activar webmail ─────────────────────────────────────────┐ +│ Webmail aguarda liberação formal pelo Gerente do Domínio. │ +│ [ Confirmar empresa ] [ Activar webmail + 2FA Ligbox ] │ +└───────────────────────────────────────────────────────────┘ +``` + +- Aviso no login Carbonio (rodapé) é **informativo** — não substitui este card. +- Ver contrato: [043 webmail-release-gate.md](../../043-desk-client-activation-sync/contracts/webmail-release-gate.md). + ### 5.3 Nextcloud / Files | Elemento | Comportamento | @@ -180,7 +194,7 @@ Quota NC: [ 200 GB ▼ ] | Lista contas com quota Files | read-only espelho §5.2 | | Coluna «Mail NC» | ✅ / — conforme toggle domínio + conta | | Botão «Abrir Files do domínio» | nova tab `files.{dominio}` (SSO token NC) | -| Botão «Abrir webmail» | nova tab `mail.{dominio}` (sempre disponível) | +| Botão «Abrir webmail» | nova tab `mail.{dominio}` — **desactivado** até `webmail_released_at` ([043 webmail-release-gate](../../043-desk-client-activation-sync/contracts/webmail-release-gate.md)) | | Política default novas contas | dropdown 100–500 GB | **UI toggle (domínio):** diff --git a/specs/043-desk-client-activation-sync/SESSION-CHECKPOINT.md b/specs/043-desk-client-activation-sync/SESSION-CHECKPOINT.md index 120ec92..1a62d60 100644 --- a/specs/043-desk-client-activation-sync/SESSION-CHECKPOINT.md +++ b/specs/043-desk-client-activation-sync/SESSION-CHECKPOINT.md @@ -8,10 +8,10 @@ | Campo | Valor | |-------|-------| -| **Status** | `in_progress` | +| **Status** | `in_progress` (E2E activate OK; webmail gate UI pendente) | | **Última actualização** | 2026-07-01 | -| **Agente / sessão** | Agente B (043/035) + checkpoint protocolo | -| **Prioridade** | P0 | +| **Agente / sessão** | Obsidian sync webmail gate + Spec 044 chat bruto | +| **Prioridade** | P1 (UI Activar webmail DomainAdmin.jsx) | --- @@ -21,56 +21,50 @@ Wizard → Desk Activar conta → FOSS → OpenPanel → Odoo → mail-bundle VM --- -## Feito (agente anterior — commit 884321c) +## Feito -- [x] Produto FOSS `ligbox-mail-business` (product_id=3, hp_id=2) -- [x] Script `deploy/vm123-finance-stack/create-foss-mail-business.sh` -- [x] Código mail-bundle VM112 (`mail_bundle.py`, `internal_provision.py`) no repo -- [x] Deploy código mail-bundle na VM112 (router activo — HTTP 401 sem token) -- [x] Contrato `contracts/mail-bundle-api.md` -- [x] Runbook `deploy/vm112-wizard/MAIL-BUNDLE-DEPLOY.md` -- [x] Desk Spec 043 código no container (264 linhas billing_routes) — deploy temporário +- [x] Produto FOSS `ligbox-mail-business` + catálogo 20 pacotes (ids 1–21, preços 1M) +- [x] Código mail-bundle VM112 (`internal/provision/mail-bundle`) +- [x] `OPS_INTERNAL_TOKEN` sincronizado VM122 → VM112 `.env` + restart wizard +- [x] mail-bundle dratcoin.com provisionado (mail.dratcoin.com, 25 seats) +- [x] Desk Spec 043 redeployed no container VM122 (`docker cp` + restart) +- [x] E2E Roger: `POST /api/v1/billing/accounts/2/activate` → `billing_active` + - OpenPanel: `dratcoix` (reused) + - Odoo partner #9 (reused) + - Wizard mail-bundle: HTTP 200, `already_provisioned: true` +- [x] Script `configure-foss-catalog-pricing.sh` no repo +- [x] `foss-products.md` actualizado com IDs reais +- [x] Contrato `contracts/webmail-release-gate.md` + chat bruto Spec 043/044 +- [x] Spec 044 documentada (tickets FOSS↔Desk) +- [x] Sync Obsidian VM130 + Spec Driver refresh --- -## Feito (sessão anterior Roger) +## Residual / follow-up -- [x] Webhooks VM112 `company.validated` + `webmail.released` -- [x] E2E parcial dratcoin: OpenPanel `dratcoix` + Odoo #9 → `billing_active` -- [x] Token FOSS API admin (VM123) -- [x] Protocolo SESSION-CHECKPOINT todas as specs + Rule Cursor +1. **FOSS `create_client`** — `client_id: null` apesar de `created: true`; investigar API admin client/create +2. **Deploy permanente VM122** — rebuild imagem Docker (código ainda via `docker cp`, não bake na imagem) +3. **Custom fields FOSS** — activar módulo Formbuilder e associar domain/manager_email aos produtos mail +4. **`foss_order_id`** — null no mail-bundle até FOSS order funcionar +5. **UI Painel Admin** — banner + card «Activar webmail» em `DomainAdmin.jsx` (backend gate OK) --- -## Bloqueios / falta fechar - -1. **`OPS_INTERNAL_TOKEN` VM112** — wizard `.env` sem token; mail-bundle retorna 401 -2. **FOSS client/order dratcoin** — `external_customer_id` ainda `null`; bug `create_client` client_id -3. **Deploy permanente VM122** — Spec 043 ainda via `docker cp`, não rebuild imagem -4. **Planos OpenPanel** — só business FOSS; starter/enterprise/custom + planos OP espelho -5. **E2E Fase 6** — `tasks.md` linha Roger ainda `[ ]` - ---- - -## Próximo passo - -1. Sincronizar `OPS_INTERNAL_TOKEN` VM122 → VM112 `.env` + restart wizard -2. Re-activar ou patch dratcoin com FOSS order + mail-bundle -3. Deploy permanente VM122 (`git pull` + rebuild api) -4. E2E Roger completo → marcar Fase 6 `[x]` - ---- - -## Smoke tests +## Smoke tests (validados 2026-07-01) ```bash -curl -s http://10.10.10.122:8080/health -curl -s http://10.10.10.112:8090/api/health 2>/dev/null || curl -s -o /dev/null -w "%{http_code}" http://10.10.10.112:8090/docs -# mail-bundle (requer token): -curl -s -X POST http://10.10.10.112:8090/api/internal/provision/mail-bundle \ - -H "X-Ops-Internal-Token: $OPS_INTERNAL_TOKEN" -H "Content-Type: application/json" \ - -d "{\"domain\":\"dratcoin.com\",\"admin_email\":\"001@dratcoin.com\",\"seats\":25}" -curl -s "https://financeiro.ligbox.com.br/api/admin/product/get_list" -u "admin:$FOSS_TOKEN" -d "{\"per_page\":10}" +# mail-bundle GET (VM112) +curl -s -H "X-Ops-Internal-Token: $OPS_INTERNAL_TOKEN" \ + http://10.10.10.112:8090/api/internal/provision/mail-bundle/dratcoin.com + +# Desk activate +curl -s -X POST http://10.10.10.122:8080/api/v1/billing/accounts/2/activate \ + -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ + -d '{"plan_code":"ligbox-mail-business","manager_email":"001@dratcoin.com"}' + +# FOSS pricing +curl -s -X POST "https://financeiro.ligbox.com.br/api/admin/product/get_list" \ + -u "admin:$FOSS_TOKEN" -d '{"per_page":5,"slug":"ligbox-mail-business"}' ``` --- @@ -80,8 +74,10 @@ curl -s "https://financeiro.ligbox.com.br/api/admin/product/get_list" -u "admin: | Item | Path | |------|------| | tasks.md | `./tasks.md` | +| Catálogo 20 | `../035-ligbox-mail-bundles-foss-openpanel/LIGBOX-CATALOG-20.md` | | mail-bundle API | `./contracts/mail-bundle-api.md` | -| Deploy VM112 | `../../deploy/vm112-wizard/MAIL-BUNDLE-DEPLOY.md` | +| webmail gate | `./contracts/webmail-release-gate.md` | +| chat bruto | `../../chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt` | | Conta teste | dratcoin.com billing #2 | --- @@ -92,4 +88,5 @@ curl -s "https://financeiro.ligbox.com.br/api/admin/product/get_list" -u "admin: |------|--------|--------| | 2026-07-01 | A | E2E parcial; webhooks; protocolo handoff | | 2026-07-01 | B | FOSS product + mail-bundle código/deploy VM112 | -| 2026-07-01 | A | Commit protocolo; audit o que falta | +| 2026-07-01 | C | Pricing 20 pacotes; token VM112; E2E activate dratcoin OK | +| 2026-07-01 | D | Webmail gate contrato; Spec 044; Obsidian sync | diff --git a/specs/043-desk-client-activation-sync/contracts/webmail-release-gate.md b/specs/043-desk-client-activation-sync/contracts/webmail-release-gate.md new file mode 100644 index 0000000..8266d29 --- /dev/null +++ b/specs/043-desk-client-activation-sync/contracts/webmail-release-gate.md @@ -0,0 +1,148 @@ +# Contrato — Liberação formal webmail (`company_gate`) + +**Spec:** [043](../spec.md) · [023](../../023-billing-recurrence-desk-visibility/spec.md) · [035 domain-manager](../../035-ligbox-mail-bundles-foss-openpanel/domain-manager-console-ui.md) +**VM:** 112 (`company_gate.py`, `DomainAdmin.jsx`) +**Versão:** 1.0 · 2026-07-01 · Roger +**Status:** Backend ✅ · UI Painel Admin ⏳ pendente + +**Chat bruto:** [CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt](../../../chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt) + +--- + +## 1. Duas camadas de «activar webmail» + +| Camada | O quê | Quem | Flag / API | +|--------|-------|------|------------| +| **A — Infra** | Traefik, cert LE, SNI, HTTPS `mail.{dom}` | Sistema automático | `infrastructure.ready` | +| **B — Gate formal** | Gerente confirma empresa + libera webmail (2FA Ligbox) | Gerente domínio | `webmail_released_at` | + +**Regra:** camada A não remove aviso da camada B. Login Carbonio pode funcionar antes da liberação formal — aviso é informativo. + +--- + +## 2. Onde fica cada mensagem (decisão Roger 2026-07-01) + +| Superfície | Mensagem | Tipo | +|------------|----------|------| +| **Login Carbonio** `mail.{dom}` | Rodapé: *«Aviso: ambiente operacional — aguarda activação formal pelo Gerente do Domínio no Painel Ligbox…»* | Informativo (não bloqueia) | +| **Wizard** passo Concluído | *«Conta criada — webmail em activação»* (infra pendente) | Técnico | +| **Wizard** `WebmailReleaseModal` | Confirmar empresa + liberar com 2FA | Acção gerente (onboarding) | +| **Painel Admin** `/admin` **Início** | Banner P0 + card «Activar webmail» | Acção gerente (**UI falta**) | +| **Painel Admin** Contas / Resumo | Badge `WEBMAIL ⏳` / `WEBMAIL ✓` | Estado secundário | +| **Sidebar** «Abrir Webmail» | Desactivado até `webmail_released_at` | Evita 502/confusão | + +**Não colocar** a acção de liberar só no rodapé do Carbonio — utilizador final vê aviso; **gerente actua no Painel Ligbox**. + +--- + +## 3. Fluxo backend (VM112) + +``` +Onboarding concluído + → domain_registry (sem webmail_released_at) + → sync_webmail_user_notice() → Carbonio login footer + +Gerente confirma empresa + → POST /api/domain-admin/gate/company-profile + → company_profile_confirmed_at + → webhook company.validated → Desk (Spec 043) + +Gerente libera webmail (2FA Ligbox) + → POST /api/domain-admin/gate/release-webmail + → webmail_released_at + → sync_webmail_user_notice() limpa aviso + → webhook webmail.released → Desk +``` + +### Ficheiros VM112 + +| Ficheiro | Função | +|----------|--------| +| `backend/app/services/company_gate.py` | Gate, mensagens, webhooks | +| `backend/app/routers/domain_admin.py` | `/gate/status`, `/gate/company-profile`, `/gate/release-webmail` | +| `backend/app/services/webmail_pending_page.py` | Página pública aguardando liberação | +| `frontend/src/components/WebmailReleaseModal.jsx` | Modal wizard (onboarding) | +| `frontend/src/DomainAdmin.jsx` | Painel gerente — **falta UI gate** | + +### Constantes (`company_gate.py`) + +```python +PENDING_WEBMAIL_USER_DESCRIPTION = ( + "Aviso: ambiente operacional — aguarda activação formal pelo Gerente do Domínio " + "no Painel Ligbox. Utilização de correio permitida." +) +``` + +Injectado via `carbonio.set_domain_web_ui_notice()`. + +--- + +## 4. API Painel Admin + +### `GET /api/domain-admin/gate/status` + +```json +{ + "domain": "dratcoin.com", + "needs_company_confirm": false, + "webmail_released": false, + "service_active": false, + "webmail_url": "https://mail.dratcoin.com/", + "ops_ticket_state": "awaiting_billing_validation", + "pending_message": "Este webmail aguarda activação pelo Administrador do domínio..." +} +``` + +### `POST /api/domain-admin/gate/release-webmail` + +```json +{ + "ligbox_login": "roger", + "totp_code": "123456", + "recovery_code": null +} +``` + +**Pré-requisitos:** `company_profile_confirmed_at` preenchido; 2FA portal user válido. + +--- + +## 5. Webhooks Desk + +| Evento | Quando | +|--------|--------| +| `company.validated` | Após confirmar perfil empresa | +| `webmail.released` | Após `release_webmail()` | + +Desk: `FUNNEL_STAGE` rank 8 = `webmail_released` (`main.py` VM122). + +--- + +## 6. UI pendente — Painel Admin (`DomainAdmin.jsx`) + +Wireframe **Início** (`/admin`): + +``` +┌─ Activar webmail ─────────────────────────────────────┐ +│ Empresa: ⏳ confirmar | Webmail: ⏳ aguarda liberação │ +│ [ Confirmar dados empresa ] [ Activar webmail + 2FA ] │ +└─────────────────────────────────────────────────────────┘ +``` + +Reutilizar lógica de `WebmailReleaseModal.jsx` + `me.gate` da API `/me`. + +--- + +## 7. Caso dratcoin.com (Roger 2026-07-01) + +- Login `mail.dratcoin.com` mostra aviso no rodapé ✅ (esperado) +- Erro *Credentials are not valid* = senha/email incorrectos (separado do gate) +- Painel `/admin` não mostra card liberar — **gap UI** + +--- + +## Histórico + +| Versão | Data | Notas | +|--------|------|-------| +| 1.0 | 2026-07-01 | Decisão UX mensagens + mapa company_gate | diff --git a/specs/043-desk-client-activation-sync/spec.md b/specs/043-desk-client-activation-sync/spec.md index 2ffcf7b..07d23cc 100644 --- a/specs/043-desk-client-activation-sync/spec.md +++ b/specs/043-desk-client-activation-sync/spec.md @@ -18,7 +18,9 @@ Esta spec **unifica e documenta** o mapeamento de dados desde o card **«Dados d O Desk (VM122) é o **orquestrador**: recebe `company.validated`, persiste `billing_accounts`, e expõe acção staff **«Activar conta»** que dispara a sequência documentada. -**Documento mestre de campos:** [contracts/activation-field-mapping.md](./contracts/activation-field-mapping.md) +**Documento mestre de campos:** [contracts/activation-field-mapping.md](./contracts/activation-field-mapping.md) +**Liberação webmail (gate):** [contracts/webmail-release-gate.md](./contracts/webmail-release-gate.md) +**Chat bruto:** [CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt](../../chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt) --- @@ -100,6 +102,17 @@ O Desk (VM122) é o **orquestrador**: recebe `company.validated`, persiste `bill 4. **Odoo** recebe a **empresa** para gestão financeira (`res.partner`). 5. Um **gerente** por domínio: `admin@{domínio}` + `manager_name` / `manager_email`. 6. Staff activa após revisão OPS — não automático sem RBAC ([027](../027-desk-rbac-function-matrix/spec.md)). +7. **Liberação formal webmail** pelo Gerente no Painel `/admin` (`webmail_released_at`) — ver [webmail-release-gate.md](./contracts/webmail-release-gate.md). + +--- + +## Decisões / Histórico + +| Data | Decisão | +|------|---------| +| 2026-07-01 | FOSS order + mail-bundle VM112 deployados (product_id=3) | +| 2026-07-01 | Aviso Carbonio login = informativo; acção liberar no Painel Admin (UI pendente) | +| 2026-07-01 | Spec 044 tickets FOSS↔Desk documentada | --- diff --git a/specs/043-desk-client-activation-sync/tasks.md b/specs/043-desk-client-activation-sync/tasks.md index 28ac07e..f7f762d 100644 --- a/specs/043-desk-client-activation-sync/tasks.md +++ b/specs/043-desk-client-activation-sync/tasks.md @@ -12,7 +12,7 @@ - [x] `GET /billing/accounts/{id}/activation-preview` - [x] Botão **Activar conta** em `billing-ui.js` (só roles autorizados) - [x] Modal confirmação com 3 colunas FOSS / OpenPanel / Odoo -- [ ] Deploy VM122 + validação Roger (teste manual) +- [x] Deploy VM122 + validação Roger (teste manual) ## Fase 2 — FOSS client + order - [x] `foss_client.create_client()` conforme mapa §4 @@ -46,4 +46,12 @@ ## Fase 6 — Testes - [x] Unit: `test_activation_mapper_043.py` (3) - [x] Unit: `test_client_activation_043.py` (4) — happy path, idempotência FOSS, reject active -- [ ] E2E Roger: domínio teste wizard → activate → FOSS+OP+Odoo +- [x] E2E Roger: domínio teste wizard → activate → FOSS+OP+Odoo (dratcoin.com #2, 2026-07-01) + +## Fase 7 — Webmail gate (company_gate) +- [x] Contrato `contracts/webmail-release-gate.md` +- [x] Backend VM112 `company_gate.py` + API `/gate/*` +- [x] Aviso rodapé login Carbonio (`sync_webmail_user_notice`) +- [x] `WebmailReleaseModal.jsx` no wizard onboarding +- [ ] UI Painel Admin: banner + card «Activar webmail» em `DomainAdmin.jsx` +- [ ] Desactivar «Abrir Webmail» sidebar até `webmail_released_at` diff --git a/specs/044-foss-desk-ticket-sync/spec.md b/specs/044-foss-desk-ticket-sync/spec.md index f1225aa..10521fe 100644 --- a/specs/044-foss-desk-ticket-sync/spec.md +++ b/specs/044-foss-desk-ticket-sync/spec.md @@ -24,6 +24,8 @@ Esta spec define a **ponte bidireccional** Desk ↔ FOSS, preservando o portal w - [ticket-field-mapping.md](./contracts/ticket-field-mapping.md) — chaves de correlação - [ticket-sync-api.md](./contracts/ticket-sync-api.md) — webhooks e endpoints API +**Chat bruto:** [CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt](../../chat-bruto/CHAT_BRUTO_WEBMAIL_GATE_TICKETS_SPEC043_044_20260701.txt) + --- ## Specs relacionadas diff --git a/specs/SPEC-REGISTRY.md b/specs/SPEC-REGISTRY.md index 1e06240..1d608fd 100644 --- a/specs/SPEC-REGISTRY.md +++ b/specs/SPEC-REGISTRY.md @@ -7,7 +7,7 @@ | **040** | **`040-desk-design-system-v013/`** | **UserWizard + Access Control Hub + Governance API** | **0.13.1-ac-hub-ui-aprovado-roger** | | **041** | **`041-desk-operational-feed/`** | **Central Operacional (ex-Mensagens) + ops-inbox API** | **0.13.0** | | **042** | **`042-ligbox-nettools-portal/`** | **NetTools — 23 ferramentas OSS em nettools.ligbox.com.br** | — | -| **043** | **`043-desk-client-activation-sync/`** | **Mapa campos Wizard→Desk→FOSS→OpenPanel→Odoo + API Activar conta** | — | +| **043** | **`043-desk-client-activation-sync/`** | **Mapa campos Wizard→Desk→FOSS→OpenPanel→Odoo + API Activar conta + webmail gate** | — | | **044** | **`044-foss-desk-ticket-sync/`** | **Sync tickets Portal OB- ↔ Desk ↔ FOSS Support** | — | Atualizado: 2026-07-01 · Roger · Spec 044 sync tickets FOSS/portal