aiox-core 5.0.7 → 5.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.aiox-core/cli/commands/pro/buyer.js +379 -0
- package/.aiox-core/cli/commands/pro/index.js +191 -52
- package/.aiox-core/cli/commands/validate/index.js +2 -0
- package/.aiox-core/core/code-intel/helpers/dev-helper.js +1 -1
- package/.aiox-core/core/code-intel/helpers/devops-helper.js +0 -1
- package/.aiox-core/core/code-intel/helpers/planning-helper.js +1 -1
- package/.aiox-core/core/code-intel/helpers/qa-helper.js +2 -2
- package/.aiox-core/core/config/schemas/framework-config.schema.json +1 -0
- package/.aiox-core/core/config/template-overrides.js +1 -1
- package/.aiox-core/core/doctor/checks/ide-sync.js +81 -25
- package/.aiox-core/core/doctor/checks/rules-files.js +0 -1
- package/.aiox-core/core/doctor/checks/skills-count.js +83 -15
- package/.aiox-core/core/graph-dashboard/cli.js +1 -2
- package/.aiox-core/core/graph-dashboard/data-sources/code-intel-source.js +1 -1
- package/.aiox-core/core/ids/layer-classifier.js +1 -1
- package/.aiox-core/core/pro/pro-updater.js +578 -0
- package/.aiox-core/core/synapse/context/context-tracker.js +107 -9
- package/.aiox-core/core/synapse/layers/layer-processor.js +1 -1
- package/.aiox-core/core-config.yaml +15 -1
- package/.aiox-core/data/capability-detection.js +15 -15
- package/.aiox-core/data/entity-registry.yaml +18 -2
- package/.aiox-core/data/registry-update-log.jsonl +5 -0
- package/.aiox-core/data/tok3-token-comparison.js +0 -4
- package/.aiox-core/data/tool-search-validation.js +1 -1
- package/.aiox-core/development/agents/aiox-master.md +44 -6
- package/.aiox-core/development/agents/data-engineer.md +4 -4
- package/.aiox-core/development/agents/devops.md +52 -2
- package/.aiox-core/development/agents/po.md +1 -1
- package/.aiox-core/development/agents/qa.md +5 -11
- package/.aiox-core/development/agents/sm.md +3 -3
- package/.aiox-core/development/agents/ux-design-expert.md +1 -1
- package/.aiox-core/development/scripts/unified-activation-pipeline.js +29 -3
- package/.aiox-core/development/tasks/dev-develop-story.md +46 -7
- package/.aiox-core/development/tasks/devops-pro-access-grant.md +93 -0
- package/.aiox-core/development/tasks/devops-pro-activate.md +42 -0
- package/.aiox-core/development/tasks/devops-pro-check-access.md +34 -0
- package/.aiox-core/development/tasks/devops-pro-request-reset.md +34 -0
- package/.aiox-core/development/tasks/devops-pro-resend-verification.md +32 -0
- package/.aiox-core/development/tasks/devops-pro-reset-password.md +36 -0
- package/.aiox-core/development/tasks/devops-pro-validate-login.md +36 -0
- package/.aiox-core/development/tasks/devops-pro-verify-status.md +33 -0
- package/.aiox-core/development/tasks/qa-gate.md +54 -4
- package/.aiox-core/development/tasks/validate-next-story.md +39 -2
- package/.aiox-core/framework-config.yaml +1 -0
- package/.aiox-core/infrastructure/scripts/codex-skills-sync/README.md +69 -0
- package/.aiox-core/infrastructure/scripts/codex-skills-sync/bootstrap.js +727 -0
- package/.aiox-core/infrastructure/scripts/codex-skills-sync/index.js +10 -0
- package/.aiox-core/infrastructure/scripts/codex-skills-sync/validate.js +65 -4
- package/.aiox-core/infrastructure/scripts/generate-settings-json.js +29 -4
- package/.aiox-core/infrastructure/scripts/ide-sync/agent-parser.js +4 -0
- package/.aiox-core/infrastructure/scripts/ide-sync/index.js +67 -7
- package/.aiox-core/infrastructure/scripts/ide-sync/transformers/claude-code.js +145 -3
- package/.aiox-core/infrastructure/scripts/repair-agent-references.js +263 -0
- package/.aiox-core/infrastructure/scripts/validate-claude-integration.js +60 -8
- package/.aiox-core/infrastructure/scripts/validate-paths.js +13 -0
- package/.aiox-core/install-manifest.yaml +134 -82
- package/.aiox-core/utils/filters/index.js +2 -1
- package/.claude/commands/AIOX/agents/aiox-master.md +21 -0
- package/.claude/commands/AIOX/agents/analyst.md +21 -0
- package/.claude/commands/AIOX/agents/architect.md +21 -0
- package/.claude/commands/AIOX/agents/data-engineer.md +21 -0
- package/.claude/commands/AIOX/agents/dev.md +21 -0
- package/.claude/commands/AIOX/agents/devops.md +21 -0
- package/.claude/commands/AIOX/agents/pm.md +21 -0
- package/.claude/commands/AIOX/agents/po.md +21 -0
- package/.claude/commands/AIOX/agents/qa.md +21 -0
- package/.claude/commands/AIOX/agents/sm.md +21 -0
- package/.claude/commands/AIOX/agents/squad-creator.md +21 -0
- package/.claude/commands/AIOX/agents/ux-design-expert.md +21 -0
- package/.claude/commands/AIOX/scripts/agent-config-loader.js +624 -0
- package/.claude/commands/AIOX/scripts/generate-greeting.js +160 -0
- package/.claude/commands/AIOX/scripts/greeting-builder.js +866 -0
- package/.claude/commands/AIOX/scripts/session-context-loader.js +286 -0
- package/.claude/commands/AIOX/stories/story-6.1.4.md +1404 -0
- package/.claude/commands/cohort-squad/agents/cohort-manager.md +156 -0
- package/.claude/commands/design-system/agents/brad-frost.md +1097 -0
- package/.claude/commands/design-system/agents/dan-mall.md +857 -0
- package/.claude/commands/design-system/agents/dave-malouf.md +2272 -0
- package/.claude/commands/design-system/agents/design-chief.md +102 -0
- package/.claude/commands/design-system/agents/nano-banana-generator.md +162 -0
- package/.claude/commands/greet.md +101 -0
- package/.claude/commands/synapse/manager.md +75 -0
- package/.claude/commands/synapse/tasks/add-rule.md +94 -0
- package/.claude/commands/synapse/tasks/create-command.md +109 -0
- package/.claude/commands/synapse/tasks/create-domain.md +127 -0
- package/.claude/commands/synapse/tasks/diagnose-synapse.md +245 -0
- package/.claude/commands/synapse/tasks/edit-rule.md +109 -0
- package/.claude/commands/synapse/tasks/suggest-domain.md +116 -0
- package/.claude/commands/synapse/tasks/toggle-domain.md +83 -0
- package/.claude/commands/synapse/templates/domain-template +8 -0
- package/.claude/commands/synapse/templates/manifest-entry-template +4 -0
- package/.claude/commands/synapse/utils/manifest-parser-reference.md +134 -0
- package/.claude/hooks/precompact-session-digest.cjs +2 -2
- package/.claude/skills/AIOX/agents/aiox-master/SKILL.md +511 -0
- package/.claude/skills/AIOX/agents/analyst/SKILL.md +281 -0
- package/.claude/skills/AIOX/agents/architect/SKILL.md +482 -0
- package/.claude/skills/AIOX/agents/data-engineer/SKILL.md +503 -0
- package/.claude/skills/AIOX/agents/dev/SKILL.md +568 -0
- package/.claude/skills/AIOX/agents/devops/SKILL.md +597 -0
- package/.claude/skills/AIOX/agents/pm/SKILL.md +385 -0
- package/.claude/skills/AIOX/agents/po/SKILL.md +343 -0
- package/.claude/skills/AIOX/agents/qa/SKILL.md +451 -0
- package/.claude/skills/AIOX/agents/sm/SKILL.md +295 -0
- package/.claude/skills/AIOX/agents/squad-creator/SKILL.md +352 -0
- package/.claude/skills/AIOX/agents/ux-design-expert/SKILL.md +503 -0
- package/.claude/skills/architect-first/SKILL.md +275 -0
- package/.claude/skills/architect-first/assets/architecture-template.md +505 -0
- package/.claude/skills/architect-first/assets/config-template.yaml +351 -0
- package/.claude/skills/architect-first/references/architecture-checklist.md +216 -0
- package/.claude/skills/architect-first/references/pre-implementation-checklist.md +119 -0
- package/.claude/skills/architect-first/references/stop-rules-guide.md +291 -0
- package/.claude/skills/architect-first/references/testing-strategy-guide.md +477 -0
- package/.claude/skills/architect-first/scripts/architecture_validator.py +490 -0
- package/.claude/skills/architect-first/scripts/check_coupling.py +306 -0
- package/.claude/skills/architect-first/scripts/validate_risk_mitigation.py +382 -0
- package/.claude/skills/checklist-runner/SKILL.md +113 -0
- package/.claude/skills/clone-mind.md +329 -0
- package/.claude/skills/coderabbit-review/SKILL.md +106 -0
- package/.claude/skills/course-generation-workflow.md +76 -0
- package/.claude/skills/enhance-workflow.md +466 -0
- package/.claude/skills/mcp-builder/LICENSE.txt +202 -0
- package/.claude/skills/mcp-builder/SKILL.md +328 -0
- package/.claude/skills/mcp-builder/reference/evaluation.md +602 -0
- package/.claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/.claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
- package/.claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
- package/.claude/skills/mcp-builder/scripts/connections.py +151 -0
- package/.claude/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/.claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/.claude/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/.claude/skills/ralph.md +181 -0
- package/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/.claude/skills/skill-creator/SKILL.md +209 -0
- package/.claude/skills/skill-creator/scripts/init_skill.py +303 -0
- package/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/.claude/skills/skill-creator/scripts/quick_validate.py +65 -0
- package/.claude/skills/squad.md +301 -0
- package/.claude/skills/synapse/SKILL.md +132 -0
- package/.claude/skills/synapse/assets/README.md +50 -0
- package/.claude/skills/synapse/references/brackets.md +100 -0
- package/.claude/skills/synapse/references/commands.md +118 -0
- package/.claude/skills/synapse/references/domains.md +126 -0
- package/.claude/skills/synapse/references/layers.md +186 -0
- package/.claude/skills/synapse/references/manifest.md +142 -0
- package/.claude/skills/tech-search/SKILL.md +431 -0
- package/.claude/skills/tech-search/prompts/page-extract.md +133 -0
- package/README.en.md +2 -2
- package/README.md +8 -2
- package/bin/aiox.js +55 -4
- package/bin/utils/framework-guard.js +4 -2
- package/bin/utils/pro-detector.js +119 -28
- package/bin/utils/validate-publish.js +6 -6
- package/docs/aiox-agent-flows/devops-system.md +18 -0
- package/docs/aiox-workflows/README.md +1 -0
- package/docs/aiox-workflows/pro-access-grant-workflow.md +218 -0
- package/docs/guides/pro/access-grant-ops-playbook.md +370 -0
- package/docs/guides/pro/install-gate-setup.md +12 -6
- package/docs/guides/pro/squad-creator-handoff-pro-access-ops.md +134 -0
- package/docs/guides/supabase-ops-handoff.md +768 -0
- package/package.json +12 -1
- package/packages/aiox-pro-cli/bin/aiox-pro.js +33 -12
- package/packages/installer/src/config/configure-environment.js +118 -50
- package/packages/installer/src/installer/aiox-core-installer.js +124 -27
- package/packages/installer/src/installer/brownfield-upgrader.js +66 -9
- package/packages/installer/src/installer/dependency-installer.js +4 -0
- package/packages/installer/src/pro/pro-scaffolder.js +5 -5
- package/packages/installer/src/updater/index.js +151 -10
- package/packages/installer/src/wizard/ide-config-generator.js +73 -7
- package/packages/installer/src/wizard/index.js +119 -31
- package/packages/installer/src/wizard/pro-setup.js +118 -47
- package/packages/installer/src/wizard/validation/validators/dependency-validator.js +32 -25
- package/packages/installer/src/wizard/validation/validators/file-structure-validator.js +26 -0
- package/packages/installer/tests/unit/artifact-copy-pipeline/artifact-copy-pipeline.test.js +84 -1
- package/packages/installer/tests/unit/claude-md-template-v5/claude-md-template-v5.test.js +1 -1
- package/packages/installer/tests/unit/doctor/doctor-checks.test.js +85 -19
- package/packages/installer/tests/unit/entity-registry-bootstrap.test.js +4 -4
- package/packages/installer/tests/unit/generate-settings-json/generate-settings-json.test.js +5 -5
- package/packages/installer/tests/unit/ide-sync-integration/ide-sync-integration.test.js +4 -4
- package/packages/installer/tests/unit/merger/yaml-merger.test.js +11 -11
- package/pro/README.md +12 -1
- package/pro/license/index.js +3 -11
- package/pro/license/license-api.js +25 -0
- package/pro/license/license-cache.js +135 -31
- package/pro/license/license-crypto.js +59 -3
- package/pro/package.json +5 -4
- package/pro/squads/README.md +16 -16
- package/pro/squads/index.js +1 -1
- package/scripts/e2e/installed-skills-smoke.js +264 -0
- package/scripts/package-synapse.js +3 -3
- package/scripts/validate-package-completeness.js +8 -11
- package/.aiox-core/lib/build.json +0 -1
|
@@ -0,0 +1,768 @@
|
|
|
1
|
+
# AIOX-Pro Access Ops Handoff
|
|
2
|
+
|
|
3
|
+
**Version:** 3.0.0
|
|
4
|
+
**Last Updated:** 2026-04-19
|
|
5
|
+
**Status:** Active
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Este handoff não é para descoberta genérica de Supabase.
|
|
12
|
+
|
|
13
|
+
Ele existe para operações repetíveis do AIOX-Pro access/licensing, onde o projeto, o serviço e o fluxo já são conhecidos. O foco aqui é permitir que o squad-creator gere tasks específicas para operações como:
|
|
14
|
+
|
|
15
|
+
- criar novo acesso
|
|
16
|
+
- liberar Pro para um e-mail existente
|
|
17
|
+
- reenviar verificação
|
|
18
|
+
- confirmar e-mail por admin
|
|
19
|
+
- reset de senha
|
|
20
|
+
- diagnosticar por que um login/acesso falhou
|
|
21
|
+
|
|
22
|
+
O documento precisa ser profundo o suficiente para evitar que a task gerada repita investigação desnecessária ou tome atalhos perigosos.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Fixed Context
|
|
27
|
+
|
|
28
|
+
Para este fluxo, os fatos já conhecidos são:
|
|
29
|
+
|
|
30
|
+
- serviço real: `https://aiox-license-server.vercel.app`
|
|
31
|
+
- projeto Supabase correto: `aios-license-server`
|
|
32
|
+
- project ref: `evvvnarpwcdybxdvcwjh`
|
|
33
|
+
- auth backend: Supabase Auth do projeto `evvvnarpwcdybxdvcwjh`
|
|
34
|
+
- entitlement/buyer oracle: tabela `public.buyers`
|
|
35
|
+
- tabelas auxiliares relevantes:
|
|
36
|
+
- `public.buyer_validations`
|
|
37
|
+
- `public.licenses`
|
|
38
|
+
- `public.activations`
|
|
39
|
+
|
|
40
|
+
**Regra:** para operações de acesso AIOX-Pro, não gastar tempo redescobrindo projeto. Começar direto deste contexto.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## What We Already Learned In Practice
|
|
45
|
+
|
|
46
|
+
Este fluxo já foi executado manualmente e os aprendizados abaixo devem ser tratados como conhecimento operacional consolidado:
|
|
47
|
+
|
|
48
|
+
- `POST /api/v1/auth/check-email` é o pré-check oficial do backend
|
|
49
|
+
- ele retorna `isBuyer` e `hasAccount`
|
|
50
|
+
- ele deve ser o primeiro oracle de estado do usuário
|
|
51
|
+
|
|
52
|
+
- `POST /api/v1/auth/login` é o segundo oracle
|
|
53
|
+
- se retornar `EMAIL_NOT_VERIFIED`, o problema é confirmação de e-mail
|
|
54
|
+
- se retornar `INVALID_CREDENTIALS`, o problema é senha
|
|
55
|
+
- se retornar `200`, auth está funcional
|
|
56
|
+
|
|
57
|
+
- no projeto `evvvnarpwcdybxdvcwjh`, o login real depende do Supabase Auth
|
|
58
|
+
|
|
59
|
+
- o entitlement Pro não vem de `public.licenses`
|
|
60
|
+
- o oracle operacional para buyer é `public.buyers`
|
|
61
|
+
- se `buyers` não tiver o e-mail ativo, `check-email` não sobe `isBuyer`
|
|
62
|
+
|
|
63
|
+
- `public.licenses` e `public.activations` são importantes para licença e máquinas
|
|
64
|
+
- mas não são o primeiro write para “liberar acesso”
|
|
65
|
+
|
|
66
|
+
- não é necessário ativar licença em máquina para concluir onboarding/access ops
|
|
67
|
+
- ativação consome seat/estado operacional e deve ficar fora de tasks de provisionamento básico
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Operational Goal
|
|
72
|
+
|
|
73
|
+
Toda task derivada deste handoff deve responder claramente:
|
|
74
|
+
|
|
75
|
+
- o usuário já existe no auth?
|
|
76
|
+
- o e-mail está confirmado?
|
|
77
|
+
- o e-mail já está liberado em `buyers`?
|
|
78
|
+
- o fluxo final no serviço real funciona?
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Known Endpoints
|
|
83
|
+
|
|
84
|
+
Endpoints do serviço real que importam:
|
|
85
|
+
|
|
86
|
+
- `POST /api/v1/auth/check-email`
|
|
87
|
+
- `POST /api/v1/auth/signup`
|
|
88
|
+
- `POST /api/v1/auth/login`
|
|
89
|
+
- `POST /api/v1/auth/activate-pro`
|
|
90
|
+
- `POST /api/v1/auth/request-reset`
|
|
91
|
+
- `POST /api/v1/auth/resend-verification`
|
|
92
|
+
|
|
93
|
+
UI/flow auxiliar:
|
|
94
|
+
|
|
95
|
+
- reset de senha: `https://aiox-license-server.vercel.app/reset-password`
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Endpoint Semantics
|
|
100
|
+
|
|
101
|
+
### `POST /api/v1/auth/check-email`
|
|
102
|
+
|
|
103
|
+
Usar para classificar o caso antes de qualquer write.
|
|
104
|
+
|
|
105
|
+
Resposta de interesse:
|
|
106
|
+
|
|
107
|
+
- `isBuyer: boolean`
|
|
108
|
+
- `hasAccount: boolean`
|
|
109
|
+
- `email`
|
|
110
|
+
|
|
111
|
+
Interpretação:
|
|
112
|
+
|
|
113
|
+
- `isBuyer=false`, `hasAccount=false`
|
|
114
|
+
- falta conta e falta entitlement
|
|
115
|
+
- `isBuyer=false`, `hasAccount=true`
|
|
116
|
+
- conta existe, falta buyer
|
|
117
|
+
- `isBuyer=true`, `hasAccount=false`
|
|
118
|
+
- caso inconsistente ou migração parcial; investigar auth
|
|
119
|
+
- `isBuyer=true`, `hasAccount=true`
|
|
120
|
+
- provisioning quase completo; validar login
|
|
121
|
+
|
|
122
|
+
### `POST /api/v1/auth/signup`
|
|
123
|
+
|
|
124
|
+
Usar somente quando `hasAccount=false`.
|
|
125
|
+
|
|
126
|
+
Saída útil:
|
|
127
|
+
|
|
128
|
+
- `userId`
|
|
129
|
+
- `message`
|
|
130
|
+
|
|
131
|
+
### `POST /api/v1/auth/login`
|
|
132
|
+
|
|
133
|
+
Usar para validar se o usuário consegue de fato entrar.
|
|
134
|
+
|
|
135
|
+
Saídas/erros úteis:
|
|
136
|
+
|
|
137
|
+
- `200` com `accessToken`, `userId`, `emailVerified`
|
|
138
|
+
- `EMAIL_NOT_VERIFIED`
|
|
139
|
+
- `INVALID_CREDENTIALS`
|
|
140
|
+
|
|
141
|
+
### `POST /api/v1/auth/request-reset`
|
|
142
|
+
|
|
143
|
+
Usar para recovery padrão quando não for desejável reset manual por admin.
|
|
144
|
+
|
|
145
|
+
### `POST /api/v1/auth/resend-verification`
|
|
146
|
+
|
|
147
|
+
Usar quando a conta existe mas ainda depende do inbox do usuário.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Tables That Matter
|
|
152
|
+
|
|
153
|
+
### `public.buyers`
|
|
154
|
+
|
|
155
|
+
Oracle de entitlement Pro.
|
|
156
|
+
|
|
157
|
+
Campos relevantes:
|
|
158
|
+
|
|
159
|
+
- `email`
|
|
160
|
+
- `source`
|
|
161
|
+
- `purchased_at`
|
|
162
|
+
- `is_active`
|
|
163
|
+
- `metadata`
|
|
164
|
+
|
|
165
|
+
Regra prática:
|
|
166
|
+
|
|
167
|
+
- se o e-mail não está ativo em `buyers`, `check-email` não vai retornar `isBuyer: true`
|
|
168
|
+
- para “liberar acesso Pro”, este é o write primário
|
|
169
|
+
|
|
170
|
+
### `public.buyer_validations`
|
|
171
|
+
|
|
172
|
+
Cache/registro de validação de buyer por usuário autenticado.
|
|
173
|
+
|
|
174
|
+
Campos relevantes:
|
|
175
|
+
|
|
176
|
+
- `user_id`
|
|
177
|
+
- `email`
|
|
178
|
+
- `is_valid`
|
|
179
|
+
- `validated_at`
|
|
180
|
+
- `expires_at`
|
|
181
|
+
|
|
182
|
+
Regra prática:
|
|
183
|
+
|
|
184
|
+
- é tabela de apoio/cache
|
|
185
|
+
- não é o primeiro write para grant manual
|
|
186
|
+
- pode ser inspecionada em diagnóstico, mas o provisioning deve preferir `buyers`
|
|
187
|
+
|
|
188
|
+
### `public.licenses`
|
|
189
|
+
|
|
190
|
+
Licenças emitidas pelo backend.
|
|
191
|
+
|
|
192
|
+
Campos relevantes:
|
|
193
|
+
|
|
194
|
+
- `key`
|
|
195
|
+
- `customer_email`
|
|
196
|
+
- `features`
|
|
197
|
+
- `max_seats`
|
|
198
|
+
- `expires_at`
|
|
199
|
+
- `user_id`
|
|
200
|
+
|
|
201
|
+
Regra prática:
|
|
202
|
+
|
|
203
|
+
- relevante para emissão/licença existente
|
|
204
|
+
- não usar como primeiro mecanismo de grant manual de acesso
|
|
205
|
+
|
|
206
|
+
### `public.activations`
|
|
207
|
+
|
|
208
|
+
Ativações por máquina.
|
|
209
|
+
|
|
210
|
+
Campos relevantes:
|
|
211
|
+
|
|
212
|
+
- `license_id`
|
|
213
|
+
- `machine_id`
|
|
214
|
+
- `activated_at`
|
|
215
|
+
- `deactivated_at`
|
|
216
|
+
|
|
217
|
+
Regra prática:
|
|
218
|
+
|
|
219
|
+
- só entra em cena quando o problema é ativação/seat/machine lifecycle
|
|
220
|
+
- não é etapa padrão de criar acesso ou reset de senha
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
## Non-Negotiable Rules
|
|
225
|
+
|
|
226
|
+
- não redescobrir projeto Supabase para AIOX-Pro access ops
|
|
227
|
+
- não escrever em `full-agent` para resolver licensing
|
|
228
|
+
- não inferir schema diferente do que já está confirmado acima
|
|
229
|
+
- não encerrar tarefa sem validar no serviço real
|
|
230
|
+
- não expor `service_role`, `anon`, JWT, reset token ou access token
|
|
231
|
+
- não consumir seat/activation sem necessidade explícita
|
|
232
|
+
- não escrever em `licenses` para resolver um caso que é apenas buyer/auth
|
|
233
|
+
- não usar `buyer_validations` como substitute de `buyers`
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## Mandatory Diagnostic Order
|
|
238
|
+
|
|
239
|
+
Toda task deve seguir esta ordem, mesmo quando parecer óbvio o que está errado:
|
|
240
|
+
|
|
241
|
+
1. `check-email`
|
|
242
|
+
2. `login` se houver senha (read-only, classifica auth rapidamente)
|
|
243
|
+
3. `auth admin` por e-mail
|
|
244
|
+
4. `buyers` por e-mail
|
|
245
|
+
5. `buyer_validations` apenas se houver dúvida de cache/estado intermediário
|
|
246
|
+
6. `licenses` por `customer_email` apenas se o problema incluir licença
|
|
247
|
+
7. `activations` apenas se o problema incluir máquina/seat
|
|
248
|
+
|
|
249
|
+
> Esta ordem é a mesma da seção [Better Triage Order In Practice](#better-triage-order-in-practice) abaixo — única lista canônica. `check-email + login` classifica a maioria dos casos sem write.
|
|
250
|
+
|
|
251
|
+
Justificativa:
|
|
252
|
+
|
|
253
|
+
- esta ordem minimiza writes
|
|
254
|
+
- evita tocar licença quando o problema é apenas auth
|
|
255
|
+
- evita tocar auth quando o problema é apenas buyer
|
|
256
|
+
- evita consumir seat durante suporte básico
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Decision Tree
|
|
261
|
+
|
|
262
|
+
### Case A
|
|
263
|
+
|
|
264
|
+
`check-email => isBuyer=false, hasAccount=false`
|
|
265
|
+
|
|
266
|
+
Fazer:
|
|
267
|
+
|
|
268
|
+
1. `signup`
|
|
269
|
+
2. confirmar e-mail por admin se acesso imediato for necessário
|
|
270
|
+
3. inserir `buyers`
|
|
271
|
+
4. revalidar `check-email`
|
|
272
|
+
5. validar `login`
|
|
273
|
+
|
|
274
|
+
### Case B
|
|
275
|
+
|
|
276
|
+
`check-email => isBuyer=false, hasAccount=true`
|
|
277
|
+
|
|
278
|
+
Fazer:
|
|
279
|
+
|
|
280
|
+
1. localizar auth user
|
|
281
|
+
2. inserir `buyers` se ausente
|
|
282
|
+
3. se login falhar por `EMAIL_NOT_VERIFIED`, confirmar e-mail por admin ou reenviar verificação
|
|
283
|
+
4. revalidar `check-email`
|
|
284
|
+
5. validar `login`
|
|
285
|
+
|
|
286
|
+
### Case C
|
|
287
|
+
|
|
288
|
+
`check-email => isBuyer=true, hasAccount=true`, mas login falha por `EMAIL_NOT_VERIFIED`
|
|
289
|
+
|
|
290
|
+
Fazer:
|
|
291
|
+
|
|
292
|
+
1. confirmar e-mail por admin ou reenviar verificação
|
|
293
|
+
2. revalidar `login`
|
|
294
|
+
|
|
295
|
+
### Case D
|
|
296
|
+
|
|
297
|
+
`check-email => isBuyer=true, hasAccount=true`, mas login falha por `INVALID_CREDENTIALS`
|
|
298
|
+
|
|
299
|
+
Fazer:
|
|
300
|
+
|
|
301
|
+
1. `request-reset` se o fluxo for self-service
|
|
302
|
+
2. ou update manual de senha por admin se o suporte precisar entregar senha provisória
|
|
303
|
+
3. validar `login`
|
|
304
|
+
|
|
305
|
+
### Case E
|
|
306
|
+
|
|
307
|
+
`check-email => isBuyer=true, hasAccount=false`
|
|
308
|
+
|
|
309
|
+
Fazer:
|
|
310
|
+
|
|
311
|
+
1. tratar como estado inconsistente
|
|
312
|
+
2. inspecionar auth admin
|
|
313
|
+
3. criar conta somente se confirmar ausência de user
|
|
314
|
+
4. não tocar licença antes de resolver auth
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## Standard Validation Sequence
|
|
319
|
+
|
|
320
|
+
Toda task deve terminar com esta sequência:
|
|
321
|
+
|
|
322
|
+
1. validar `check-email`
|
|
323
|
+
2. validar `login` se houver senha conhecida
|
|
324
|
+
3. só validar `activate-pro` se o objetivo da task for ativação real em máquina
|
|
325
|
+
|
|
326
|
+
Estados esperados:
|
|
327
|
+
|
|
328
|
+
- acesso liberado:
|
|
329
|
+
- `isBuyer: true`
|
|
330
|
+
- `hasAccount: true`
|
|
331
|
+
- login funcionando:
|
|
332
|
+
- status `200`
|
|
333
|
+
- `emailVerified: true`
|
|
334
|
+
|
|
335
|
+
Se a task não consegue provar esses estados, ela não está concluída.
|
|
336
|
+
|
|
337
|
+
---
|
|
338
|
+
|
|
339
|
+
## Evidence Pack Required
|
|
340
|
+
|
|
341
|
+
Toda execução operacional deve sair com um pacote mínimo de evidências:
|
|
342
|
+
|
|
343
|
+
- resultado inicial de `check-email`
|
|
344
|
+
- existência ou ausência do usuário no auth
|
|
345
|
+
- existência ou ausência do e-mail em `buyers`
|
|
346
|
+
- writes executados
|
|
347
|
+
- resultado final de `check-email`
|
|
348
|
+
- resultado final de `login`, se aplicável
|
|
349
|
+
|
|
350
|
+
Formato esperado do resumo:
|
|
351
|
+
|
|
352
|
+
- `initial_check`
|
|
353
|
+
- `auth_state`
|
|
354
|
+
- `buyer_state`
|
|
355
|
+
- `writes`
|
|
356
|
+
- `final_check`
|
|
357
|
+
- `final_login`
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## Playbook 1: Criar Novo Acesso Pro
|
|
362
|
+
|
|
363
|
+
### Use When
|
|
364
|
+
|
|
365
|
+
- o e-mail ainda não tem conta
|
|
366
|
+
- o e-mail precisa ganhar acesso Pro
|
|
367
|
+
- há senha inicial definida para onboarding/manual setup
|
|
368
|
+
|
|
369
|
+
### Inputs
|
|
370
|
+
|
|
371
|
+
- `email`
|
|
372
|
+
- `password`
|
|
373
|
+
- origem da liberação, ex.: `manual`
|
|
374
|
+
- motivo operacional
|
|
375
|
+
|
|
376
|
+
### Steps
|
|
377
|
+
|
|
378
|
+
1. checar `POST /api/v1/auth/check-email`
|
|
379
|
+
2. se `hasAccount: false`, criar conta com `signup`
|
|
380
|
+
3. localizar usuário no `auth admin`
|
|
381
|
+
4. confirmar e-mail por admin se a operação exigir acesso imediato
|
|
382
|
+
5. verificar se existe registro em `public.buyers`
|
|
383
|
+
6. se não existir, inserir buyer ativo
|
|
384
|
+
7. revalidar `check-email`
|
|
385
|
+
8. validar `login`
|
|
386
|
+
|
|
387
|
+
### Writes Allowed
|
|
388
|
+
|
|
389
|
+
- criar `auth user`
|
|
390
|
+
- inserir linha em `buyers`
|
|
391
|
+
- update admin de confirmação de e-mail
|
|
392
|
+
|
|
393
|
+
### Writes Not Allowed
|
|
394
|
+
|
|
395
|
+
- criar activation
|
|
396
|
+
- inventar linha em `licenses`
|
|
397
|
+
- alterar outras tabelas fora do fluxo
|
|
398
|
+
|
|
399
|
+
### Success Criteria
|
|
400
|
+
|
|
401
|
+
- `isBuyer: true`
|
|
402
|
+
- `hasAccount: true`
|
|
403
|
+
- `login` retorna `200`
|
|
404
|
+
- `emailVerified: true`
|
|
405
|
+
|
|
406
|
+
### Minimal Data Write
|
|
407
|
+
|
|
408
|
+
- `auth user`
|
|
409
|
+
- `public.buyers`
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## Playbook 2: Liberar Pro Para Conta Já Existente
|
|
414
|
+
|
|
415
|
+
### Use When
|
|
416
|
+
|
|
417
|
+
- o usuário já tem conta
|
|
418
|
+
- o problema é só falta de entitlement
|
|
419
|
+
|
|
420
|
+
### Steps
|
|
421
|
+
|
|
422
|
+
1. checar `POST /api/v1/auth/check-email`
|
|
423
|
+
2. confirmar que `hasAccount: true`
|
|
424
|
+
3. verificar `public.buyers` por e-mail
|
|
425
|
+
4. se ausente, inserir buyer ativo
|
|
426
|
+
5. revalidar `check-email`
|
|
427
|
+
6. validar `login` se a senha for conhecida
|
|
428
|
+
|
|
429
|
+
### Writes Allowed
|
|
430
|
+
|
|
431
|
+
- inserir ou corrigir `buyers`
|
|
432
|
+
- update admin de confirmação de e-mail, se necessário para destravar login
|
|
433
|
+
|
|
434
|
+
### Success Criteria
|
|
435
|
+
|
|
436
|
+
- `isBuyer: true`
|
|
437
|
+
- conta existente preservada
|
|
438
|
+
- nenhum write extra além de `buyers`, salvo necessidade explícita
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Playbook 3: Reenviar Verificação de E-mail
|
|
443
|
+
|
|
444
|
+
### Use When
|
|
445
|
+
|
|
446
|
+
- a conta existe
|
|
447
|
+
- o login falha por e-mail não confirmado
|
|
448
|
+
- não é desejável confirmar por admin imediatamente
|
|
449
|
+
|
|
450
|
+
### Steps
|
|
451
|
+
|
|
452
|
+
1. confirmar que a conta existe
|
|
453
|
+
2. chamar `POST /api/v1/auth/resend-verification`
|
|
454
|
+
3. registrar que o usuário precisa abrir o link recebido
|
|
455
|
+
4. se a operação exigir liberação imediata, usar o Playbook 4
|
|
456
|
+
|
|
457
|
+
### Output Contract
|
|
458
|
+
|
|
459
|
+
- informar explicitamente se ainda há dependência de ação do usuário
|
|
460
|
+
- não reportar “acesso resolvido” se ainda depende do inbox
|
|
461
|
+
|
|
462
|
+
### Success Criteria
|
|
463
|
+
|
|
464
|
+
- endpoint responde com sucesso
|
|
465
|
+
- comunicação deixa claro que a ação do usuário ainda é necessária
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## Playbook 4: Confirmar E-mail Por Admin
|
|
470
|
+
|
|
471
|
+
### Use When
|
|
472
|
+
|
|
473
|
+
- existe conta
|
|
474
|
+
- e-mail não confirmado
|
|
475
|
+
- é necessário desbloquear acesso imediatamente sem esperar inbox
|
|
476
|
+
|
|
477
|
+
### Steps
|
|
478
|
+
|
|
479
|
+
1. localizar o usuário no `auth admin`
|
|
480
|
+
2. aplicar update admin com `email_confirm: true`
|
|
481
|
+
3. revalidar login
|
|
482
|
+
|
|
483
|
+
### Why This Exists
|
|
484
|
+
|
|
485
|
+
- evita bloquear acesso imediato por dependência do inbox
|
|
486
|
+
- é o caminho de suporte quando a operação não pode esperar e-mail do usuário
|
|
487
|
+
|
|
488
|
+
### Success Criteria
|
|
489
|
+
|
|
490
|
+
- `email_confirmed_at` preenchido
|
|
491
|
+
- `login` retorna `200`
|
|
492
|
+
|
|
493
|
+
### Caution
|
|
494
|
+
|
|
495
|
+
- usar somente quando o processo permitir override administrativo
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
## Playbook 5: Reset de Senha
|
|
500
|
+
|
|
501
|
+
### Use When
|
|
502
|
+
|
|
503
|
+
- o usuário esqueceu a senha
|
|
504
|
+
- não é necessário impor uma senha manual por admin
|
|
505
|
+
|
|
506
|
+
### Steps
|
|
507
|
+
|
|
508
|
+
1. confirmar se a conta existe
|
|
509
|
+
2. chamar `POST /api/v1/auth/request-reset`
|
|
510
|
+
3. orientar uso de `https://aiox-license-server.vercel.app/reset-password`
|
|
511
|
+
4. não mudar entitlement durante reset
|
|
512
|
+
|
|
513
|
+
### Important Distinction
|
|
514
|
+
|
|
515
|
+
- reset de senha não corrige buyer
|
|
516
|
+
- reset de senha não corrige e-mail não confirmado
|
|
517
|
+
- reset de senha é só para credenciais
|
|
518
|
+
|
|
519
|
+
### Success Criteria
|
|
520
|
+
|
|
521
|
+
- request-reset responde com sucesso
|
|
522
|
+
- usuário consegue seguir o fluxo de recuperação
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## Playbook 6: Definir Nova Senha Manualmente
|
|
527
|
+
|
|
528
|
+
### Use When
|
|
529
|
+
|
|
530
|
+
- suporte precisa definir uma senha inicial ou temporária
|
|
531
|
+
- a operação é administrativa e explícita
|
|
532
|
+
|
|
533
|
+
### Steps
|
|
534
|
+
|
|
535
|
+
1. localizar usuário no `auth admin`
|
|
536
|
+
2. atualizar a senha por admin
|
|
537
|
+
3. validar `login` com a nova senha
|
|
538
|
+
|
|
539
|
+
### When Preferred Over Request Reset
|
|
540
|
+
|
|
541
|
+
- onboarding assistido
|
|
542
|
+
- suporte executivo/manual
|
|
543
|
+
- ambiente onde a senha inicial precisa ser entregue explicitamente
|
|
544
|
+
|
|
545
|
+
### Success Criteria
|
|
546
|
+
|
|
547
|
+
- login com a nova senha funciona
|
|
548
|
+
- nenhuma outra tabela é alterada sem necessidade
|
|
549
|
+
|
|
550
|
+
---
|
|
551
|
+
|
|
552
|
+
## Playbook 7: Diagnosticar Falha de Acesso
|
|
553
|
+
|
|
554
|
+
### Use When
|
|
555
|
+
|
|
556
|
+
- o usuário diz “não consigo entrar”
|
|
557
|
+
- o acesso Pro não ativa
|
|
558
|
+
- não está claro se o problema é auth, buyer ou licença
|
|
559
|
+
|
|
560
|
+
### Diagnostic Order
|
|
561
|
+
|
|
562
|
+
1. `check-email`
|
|
563
|
+
2. `auth admin users` por e-mail
|
|
564
|
+
3. `buyers` por e-mail
|
|
565
|
+
4. `login`
|
|
566
|
+
5. `licenses` por `customer_email`
|
|
567
|
+
6. `buyer_validations` por `email` ou `user_id`
|
|
568
|
+
|
|
569
|
+
### Better Triage Order In Practice
|
|
570
|
+
|
|
571
|
+
Use esta priorização:
|
|
572
|
+
|
|
573
|
+
1. `check-email`
|
|
574
|
+
2. `login`
|
|
575
|
+
3. `auth admin`
|
|
576
|
+
4. `buyers`
|
|
577
|
+
5. `buyer_validations`
|
|
578
|
+
6. `licenses`
|
|
579
|
+
7. `activations`
|
|
580
|
+
|
|
581
|
+
Motivo:
|
|
582
|
+
|
|
583
|
+
- `check-email + login` já classificam a maioria dos casos sem write
|
|
584
|
+
|
|
585
|
+
### Interpretation
|
|
586
|
+
|
|
587
|
+
- `isBuyer: false` e `hasAccount: false`
|
|
588
|
+
- falta conta e falta entitlement
|
|
589
|
+
- `isBuyer: false` e `hasAccount: true`
|
|
590
|
+
- conta existe, falta buyer
|
|
591
|
+
- `isBuyer: true` e login falha por `EMAIL_NOT_VERIFIED`
|
|
592
|
+
- buyer ok, falta confirmação de e-mail
|
|
593
|
+
- `isBuyer: true` e login falha por credenciais
|
|
594
|
+
- entitlement ok, problema é senha
|
|
595
|
+
|
|
596
|
+
- `isBuyer: true`, login ok, ativação falha
|
|
597
|
+
- sair do escopo de access ops e abrir investigação de licença/activation
|
|
598
|
+
|
|
599
|
+
---
|
|
600
|
+
|
|
601
|
+
## Minimal Command/Action Contract For Tasks
|
|
602
|
+
|
|
603
|
+
Uma task boa para o squad-creator não deve pedir “investigar como fazer”.
|
|
604
|
+
|
|
605
|
+
Ela deve declarar explicitamente:
|
|
606
|
+
|
|
607
|
+
1. quais leituras fará primeiro
|
|
608
|
+
2. qual write mínimo fará em cada ramo da árvore de decisão
|
|
609
|
+
3. qual validação final provará o sucesso
|
|
610
|
+
4. quais writes estão proibidos naquele caso
|
|
611
|
+
|
|
612
|
+
Exemplo de contrato ruim:
|
|
613
|
+
|
|
614
|
+
- “verificar Supabase e resolver acesso”
|
|
615
|
+
|
|
616
|
+
Exemplo de contrato bom:
|
|
617
|
+
|
|
618
|
+
- “rodar check-email; se hasAccount=false criar auth user; se buyer ausente inserir em buyers; confirmar e-mail por admin apenas se acesso imediato for necessário; validar check-email e login”
|
|
619
|
+
|
|
620
|
+
---
|
|
621
|
+
|
|
622
|
+
## Expected Task Outputs
|
|
623
|
+
|
|
624
|
+
Toda task gerada a partir deste handoff deve devolver:
|
|
625
|
+
|
|
626
|
+
- ação executada
|
|
627
|
+
- e-mail alvo
|
|
628
|
+
- writes realizados
|
|
629
|
+
- estado final de `check-email`
|
|
630
|
+
- estado final de `login`, se aplicável
|
|
631
|
+
- pendências restantes, se houver
|
|
632
|
+
|
|
633
|
+
Também deve devolver:
|
|
634
|
+
|
|
635
|
+
- classificação do caso na árvore de decisão
|
|
636
|
+
- motivo para cada write executado
|
|
637
|
+
- confirmação explícita de que nenhuma activation/seat foi consumida, salvo pedido explícito
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
641
|
+
## Squad-Creator Task Briefs
|
|
642
|
+
|
|
643
|
+
### Brief A: Criar Novo Acesso AIOX-Pro
|
|
644
|
+
|
|
645
|
+
```md
|
|
646
|
+
Criar task operacional para criar um novo acesso AIOX-Pro no backend de licensing já conhecido.
|
|
647
|
+
|
|
648
|
+
Contexto fixo:
|
|
649
|
+
- serviço: https://aiox-license-server.vercel.app
|
|
650
|
+
- projeto Supabase: evvvnarpwcdybxdvcwjh
|
|
651
|
+
- oracle de buyer: public.buyers
|
|
652
|
+
|
|
653
|
+
A task deve:
|
|
654
|
+
- rodar check-email e classificar o caso
|
|
655
|
+
- receber email e senha inicial
|
|
656
|
+
- criar conta se não existir
|
|
657
|
+
- confirmar email por admin quando necessário para liberação imediata
|
|
658
|
+
- inserir buyer ativo se ausente
|
|
659
|
+
- validar via check-email e login
|
|
660
|
+
- listar writes permitidos e proibidos
|
|
661
|
+
|
|
662
|
+
Done:
|
|
663
|
+
- isBuyer=true
|
|
664
|
+
- hasAccount=true
|
|
665
|
+
- login 200
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
### Brief B: Liberar Pro Para Conta Existente
|
|
669
|
+
|
|
670
|
+
```md
|
|
671
|
+
Criar task operacional para liberar entitlement Pro para uma conta já existente no AIOX-Pro.
|
|
672
|
+
|
|
673
|
+
Contexto fixo:
|
|
674
|
+
- serviço: https://aiox-license-server.vercel.app
|
|
675
|
+
- projeto Supabase: evvvnarpwcdybxdvcwjh
|
|
676
|
+
- tabela de entitlement: public.buyers
|
|
677
|
+
|
|
678
|
+
A task deve:
|
|
679
|
+
- confirmar existência da conta
|
|
680
|
+
- inserir buyer ativo apenas se ausente
|
|
681
|
+
- confirmar e-mail por admin apenas se login falhar por não verificado
|
|
682
|
+
- revalidar check-email
|
|
683
|
+
- validar login se houver senha fornecida
|
|
684
|
+
|
|
685
|
+
Done:
|
|
686
|
+
- isBuyer=true
|
|
687
|
+
- conta preservada
|
|
688
|
+
```
|
|
689
|
+
|
|
690
|
+
### Brief C: Reenviar Verificação
|
|
691
|
+
|
|
692
|
+
```md
|
|
693
|
+
Criar task operacional para reenviar verificação de email do AIOX-Pro.
|
|
694
|
+
|
|
695
|
+
Contexto fixo:
|
|
696
|
+
- serviço: https://aiox-license-server.vercel.app
|
|
697
|
+
- projeto Supabase: evvvnarpwcdybxdvcwjh
|
|
698
|
+
|
|
699
|
+
A task deve:
|
|
700
|
+
- confirmar que a conta existe
|
|
701
|
+
- chamar resend-verification
|
|
702
|
+
- reportar claramente se ainda depende de ação do usuário
|
|
703
|
+
- proibir conclusão “resolvido” sem prova de login, salvo se o objetivo explícito for apenas reenvio
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
### Brief D: Confirmar E-mail Por Admin
|
|
707
|
+
|
|
708
|
+
```md
|
|
709
|
+
Criar task operacional para confirmar por admin o email de uma conta do AIOX-Pro.
|
|
710
|
+
|
|
711
|
+
Contexto fixo:
|
|
712
|
+
- auth backend: Supabase Auth do projeto evvvnarpwcdybxdvcwjh
|
|
713
|
+
|
|
714
|
+
A task deve:
|
|
715
|
+
- localizar user por email
|
|
716
|
+
- aplicar email_confirm=true
|
|
717
|
+
- validar login após a confirmação
|
|
718
|
+
- explicitar que não deve tocar buyers/licenças se o problema for apenas verificação
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
### Brief E: Reset de Senha
|
|
722
|
+
|
|
723
|
+
```md
|
|
724
|
+
Criar task operacional para reset de senha do AIOX-Pro.
|
|
725
|
+
|
|
726
|
+
Contexto fixo:
|
|
727
|
+
- serviço: https://aiox-license-server.vercel.app
|
|
728
|
+
- página de recovery: https://aiox-license-server.vercel.app/reset-password
|
|
729
|
+
|
|
730
|
+
A task deve:
|
|
731
|
+
- confirmar existência da conta
|
|
732
|
+
- chamar request-reset
|
|
733
|
+
- reportar o próximo passo para o usuário
|
|
734
|
+
- explicitar que reset não resolve buyer nem verificação de e-mail
|
|
735
|
+
```
|
|
736
|
+
|
|
737
|
+
### Brief F: Diagnóstico de Falha de Acesso
|
|
738
|
+
|
|
739
|
+
```md
|
|
740
|
+
Criar task operacional para diagnosticar por que um usuário não consegue acessar o AIOX-Pro.
|
|
741
|
+
|
|
742
|
+
Contexto fixo:
|
|
743
|
+
- serviço: https://aiox-license-server.vercel.app
|
|
744
|
+
- projeto Supabase: evvvnarpwcdybxdvcwjh
|
|
745
|
+
- tabelas relevantes: buyers, buyer_validations, licenses, activations
|
|
746
|
+
|
|
747
|
+
A task deve:
|
|
748
|
+
- rodar check-email
|
|
749
|
+
- testar login cedo para classificar o erro
|
|
750
|
+
- verificar auth user
|
|
751
|
+
- verificar buyers
|
|
752
|
+
- classificar a falha em: falta conta, falta buyer, email não confirmado, senha inválida ou problema de licença
|
|
753
|
+
- listar o próximo playbook exato a executar
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
---
|
|
757
|
+
|
|
758
|
+
## Definition Of Done
|
|
759
|
+
|
|
760
|
+
- task parte do contexto fixo correto
|
|
761
|
+
- task não perde tempo redescobrindo projeto/licensing
|
|
762
|
+
- task executa apenas o playbook relevante
|
|
763
|
+
- task valida no serviço real
|
|
764
|
+
- resultado final fica objetivo e auditável
|
|
765
|
+
|
|
766
|
+
---
|
|
767
|
+
|
|
768
|
+
_Last Updated: 2026-04-19 | AIOX Ops_
|