Compare commits
2 Commits
fix/visual
...
8ae582455c
| Author | SHA1 | Date | |
|---|---|---|---|
| 8ae582455c | |||
| 75ab0b0ff5 |
18
AGENTS.md
18
AGENTS.md
@@ -41,21 +41,3 @@ History follows Conventional Commit-style subjects, for example `feat: Fase 0
|
||||
## Security & Configuration
|
||||
|
||||
Copy `.env.example`; never commit secrets or production credentials. Development seed credentials are local-only. Validate uploads and authorization through Laravel policies, and run `composer security-audit` after dependency changes.
|
||||
|
||||
## Design Context
|
||||
|
||||
Amare: refined, humane, precise — Heritage Editorial (see `.impeccable.md`). Trust-first, both private + corporate audiences. Never generic wedding decor (hearts/gold/script) or AI-slop. Real proof only. For design skills, read `.impeccable.md` at project root.
|
||||
|
||||
## Agent skills
|
||||
|
||||
### Issue tracker
|
||||
|
||||
Issues live in Linear, driven through the Linear MCP tools. See `docs/agents/issue-tracker.md`.
|
||||
|
||||
### Triage labels
|
||||
|
||||
Default vocabulary: `needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human`, `wontfix`. See `docs/agents/triage-labels.md`.
|
||||
|
||||
### Domain docs
|
||||
|
||||
Single-context: `CONTEXT.md` at root + `docs/adr/`. See `docs/agents/domain.md`.
|
||||
|
||||
@@ -14,11 +14,7 @@ services:
|
||||
restart: "no"
|
||||
env_file:
|
||||
- .env
|
||||
command: >
|
||||
sh -c
|
||||
"php artisan migrate --force --no-interaction
|
||||
&& php artisan db:seed --class=ContentSeeder --force --no-interaction
|
||||
&& php artisan media:generate-variants --force"
|
||||
command: ["sh", "-c", "php artisan migrate --force --no-interaction && php artisan db:seed --class=ContentSeeder --force; php artisan media:generate-variants --force; true"]
|
||||
networks:
|
||||
- dokploy-network
|
||||
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
# Domain Docs
|
||||
|
||||
How the engineering skills should consume this repo's domain documentation when exploring the codebase.
|
||||
|
||||
## Before exploring, read these
|
||||
|
||||
- **`CONTEXT.md`** at the repo root, or
|
||||
- **`CONTEXT-MAP.md`** at the repo root if it exists — it points at one `CONTEXT.md` per context. Read each one relevant to the topic.
|
||||
- **`docs/adr/`** — read ADRs that touch the area you're about to work in. In multi-context repos, also check `src/<context>/docs/adr/` for context-scoped decisions.
|
||||
|
||||
If any of these files don't exist, **proceed silently**. Don't flag their absence; don't suggest creating them upfront. The `/domain-modeling` skill (reached via `/grill-with-docs` and `/improve-codebase-architecture`) creates them lazily when terms or decisions actually get resolved.
|
||||
|
||||
## File structure
|
||||
|
||||
Single-context repo (most repos):
|
||||
|
||||
```
|
||||
/
|
||||
├── CONTEXT.md
|
||||
├── docs/adr/
|
||||
│ ├── 0001-event-sourced-orders.md
|
||||
│ └── 0002-postgres-for-write-model.md
|
||||
└── src/
|
||||
```
|
||||
|
||||
Multi-context repo (presence of `CONTEXT-MAP.md` at the root):
|
||||
|
||||
```
|
||||
/
|
||||
├── CONTEXT-MAP.md
|
||||
├── docs/adr/ ← system-wide decisions
|
||||
└── src/
|
||||
├── ordering/
|
||||
│ ├── CONTEXT.md
|
||||
│ └── docs/adr/ ← context-specific decisions
|
||||
└── billing/
|
||||
├── CONTEXT.md
|
||||
└── docs/adr/
|
||||
```
|
||||
|
||||
## Use the glossary's vocabulary
|
||||
|
||||
When your output names a domain concept (in an issue title, a refactor proposal, a hypothesis, a test name), use the term as defined in `CONTEXT.md`. Don't drift to synonyms the glossary explicitly avoids.
|
||||
|
||||
If the concept you need isn't in the glossary yet, that's a signal — either you're inventing language the project doesn't use (reconsider) or there's a real gap (note it for `/domain-modeling`).
|
||||
|
||||
## Flag ADR conflicts
|
||||
|
||||
If your output contradicts an existing ADR, surface it explicitly rather than silently overriding:
|
||||
|
||||
> _Contradicts ADR-0007 (event-sourced orders) — but worth reopening because…_
|
||||
@@ -1,26 +0,0 @@
|
||||
# Issue tracker: Linear
|
||||
|
||||
Issues and specs for this repo live in Linear. Use the Linear MCP tools for all operations.
|
||||
|
||||
- **Workspace**: maneco-workspace (https://linear.app/maneco-workspace)
|
||||
- **Team**: Maneco-workspace
|
||||
- **Issue statuses**: Backlog, Todo, In Progress, Done, Canceled, Duplicate
|
||||
|
||||
## Conventions
|
||||
|
||||
- **Create an issue**: `save_issue` with `title`, `team` (`Maneco-workspace`), and markdown `description`. Assign via `assignee` ("me" for the current user).
|
||||
- **Read an issue**: `get_issue` by identifier (e.g. `LIN-123`).
|
||||
- **List issues**: `list_issues` filtered by `team`, `assignee`, `state`, or `project`.
|
||||
- **Comment on an issue**: `save_comment` with `issueId` and markdown `body`.
|
||||
- **Apply / remove labels**: `save_issue` with `labels` (replaces the full set).
|
||||
- **Move workflow state**: `save_issue` with `state` (e.g. `Todo`, `In Progress`, `Done`, `Canceled`).
|
||||
- **Link work**: `save_issue` with `project`, `cycle`, `parentId`, `blocks` / `blockedBy` (relations are append-only).
|
||||
- **Cross-link to a PR**: attach the PR URL via `save_issue` `links`.
|
||||
|
||||
## When a skill says "publish to the issue tracker"
|
||||
|
||||
Create a Linear issue with `save_issue` on team `Maneco-workspace`.
|
||||
|
||||
## When a skill says "fetch the relevant ticket"
|
||||
|
||||
Run `get_issue` on the identifier and read the description, state, labels, and assignee.
|
||||
@@ -1,15 +0,0 @@
|
||||
# Triage Labels
|
||||
|
||||
The skills speak in terms of five canonical triage roles. This file maps those roles to the actual label strings used in this repo's issue tracker.
|
||||
|
||||
| Label in mattpocock/skills | Label in our tracker | Meaning |
|
||||
| -------------------------- | -------------------- | ---------------------------------------- |
|
||||
| `needs-triage` | `needs-triage` | Maintainer needs to evaluate this issue |
|
||||
| `needs-info` | `needs-info` | Waiting on reporter for more information |
|
||||
| `ready-for-agent` | `ready-for-agent` | Fully specified, ready for an AFK agent |
|
||||
| `ready-for-human` | `ready-for-human` | Requires human implementation |
|
||||
| `wontfix` | `wontfix` | Will not be actioned |
|
||||
|
||||
When a skill mentions a role (e.g. "apply the AFK-ready triage label"), use the corresponding label string from this table.
|
||||
|
||||
Edit the right-hand column to match whatever vocabulary you actually use.
|
||||
92
tasks.md
92
tasks.md
@@ -1,19 +1,79 @@
|
||||
# Fix visual regression baselines (CI-parity)
|
||||
# Frontend Audit — Amare site
|
||||
|
||||
- [x] 1. Worktree `fix/visual-baselines-ci` a partir de `origin/main` (.worktrees/visual-baselines-ci @ 0aee15e)
|
||||
- [x] 2. Postgres `amare_test` up (amare-postgres reutilizado, DB criado)
|
||||
- [x] 3. Build `amare-app:ci` + container amare-web com env idêntica ao job browser (APP_FROZEN_NOW etc.) — /up ok
|
||||
- [x] 4. Build imagem amare-ci-runner (ubuntu:24.04 + PHP 8.4 + node 22 + playwright deps)
|
||||
- [x] 5. Regenerar 16 snapshots via `php artisan test --testsuite=Browser --update-snapshots` dentro do ci-runner (network host)
|
||||
- [x] 6. Verificar: re-run Browser suite verde (35/35)
|
||||
- [x] 7. Commit .snap, push, PR #24, CI verde; bump commonmark 2.9.0 p/ auditoria; merged
|
||||
## T0 — Baseline
|
||||
- [x] Rodar `composer quality` p/ registrar estado verde atual (110 passed após composer install)
|
||||
- [x] Registrado estado baseline; Lighthouse final consolidado no T6
|
||||
- [x] Registrar achados baseline (audit completo em frontend-audit.md + relatório subagent)
|
||||
|
||||
# PR #23 — cadência editorial à home (sync + merge)
|
||||
## T1 — Formulário de contato (e-mail, sem CRM)
|
||||
- [x] Form em /contato (campos, LGPD obrigatório)
|
||||
- [x] Rota POST /contato + validação + honeypot + throttle
|
||||
- [x] Anti duplo-envio, estados sucesso/erro/rede, preservação de dados
|
||||
- [x] E-mail via MAIL_MAILER (Resend prod / log local)
|
||||
- [x] A11y do form (labels, erros ligados)
|
||||
- [x] Testes feature + atualizar PublicPagesTest — Feature suite: 97 passed
|
||||
|
||||
- [x] 1. Reset worktree home-editorial-cadence p/ origin/feat/home-editorial-cadence (8ae5824, incl. reconcile)
|
||||
- [x] 2. Merge origin/main (PR #24): resolver conflitos home snaps (theirs); 14 snaps não-home via auto-merge
|
||||
- [x] 3. Rebuild amare-app:ci com código PR #23; container amare-web recriado
|
||||
- [x] 4. Regenerar home desktop/mobile snaps no ci-runner (--update-snapshots); commit d9751b1
|
||||
- [x] 5. Verificação: Browser suite 37 passed (156 assertions) — inclui HomeEditorialCadenceTest/MotionTest
|
||||
- [x] 6. Push; CI 5/5 verde (run 31230461189)
|
||||
- [x] 7. Merge squash PR #23 (commit 42b282c1); worktree/branch/remota limpos
|
||||
## T2 — A11y/navegação
|
||||
- [x] Menu mobile: Escape, retorno de foco, fallback sem-JS (app.js + noscript)
|
||||
- [x] Touch targets ≥44px (header, footer, CTAs, capítulos)
|
||||
- [x] Footer: ul/li + address
|
||||
|
||||
## T3 — SEO/metadados
|
||||
- [x] Títulos "Página · Amare" (PageMeta::withBrandSuffix)
|
||||
- [x] og:locale, og:site_name, Twitter cards
|
||||
- [x] Favicon real + link, theme-color
|
||||
- [x] Metadados corretos em 404/500 (PageMeta::forErrorPage)
|
||||
- [x] noindex fora de produção (robots meta condicional)
|
||||
|
||||
## T4 — Conteúdo/posicionamento
|
||||
- [x] Remover welcome.blade.php, home/cases, home/proof
|
||||
- [x] Dedup heading final-CTA vs h1 contato; dedup disclaimers
|
||||
- [x] CTA consistente mobile/desktop
|
||||
- [x] Corrigir copy "Em breve..." nas listas
|
||||
- [x] Rebalancear copy corporativo/social
|
||||
|
||||
## T5 — Performance
|
||||
- [x] fetchpriority + dimensões hero (LCP)
|
||||
- [x] Guarda CLS no media/image
|
||||
- [x] Cache manifest de fontes
|
||||
- [x] Escape JSON-LD
|
||||
|
||||
## T6 — Validação final
|
||||
- [x] pint, phpstan, testes unit/feature/architecture — `composer quality` verde (135 testes)
|
||||
- [x] Browser tests + visual regression (18 passaram; 8 baselines `.snap` atualizadas com `--update-snapshots`)
|
||||
- [x] Lighthouse final (home mobile: A11y 100, Best Practices 100, SEO 69 só por noindex intencional fora de prod; contato desktop: A11y 100, BP 100)
|
||||
- [x] E2E form: submit → sucesso role=status; 2 e-mails (novo briefing + confirmação) logados via MAIL_MAILER=log; fila drenada
|
||||
- [x] Mobile: sem overflow horizontal nas 7 rotas (390px); menu mobile abre/fecha + Escape + retorno de foco
|
||||
- [x] Relatório de entrega
|
||||
|
||||
## T7 — Hardening Public Blades
|
||||
|
||||
- [x] Chunk 1: CSS overflow resilience (`overflow-wrap` body + `[data-chapter-index]` wrap safety, browser test)
|
||||
- [x] Chunk 2: Hero + final-CTA fallbacks + `leading-tight` (TDD)
|
||||
- [x] Chunk 3a: Skip blank-quote testimonials (TDD)
|
||||
- [x] Chunk 3b: Guard empty `event_type` + `break-words` meta line (TDD)
|
||||
- [x] Chunk 4: Extend `PageMeta::forErrorPage` + branded 419/429/503 error views (TDD)
|
||||
- [x] Chunk 5: `app.js` defensive hardening — bfcache submit reset, "Enviando…" label swap, aria-busy, mobile-menu focus trap + Escape
|
||||
- [x] Chunk 6: Quality gates — Pint passed, PHPStan clean, 104 feature tests passed (587 assertions), Vite build succeeded
|
||||
|
||||
### Deviations from plan
|
||||
|
||||
- `PageMeta::forErrorPage` landed on `main` during implementation; rebased and extended it for 419/429/503.
|
||||
- Contact form landed on `main`; submit-state browser coverage was restored.
|
||||
- `event_type: null` violates NOT NULL column — test uses `''` instead (guard covers both).
|
||||
|
||||
# Browser CI Gate — estabilidade e diagnosticabilidade
|
||||
|
||||
## BG — Causa raiz
|
||||
- [x] Diagnosticar 3 runs: mismatch visual (8 testes), acessibilidade (1), timeout networkidle 5s + overflow real
|
||||
- [x] Reproduzir local: `waitForLoadState('networkidle')` fragil (conexões longas), default 5s
|
||||
- [x] Reproduzir warning `file_get_contents(.env)` em TODO teste (CI sem .env)
|
||||
|
||||
## BG — Fixes
|
||||
- [x] Helper `StableScreenshot` (tests/Support/): drop networkidle → readyState + fonts + settle
|
||||
- [x] Exportar PNGs standalone (diff/expected/actual) no mismatch — visíveis nos artifacts
|
||||
- [x] CI: `cp .env.example .env` nos jobs de teste; checkout/cache v5
|
||||
- [x] Gitignore tests/Browser/Screenshots
|
||||
- [x] Unit test MismatchScreenshotExporter; pint/phpstan/unit/feature verdes
|
||||
- [x] Push + PR + CI browser verde (PR #15 merge f09ea83, run 31098941038)
|
||||
- [x] Refresh baselines de CI se necessário (não necessário — browser passou com baselines atuais)
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user