spec 043/044: webmail gate contrato, chat bruto e sync Obsidian

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 <cursoragent@cursor.com>
This commit is contained in:
Ligbox Spec Hub 2026-07-01 19:35:33 +00:00
parent ef126d1e52
commit 3cb51e7ba7
11 changed files with 362 additions and 57 deletions

View file

@ -12,24 +12,30 @@
- [quickstart.md](specs/001-webhook-vm112-integration/quickstart.md) - [quickstart.md](specs/001-webhook-vm112-integration/quickstart.md)
- [research.md](specs/001-webhook-vm112-integration/research.md) - [research.md](specs/001-webhook-vm112-integration/research.md)
- [data-model.md](specs/001-webhook-vm112-integration/data-model.md) - [data-model.md](specs/001-webhook-vm112-integration/data-model.md)
- [SESSION-CHECKPOINT.md](specs/001-webhook-vm112-integration/SESSION-CHECKPOINT.md)
- **contracts/** - **contracts/**
- [webhook-onboard](specs/001-webhook-vm112-integration/contracts/webhook-onboard.md) - [webhook-onboard](specs/001-webhook-vm112-integration/contracts/webhook-onboard.md)
- **checklists/** - **checklists/**
- [requirements](specs/001-webhook-vm112-integration/checklists/requirements.md) - [requirements](specs/001-webhook-vm112-integration/checklists/requirements.md)
- **017-vm112-domain-orchestration** - **017-vm112-domain-orchestration**
- [📄 spec.md](specs/017-vm112-domain-orchestration/spec.md) - [📄 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** - **022-carbonio-account-exists-release**
- [📄 spec.md](specs/022-carbonio-account-exists-release/spec.md) - [📄 spec.md](specs/022-carbonio-account-exists-release/spec.md)
- [tasks.md](specs/022-carbonio-account-exists-release/tasks.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** - **025-wizard-onboarding-continuity**
- [📄 spec.md](specs/025-wizard-onboarding-continuity/spec.md) - [📄 spec.md](specs/025-wizard-onboarding-continuity/spec.md)
- [tasks.md](specs/025-wizard-onboarding-continuity/tasks.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** - **026-purge-traefik-validation**
- [📄 spec.md](specs/026-purge-traefik-validation/spec.md) - [📄 spec.md](specs/026-purge-traefik-validation/spec.md)
- [SESSION-CHECKPOINT.md](specs/026-purge-traefik-validation/SESSION-CHECKPOINT.md)
- **010-desk-assist-takeover** - **010-desk-assist-takeover**
- [📄 spec.md](specs/010-desk-assist-takeover/spec.md) - [📄 spec.md](specs/010-desk-assist-takeover/spec.md)
- [tasks.md](specs/010-desk-assist-takeover/tasks.md) - [tasks.md](specs/010-desk-assist-takeover/tasks.md)
- [quickstart.md](specs/010-desk-assist-takeover/quickstart.md) - [quickstart.md](specs/010-desk-assist-takeover/quickstart.md)
- [SESSION-CHECKPOINT.md](specs/010-desk-assist-takeover/SESSION-CHECKPOINT.md)
## VM122 — Ops Desk ## VM122 — Ops Desk
- **003-desk-auth-rbac** - **003-desk-auth-rbac**
- [📄 spec.md](specs/003-desk-auth-rbac/spec.md) - [📄 spec.md](specs/003-desk-auth-rbac/spec.md)
@ -38,6 +44,7 @@
- [quickstart.md](specs/003-desk-auth-rbac/quickstart.md) - [quickstart.md](specs/003-desk-auth-rbac/quickstart.md)
- [research.md](specs/003-desk-auth-rbac/research.md) - [research.md](specs/003-desk-auth-rbac/research.md)
- [data-model.md](specs/003-desk-auth-rbac/data-model.md) - [data-model.md](specs/003-desk-auth-rbac/data-model.md)
- [SESSION-CHECKPOINT.md](specs/003-desk-auth-rbac/SESSION-CHECKPOINT.md)
- **contracts/** - **contracts/**
- [auth-api](specs/003-desk-auth-rbac/contracts/auth-api.md) - [auth-api](specs/003-desk-auth-rbac/contracts/auth-api.md)
- **checklists/** - **checklists/**
@ -46,11 +53,13 @@
- [📄 spec.md](specs/004-desk-account-management/spec.md) - [📄 spec.md](specs/004-desk-account-management/spec.md)
- [tasks.md](specs/004-desk-account-management/tasks.md) - [tasks.md](specs/004-desk-account-management/tasks.md)
- [quickstart.md](specs/004-desk-account-management/quickstart.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** - **004-onboard-funnel-events**
- [📄 spec.md](specs/004-onboard-funnel-events/spec.md) - [📄 spec.md](specs/004-onboard-funnel-events/spec.md)
- [plan.md](specs/004-onboard-funnel-events/plan.md) - [plan.md](specs/004-onboard-funnel-events/plan.md)
- [tasks.md](specs/004-onboard-funnel-events/tasks.md) - [tasks.md](specs/004-onboard-funnel-events/tasks.md)
- [research.md](specs/004-onboard-funnel-events/research.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) - [cloudflare-zone-provision.md](specs/004-onboard-funnel-events/cloudflare-zone-provision.md)
- **contracts/** - **contracts/**
- [webhook-funnel-events](specs/004-onboard-funnel-events/contracts/webhook-funnel-events.md) - [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) - [plan.md](specs/009-ops-audit-overview/plan.md)
- [tasks.md](specs/009-ops-audit-overview/tasks.md) - [tasks.md](specs/009-ops-audit-overview/tasks.md)
- [research.md](specs/009-ops-audit-overview/research.md) - [research.md](specs/009-ops-audit-overview/research.md)
- [SESSION-CHECKPOINT.md](specs/009-ops-audit-overview/SESSION-CHECKPOINT.md)
- **contracts/** - **contracts/**
- [audit-api](specs/009-ops-audit-overview/contracts/audit-api.md) - [audit-api](specs/009-ops-audit-overview/contracts/audit-api.md)
- **checklists/** - **checklists/**
@ -68,16 +78,20 @@
- **010-admin-domain-validation** - **010-admin-domain-validation**
- [📄 spec.md](specs/010-admin-domain-validation/spec.md) - [📄 spec.md](specs/010-admin-domain-validation/spec.md)
- [correcao-vm112.md](specs/010-admin-domain-validation/correcao-vm112.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** - **012-abandoned-onboarding-lead**
- [📄 spec.md](specs/012-abandoned-onboarding-lead/spec.md) - [📄 spec.md](specs/012-abandoned-onboarding-lead/spec.md)
- [tasks.md](specs/012-abandoned-onboarding-lead/tasks.md) - [tasks.md](specs/012-abandoned-onboarding-lead/tasks.md)
- [quickstart.md](specs/012-abandoned-onboarding-lead/quickstart.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** - **015-desk-module-registry**
- [📄 spec.md](specs/015-desk-module-registry/spec.md) - [📄 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** - **027-desk-rbac-function-matrix**
- [📄 spec.md](specs/027-desk-rbac-function-matrix/spec.md) - [📄 spec.md](specs/027-desk-rbac-function-matrix/spec.md)
- [quickstart.md](specs/027-desk-rbac-function-matrix/quickstart.md) - [quickstart.md](specs/027-desk-rbac-function-matrix/quickstart.md)
- [data-model.md](specs/027-desk-rbac-function-matrix/data-model.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) - [ui-access-matrix.md](specs/027-desk-rbac-function-matrix/ui-access-matrix.md)
- **contracts/** - **contracts/**
- [vm123-product-roles](specs/027-desk-rbac-function-matrix/contracts/vm123-product-roles.md) - [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) - [plan.md](specs/019-ops-console-active-operations/plan.md)
- [tasks.md](specs/019-ops-console-active-operations/tasks.md) - [tasks.md](specs/019-ops-console-active-operations/tasks.md)
- [README.md](specs/019-ops-console-active-operations/README.md) - [README.md](specs/019-ops-console-active-operations/README.md)
- [SESSION-CHECKPOINT.md](specs/019-ops-console-active-operations/SESSION-CHECKPOINT.md)
- **contracts/** - **contracts/**
- [chamados-api](specs/019-ops-console-active-operations/contracts/chamados-api.md) - [chamados-api](specs/019-ops-console-active-operations/contracts/chamados-api.md)
- **design/** - **design/**
@ -94,31 +109,39 @@
- **023-billing-recurrence-desk-visibility** - **023-billing-recurrence-desk-visibility**
- [📄 spec.md](specs/023-billing-recurrence-desk-visibility/spec.md) - [📄 spec.md](specs/023-billing-recurrence-desk-visibility/spec.md)
- [tasks.md](specs/023-billing-recurrence-desk-visibility/tasks.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** - **024-openpanel-fossbilling**
- [📄 spec.md](specs/024-openpanel-fossbilling/spec.md) - [📄 spec.md](specs/024-openpanel-fossbilling/spec.md)
- [tasks.md](specs/024-openpanel-fossbilling/tasks.md) - [tasks.md](specs/024-openpanel-fossbilling/tasks.md)
- [PROVISIONING_CLIENT_CARD.md](specs/024-openpanel-fossbilling/PROVISIONING_CLIENT_CARD.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** - **019-email-migration-vm122-execution**
- [📄 spec.md](specs/019-email-migration-vm122-execution/spec.md) - [📄 spec.md](specs/019-email-migration-vm122-execution/spec.md)
- [tasks.md](specs/019-email-migration-vm122-execution/tasks.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 ## VM104 — Wazuh
- **002-wazuh-integration** - **002-wazuh-integration**
- [📄 spec.md](specs/002-wazuh-integration/spec.md) - [📄 spec.md](specs/002-wazuh-integration/spec.md)
- [plan.md](specs/002-wazuh-integration/plan.md) - [plan.md](specs/002-wazuh-integration/plan.md)
- [tasks.md](specs/002-wazuh-integration/tasks.md) - [tasks.md](specs/002-wazuh-integration/tasks.md)
- [SESSION-CHECKPOINT.md](specs/002-wazuh-integration/SESSION-CHECKPOINT.md)
## CT130 — Spec Hub ## CT130 — Spec Hub
- **031-spec-hub-portal** - **031-spec-hub-portal**
- [📄 spec.md](specs/031-spec-hub-portal/spec.md) - [📄 spec.md](specs/031-spec-hub-portal/spec.md)
- [SESSION-CHECKPOINT.md](specs/031-spec-hub-portal/SESSION-CHECKPOINT.md)
## Outras specs ## Outras specs
- **007-mobile-push-notifications** - **007-mobile-push-notifications**
- [📄 spec.md](specs/007-mobile-push-notifications/spec.md) - [📄 spec.md](specs/007-mobile-push-notifications/spec.md)
- [tasks.md](specs/007-mobile-push-notifications/tasks.md) - [tasks.md](specs/007-mobile-push-notifications/tasks.md)
- [quickstart.md](specs/007-mobile-push-notifications/quickstart.md) - [quickstart.md](specs/007-mobile-push-notifications/quickstart.md)
- [SESSION-CHECKPOINT.md](specs/007-mobile-push-notifications/SESSION-CHECKPOINT.md)
- **011-integration-otrs** - **011-integration-otrs**
- [📄 spec.md](specs/011-integration-otrs/spec.md) - [📄 spec.md](specs/011-integration-otrs/spec.md)
- [SESSION-CHECKPOINT.md](specs/011-integration-otrs/SESSION-CHECKPOINT.md)
- **011-mail-tls-wizard-validation** - **011-mail-tls-wizard-validation**
- [📄 spec.md](specs/011-mail-tls-wizard-validation/spec.md) - [📄 spec.md](specs/011-mail-tls-wizard-validation/spec.md)
- [README.md](specs/011-mail-tls-wizard-validation/README.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** - **013-email-server-migration**
- [📄 spec.md](specs/013-email-server-migration/spec.md) - [📄 spec.md](specs/013-email-server-migration/spec.md)
- [plan.md](specs/013-email-server-migration/plan.md) - [plan.md](specs/013-email-server-migration/plan.md)
@ -127,31 +150,39 @@
- [research.md](specs/013-email-server-migration/research.md) - [research.md](specs/013-email-server-migration/research.md)
- [data-model.md](specs/013-email-server-migration/data-model.md) - [data-model.md](specs/013-email-server-migration/data-model.md)
- [infrastructure.md](specs/013-email-server-migration/infrastructure.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** - **014-funnel-phase-timing**
- [📄 spec.md](specs/014-funnel-phase-timing/spec.md) - [📄 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** - **016-onboard-self-service-prefill**
- [📄 spec.md](specs/016-onboard-self-service-prefill/spec.md) - [📄 spec.md](specs/016-onboard-self-service-prefill/spec.md)
- [tasks.md](specs/016-onboard-self-service-prefill/tasks.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) - [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** - **018-service-orchestration**
- [📄 spec.md](specs/018-service-orchestration/spec.md) - [📄 spec.md](specs/018-service-orchestration/spec.md)
- [SESSION-CHECKPOINT.md](specs/018-service-orchestration/SESSION-CHECKPOINT.md)
- **020-purge-history-desk** - **020-purge-history-desk**
- [📄 spec.md](specs/020-purge-history-desk/spec.md) - [📄 spec.md](specs/020-purge-history-desk/spec.md)
- [SESSION-CHECKPOINT.md](specs/020-purge-history-desk/SESSION-CHECKPOINT.md)
- **021-wizard-cybersecurity-telemetry** - **021-wizard-cybersecurity-telemetry**
- [📄 spec.md](specs/021-wizard-cybersecurity-telemetry/spec.md) - [📄 spec.md](specs/021-wizard-cybersecurity-telemetry/spec.md)
- [tasks.md](specs/021-wizard-cybersecurity-telemetry/tasks.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** - **028-openpanel-ce-ligbox-reengineering**
- [📄 spec.md](specs/028-openpanel-ce-ligbox-reengineering/spec.md) - [📄 spec.md](specs/028-openpanel-ce-ligbox-reengineering/spec.md)
- [tasks.md](specs/028-openpanel-ce-ligbox-reengineering/tasks.md) - [tasks.md](specs/028-openpanel-ce-ligbox-reengineering/tasks.md)
- [quickstart.md](specs/028-openpanel-ce-ligbox-reengineering/quickstart.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) - [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) - [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/** - **contracts/**
- [foss-bridge-api](specs/028-openpanel-ce-ligbox-reengineering/contracts/foss-bridge-api.md) - [foss-bridge-api](specs/028-openpanel-ce-ligbox-reengineering/contracts/foss-bridge-api.md)
- **029-agentic-ops-runbooks** - **029-agentic-ops-runbooks**
- [📄 spec.md](specs/029-agentic-ops-runbooks/spec.md) - [📄 spec.md](specs/029-agentic-ops-runbooks/spec.md)
- [tasks.md](specs/029-agentic-ops-runbooks/tasks.md) - [tasks.md](specs/029-agentic-ops-runbooks/tasks.md)
- [quickstart.md](specs/029-agentic-ops-runbooks/quickstart.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) - [agents-roster.md](specs/029-agentic-ops-runbooks/agents-roster.md)
- **contracts/** - **contracts/**
- [agent-platform-api](specs/029-agentic-ops-runbooks/contracts/agent-platform-api.md) - [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) - [📄 spec.md](specs/029-tickets-workspace/spec.md)
- [ARCHITECTURE.md](specs/029-tickets-workspace/ARCHITECTURE.md) - [ARCHITECTURE.md](specs/029-tickets-workspace/ARCHITECTURE.md)
- [CORRETIVO-20260619-tickets-rebuild.md](specs/029-tickets-workspace/CORRETIVO-20260619-tickets-rebuild.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** - **030-agentic-ops-ui**
- [📄 spec.md](specs/030-agentic-ops-ui/spec.md) - [📄 spec.md](specs/030-agentic-ops-ui/spec.md)
- [tasks.md](specs/030-agentic-ops-ui/tasks.md) - [tasks.md](specs/030-agentic-ops-ui/tasks.md)
- [SESSION-CHECKPOINT.md](specs/030-agentic-ops-ui/SESSION-CHECKPOINT.md)
- **contracts/** - **contracts/**
- [agentic-ui-api](specs/030-agentic-ops-ui/contracts/agentic-ui-api.md) - [agentic-ui-api](specs/030-agentic-ops-ui/contracts/agentic-ui-api.md)
- **design/** - **design/**
- [wireframes](specs/030-agentic-ops-ui/design/wireframes.md) - [wireframes](specs/030-agentic-ops-ui/design/wireframes.md)
- **032-purge-domain-extra-auth** - **032-purge-domain-extra-auth**
- [📄 spec.md](specs/032-purge-domain-extra-auth/spec.md) - [📄 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** - **033-desk-infra-console-ui**
- [📄 spec.md](specs/033-desk-infra-console-ui/spec.md) - [📄 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** - **034-nextcloud-carbonio-vm112-integration**
- [📄 spec.md](specs/034-nextcloud-carbonio-vm112-integration/spec.md) - [📄 spec.md](specs/034-nextcloud-carbonio-vm112-integration/spec.md)
- [tasks.md](specs/034-nextcloud-carbonio-vm112-integration/tasks.md) - [tasks.md](specs/034-nextcloud-carbonio-vm112-integration/tasks.md)
- [quickstart.md](specs/034-nextcloud-carbonio-vm112-integration/quickstart.md) - [quickstart.md](specs/034-nextcloud-carbonio-vm112-integration/quickstart.md)
- [infrastructure.md](specs/034-nextcloud-carbonio-vm112-integration/infrastructure.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) - [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/** - **contracts/**
- [nextcloud-provisioning-api](specs/034-nextcloud-carbonio-vm112-integration/contracts/nextcloud-provisioning-api.md) - [nextcloud-provisioning-api](specs/034-nextcloud-carbonio-vm112-integration/contracts/nextcloud-provisioning-api.md)
- **035-ligbox-mail-bundles-foss-openpanel** - **035-ligbox-mail-bundles-foss-openpanel**
- [📄 spec.md](specs/035-ligbox-mail-bundles-foss-openpanel/spec.md) - [📄 spec.md](specs/035-ligbox-mail-bundles-foss-openpanel/spec.md)
- [tasks.md](specs/035-ligbox-mail-bundles-foss-openpanel/tasks.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) - [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) - [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) - [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) - [📄 spec.md](specs/035-ligbox-watchman/spec.md)
- [tasks.md](specs/035-ligbox-watchman/tasks.md) - [tasks.md](specs/035-ligbox-watchman/tasks.md)
- [quickstart.md](specs/035-ligbox-watchman/quickstart.md) - [quickstart.md](specs/035-ligbox-watchman/quickstart.md)
- [SESSION-CHECKPOINT.md](specs/035-ligbox-watchman/SESSION-CHECKPOINT.md)
- **contracts/** - **contracts/**
- [status-snapshot](specs/035-ligbox-watchman/contracts/status-snapshot.md) - [status-snapshot](specs/035-ligbox-watchman/contracts/status-snapshot.md)
- **036-backstage-techdocs-speckit-companion** - **036-backstage-techdocs-speckit-companion**
- [📄 spec.md](specs/036-backstage-techdocs-speckit-companion/spec.md) - [📄 spec.md](specs/036-backstage-techdocs-speckit-companion/spec.md)
- [tasks.md](specs/036-backstage-techdocs-speckit-companion/tasks.md) - [tasks.md](specs/036-backstage-techdocs-speckit-companion/tasks.md)
- [quickstart.md](specs/036-backstage-techdocs-speckit-companion/quickstart.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** - **037-dns-multi-cloudflare-orchestration**
- [📄 spec.md](specs/037-dns-multi-cloudflare-orchestration/spec.md) - [📄 spec.md](specs/037-dns-multi-cloudflare-orchestration/spec.md)
- [tasks.md](specs/037-dns-multi-cloudflare-orchestration/tasks.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) - [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) - [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) - [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) - [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) - [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) - [📄 spec.md](specs/043-desk-client-activation-sync/spec.md)
- [tasks.md](specs/043-desk-client-activation-sync/tasks.md) - [tasks.md](specs/043-desk-client-activation-sync/tasks.md)
- [ROLLBACK.md](specs/043-desk-client-activation-sync/ROLLBACK.md) - [ROLLBACK.md](specs/043-desk-client-activation-sync/ROLLBACK.md)
- [SESSION-CHECKPOINT.md](specs/043-desk-client-activation-sync/SESSION-CHECKPOINT.md)
- **contracts/** - **contracts/**
- [activation-field-mapping.md](specs/043-desk-client-activation-sync/contracts/activation-field-mapping.md) — **fonte única** - [activation-field-mapping](specs/043-desk-client-activation-sync/contracts/activation-field-mapping.md)
- [desk-activate-account-api.md](specs/043-desk-client-activation-sync/contracts/desk-activate-account-api.md) - [desk-activate-account-api](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) - [mail-bundle-api](specs/043-desk-client-activation-sync/contracts/mail-bundle-api.md)
- **044-foss-desk-ticket-sync** ⭐ Portal OB- ↔ Desk ↔ FOSS Support - [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) - [📄 spec.md](specs/044-foss-desk-ticket-sync/spec.md)
- [tasks.md](specs/044-foss-desk-ticket-sync/tasks.md) - [tasks.md](specs/044-foss-desk-ticket-sync/tasks.md)
- [ROLLBACK.md](specs/044-foss-desk-ticket-sync/ROLLBACK.md) - [ROLLBACK.md](specs/044-foss-desk-ticket-sync/ROLLBACK.md)
- **contracts/** - **contracts/**
- [ticket-field-mapping.md](specs/044-foss-desk-ticket-sync/contracts/ticket-field-mapping.md) — **fonte única IDs** - [ticket-field-mapping](specs/044-foss-desk-ticket-sync/contracts/ticket-field-mapping.md)
- [ticket-sync-api.md](specs/044-foss-desk-ticket-sync/contracts/ticket-sync-api.md) - [ticket-sync-api](specs/044-foss-desk-ticket-sync/contracts/ticket-sync-api.md)

View file

@ -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)

View file

@ -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)

View file

@ -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`. **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 ## Integração
- **→ VM122:** webhooks `onboarding.*` · Assist/takeover API - **→ VM122:** webhooks `onboarding.*` · Assist/takeover API

View file

@ -171,6 +171,20 @@ Quota NC: [ 200 GB ▼ ]
**Limite:** se `seats_used >= max_seats` → modal «Upgrade plano» (embed FOSS ou deep-link). **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 ### 5.3 Nextcloud / Files
| Elemento | Comportamento | | Elemento | Comportamento |
@ -180,7 +194,7 @@ Quota NC: [ 200 GB ▼ ]
| Lista contas com quota Files | read-only espelho §5.2 | | Lista contas com quota Files | read-only espelho §5.2 |
| Coluna «Mail NC» | ✅ / — conforme toggle domínio + conta | | 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 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 100500 GB | | Política default novas contas | dropdown 100500 GB |
**UI toggle (domínio):** **UI toggle (domínio):**

View file

@ -8,10 +8,10 @@
| Campo | Valor | | Campo | Valor |
|-------|-------| |-------|-------|
| **Status** | `in_progress` | | **Status** | `in_progress` (E2E activate OK; webmail gate UI pendente) |
| **Última actualização** | 2026-07-01 | | **Última actualização** | 2026-07-01 |
| **Agente / sessão** | Agente B (043/035) + checkpoint protocolo | | **Agente / sessão** | Obsidian sync webmail gate + Spec 044 chat bruto |
| **Prioridade** | P0 | | **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] Produto FOSS `ligbox-mail-business` + catálogo 20 pacotes (ids 121, preços 1M)
- [x] Script `deploy/vm123-finance-stack/create-foss-mail-business.sh` - [x] Código mail-bundle VM112 (`internal/provision/mail-bundle`)
- [x] Código mail-bundle VM112 (`mail_bundle.py`, `internal_provision.py`) no repo - [x] `OPS_INTERNAL_TOKEN` sincronizado VM122 → VM112 `.env` + restart wizard
- [x] Deploy código mail-bundle na VM112 (router activo — HTTP 401 sem token) - [x] mail-bundle dratcoin.com provisionado (mail.dratcoin.com, 25 seats)
- [x] Contrato `contracts/mail-bundle-api.md` - [x] Desk Spec 043 redeployed no container VM122 (`docker cp` + restart)
- [x] Runbook `deploy/vm112-wizard/MAIL-BUNDLE-DEPLOY.md` - [x] E2E Roger: `POST /api/v1/billing/accounts/2/activate``billing_active`
- [x] Desk Spec 043 código no container (264 linhas billing_routes) — deploy temporário - 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` 1. **FOSS `create_client`**`client_id: null` apesar de `created: true`; investigar API admin client/create
- [x] E2E parcial dratcoin: OpenPanel `dratcoix` + Odoo #9`billing_active` 2. **Deploy permanente VM122** — rebuild imagem Docker (código ainda via `docker cp`, não bake na imagem)
- [x] Token FOSS API admin (VM123) 3. **Custom fields FOSS** — activar módulo Formbuilder e associar domain/manager_email aos produtos mail
- [x] Protocolo SESSION-CHECKPOINT todas as specs + Rule Cursor 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 ## Smoke tests (validados 2026-07-01)
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
```bash ```bash
curl -s http://10.10.10.122:8080/health # mail-bundle GET (VM112)
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 curl -s -H "X-Ops-Internal-Token: $OPS_INTERNAL_TOKEN" \
# mail-bundle (requer token): http://10.10.10.112:8090/api/internal/provision/mail-bundle/dratcoin.com
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" \ # Desk activate
-d "{\"domain\":\"dratcoin.com\",\"admin_email\":\"001@dratcoin.com\",\"seats\":25}" curl -s -X POST http://10.10.10.122:8080/api/v1/billing/accounts/2/activate \
curl -s "https://financeiro.ligbox.com.br/api/admin/product/get_list" -u "admin:$FOSS_TOKEN" -d "{\"per_page\":10}" -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 | | Item | Path |
|------|------| |------|------|
| tasks.md | `./tasks.md` | | 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` | | 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 | | 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 | A | E2E parcial; webhooks; protocolo handoff |
| 2026-07-01 | B | FOSS product + mail-bundle código/deploy VM112 | | 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 |

View file

@ -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 |

View file

@ -19,6 +19,8 @@ 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. 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`). 4. **Odoo** recebe a **empresa** para gestão financeira (`res.partner`).
5. Um **gerente** por domínio: `admin@{domínio}` + `manager_name` / `manager_email`. 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)). 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 |
--- ---

View file

@ -12,7 +12,7 @@
- [x] `GET /billing/accounts/{id}/activation-preview` - [x] `GET /billing/accounts/{id}/activation-preview`
- [x] Botão **Activar conta** em `billing-ui.js` (só roles autorizados) - [x] Botão **Activar conta** em `billing-ui.js` (só roles autorizados)
- [x] Modal confirmação com 3 colunas FOSS / OpenPanel / Odoo - [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 ## Fase 2 — FOSS client + order
- [x] `foss_client.create_client()` conforme mapa §4 - [x] `foss_client.create_client()` conforme mapa §4
@ -46,4 +46,12 @@
## Fase 6 — Testes ## Fase 6 — Testes
- [x] Unit: `test_activation_mapper_043.py` (3) - [x] Unit: `test_activation_mapper_043.py` (3)
- [x] Unit: `test_client_activation_043.py` (4) — happy path, idempotência FOSS, reject active - [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`

View file

@ -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-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 - [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 ## Specs relacionadas

View file

@ -7,7 +7,7 @@
| **040** | **`040-desk-design-system-v013/`** | **UserWizard + Access Control Hub + Governance API** | **0.13.1-ac-hub-ui-aprovado-roger** | | **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** | | **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** | — | | **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** | — | | **044** | **`044-foss-desk-ticket-sync/`** | **Sync tickets Portal OB- ↔ Desk ↔ FOSS Support** | — |
Atualizado: 2026-07-01 · Roger · Spec 044 sync tickets FOSS/portal Atualizado: 2026-07-01 · Roger · Spec 044 sync tickets FOSS/portal