Commit graph

2327 commits

Author SHA1 Message Date
Cursor Agent
eea2d9afa1
B84 — Ações rápidas na vertical Atividades (lista + detalhe)
Registra catálogo B84 no registry B79: Nova atividade e Planejar giro na
lista; wizards A1–A5 com ?municipio= no detalhe quando há município, mais
atalhos Editar/Tarefas/Atualizações. Context bridge no detalhe; drawer
omitido em /atividades/giros (compositor E13 já tem CTAs).

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-08-01 04:35:38 +00:00
Francisco Solla
82ca33c3d3
Merge pull request #79 from fsolla/cursor/disable-vercel-git-deploys
chore(ops): desliga deploys automáticos do Git no Vercel
2026-08-01 01:29:54 -03:00
Francisco Ignácio Fontoura Solla
2dff60f7ab chore(ops): desliga deploys automáticos do Git no Vercel
git.deploymentEnabled: false impede que pushes e PRs disparem deployments;
produção continua só via ci.yml → vercel deploy --prebuilt --prod.
2026-08-01 01:28:21 -03:00
Cursor Agent
3463389942
style: prettier registry 2026-08-01 04:22:25 +00:00
Cursor Agent
6f4402dab6
style: prettier 2026-08-01 04:21:25 +00:00
Cursor Agent
6030d42e2f
B80 — Ações rápidas em Municípios (lista + detalhe A1–A5)
Registra catálogo staff no drawer B79 para /campanha/municipios e
/campanha/municipios/[slug]: lista espelha Início (sem prefill); detalhe
prefill ?municipio= nos wizards A1–A5 e omite Ver esquecidos.

Closes #16

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-08-01 04:21:15 +00:00
Francisco Solla
a638561ce9
Merge pull request #74 from fsolla/cursor/pool-i17-70bc3fde-a9be
B81 — Ações rápidas — Territórios
2026-08-01 01:20:06 -03:00
Cursor Agent
09e76ec8cb
B81 — format 2026-08-01 04:10:16 +00:00
Cursor Agent
7f2ac29368
B81 — simplify: path constant, role cache, href parity test
Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-08-01 04:09:35 +00:00
Francisco Solla
e9be800cd5
Merge pull request #73 from fsolla/agent/cleanup-cutover-residue
chore — limpar resíduo do cutover stage
2026-08-01 01:08:31 -03:00
Cursor Agent
8c9eeaf273
B81 — register staff Início quick actions on /campanha/territorios
Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-08-01 04:06:22 +00:00
Francisco Ignácio Fontoura Solla
a7a3883bc2 chore: remove cutover residue (stage scripts, checklist, PR template)
Delete dead db:refresh:stage / agent:promote; mark CUTOVER done; drop
STAGE_DATABASE_URL checklist item that no longer applies.
2026-08-01 01:00:39 -03:00
Francisco Solla
e61e80b6dc
Merge pull request #72 from fsolla/cursor/agent-pr-automerge-safety-net-df16
OPS: Ready+auto-merge for all agent PRs (audit included)
2026-08-01 00:57:32 -03:00
Cursor Agent
b150644d21
OPS: Ready+auto-merge for all agent PRs including audit
Remove the engineering-audit artifact exception; add a GHA safety net
that marks cursor/* → main PRs Ready and arms auto-merge.
2026-08-01 03:55:56 +00:00
Francisco Solla
8de399b9bb
Merge pull request #71 from fsolla/cursor/agent-pr-ready-automerged-df16
fix(agents): PRs Ready + auto-merge também no Cloud (draft:false)
2026-08-01 00:52:38 -03:00
Cursor Agent
69aafbb219
fix(agents): alwaysApply Ready+auto-merge; Cloud must pass draft:false
agent-pr-workflow was correct but not alwaysApply, so Cloud agents
followed ManagePullRequest's draft default. Make the rule always-on,
document the ManagePullRequest path, and narrow the engineering-audit
"no auto-merge" exception to the audit sign-off PR only.
2026-08-01 03:51:08 +00:00
Francisco Solla
ffb2ab6042
Merge pull request #70 from fsolla/cursor/model-selection-grok-effort-df16
docs(agent-pool): /agent-pool status-first + confirmação antes de start
2026-08-01 00:49:50 -03:00
Cursor Agent
df76e70a8a
docs(agent-pool): invoke flow is status-first, confirm before start
Skill no longer reads as start-only: always emit pool status + eligible
queue with the next maxSlots highlighted; ask before start when off;
when already on, stay in session monitoring without auto-restart.
2026-08-01 03:48:19 +00:00
Francisco Solla
33c1f263eb
Merge pull request #69 from fsolla/cursor/model-selection-grok-effort-df16
fix(agent-pool): Grok effort slugs + banir -fast
2026-08-01 00:43:00 -03:00
Cursor Agent
18fe4f8e9b
fix(agent-pool): ban -fast model slugs
Never map or request fast=true. Slugs ending in -fast are stripped to
the base (with a warn); model-selection and the pool plan document the ban.
2026-08-01 03:34:35 +00:00
Cursor Agent
629364f3e4
fix(agent-pool): map Grok effort + Kimi reasoning slugs to Cloud API
cursor-grok-4.5-{low,medium,high}[-fast] and kimi-k3-low were falling
back to composer-2.5 against live /v1/models (grok-4.5 + effort,
kimi-k3 + reasoning). Teach resolvePoolModel the mapping, document
when to pick each Grok effort in model-selection, and align plan/work
skills.
2026-08-01 03:32:41 +00:00
Francisco Solla
009bcb732c
Merge pull request #68 from fsolla/cursor/pool-eligibility-triage-df16
fix(agent-pool): fila elegível não zera por falta de `state` no JSON
2026-08-01 00:24:42 -03:00
Cursor Agent
d93a0c361f
fix(agent-pool): include issue state in claim queue JSON
isAutonomousClaimable requires state === OPEN; omitting it from gh
--json made every ready issue look not-open and zeroed the pool queue.

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-08-01 03:20:27 +00:00
Francisco Solla
08c38f5724
Merge pull request #67 from fsolla/agent/gitignore-playwright-aider
chore — gitignore Playwright + Aider local files
2026-08-01 00:06:23 -03:00
Francisco Ignácio Fontoura Solla
96dc035da2 chore: gitignore Playwright artifacts and Aider local files
Already excluded from ESLint/test-location scans; stop them showing as untracked.
2026-08-01 00:05:00 -03:00
Francisco Solla
8d0b19fbfd
Merge pull request #66 from fsolla/agent/bump-gha-actions-node24
CI — bump actions to Node 24 runtimes
2026-07-31 23:57:24 -03:00
Francisco Ignácio Fontoura Solla
c6baea3375 ci: bump checkout@v5, setup-node@v5, pnpm/action-setup@v6
Silence GHA Node 20 deprecation on action runtimes; inputs unchanged.
2026-07-31 23:56:22 -03:00
Francisco Solla
7347a73eaf
Merge pull request #65 from fsolla/agent/pin-node-24
chore — pin Node 24.x for Vercel/CI parity
2026-07-31 23:54:47 -03:00
Francisco Ignácio Fontoura Solla
2181d30573 chore: pin Node to 24.x (CI, Vercel, engines)
Open engines range forced Vercel onto 22.x despite Project Settings
24.x and warned of auto-major upgrades. Align with CI.
2026-07-31 23:47:49 -03:00
Francisco Solla
bf542b13ab
Merge pull request #64 from fsolla/agent/fix-vercel-cli-version
CI — bump Vercel CLI for gated deploy
2026-07-31 23:44:10 -03:00
Francisco Ignácio Fontoura Solla
27b6bb75ba ci(deploy): bump Vercel CLI to 55 (API requires ≥47.2.2)
Build succeeded; deploy --prebuilt aborted on outdated CLI 41.7.8.
2026-07-31 23:43:07 -03:00
Francisco Solla
6c19489659
Merge pull request #63 from fsolla/agent/fix-vercel-deploy-env
CI — unset test DATABASE_URL for vercel deploy build
2026-07-31 23:33:18 -03:00
Francisco Ignácio Fontoura Solla
183203f1d7 ci(deploy): unset CI test DATABASE_URL before vercel build
Workflow env pointed vercel build at localhost teqo_test; Payload migrate
then ECONNREFUSED. Drop test DB/secret/site URL so pull's production
.env is what the build uses.
2026-07-31 23:32:19 -03:00
Francisco Solla
974d444883
Merge pull request #62 from fsolla/agent/fix-vercel-deploy-pnpm
CI — install pnpm for vercel build deploy
2026-07-31 23:25:19 -03:00
Francisco Ignácio Fontoura Solla
2e873523c8 ci(deploy): install pnpm before vercel build
vercel build shells out to pnpm (packageManager); the deploy job only
had npm, which failed with spawn pnpm ENOENT after auth worked.
2026-07-31 23:24:12 -03:00
Francisco Solla
5d41fbb6cc
Merge pull request #61 from fsolla/agent/fix-vercel-deploy-link
CI — harden Vercel gated deploy
2026-07-31 23:07:42 -03:00
Francisco Ignácio Fontoura Solla
b7bb6f1479 style: prettier CUTOVER-MAIN-ONLY.md 2026-07-31 23:06:40 -03:00
Francisco Ignácio Fontoura Solla
68a4f702fb ci(deploy): harden Vercel gated deploy link
Match the Vercel Actions KB (job-level org/project env, global CLI),
validate team_/prj_ secret shapes, and document the misleading
Project Settings 403. Org/project secrets were resynced from local link.
2026-07-31 23:04:33 -03:00
Francisco Solla
49f2b84782
Merge pull request #60 from fsolla/agent/ci-pr2-main-only
CI2 — main-only + gated deploy + pool 403
2026-07-31 21:16:00 -03:00
Francisco Ignácio Fontoura Solla
6c90d76f10 test: pin exported skip predicates so knip stays clean 2026-07-31 21:09:20 -03:00
Francisco Ignácio Fontoura Solla
2abcaeaaa5 docs: record cutover checklist progress 2026-07-31 20:57:50 -03:00
Francisco Ignácio Fontoura Solla
f021992de0 ci: main-only cutover with gated Vercel deploy
Remove stage/promote/Neon smoke. PR CI targets main; ci.yml full-suite
verifier deploys via vercel CLI and requeues when HEAD moves. Pool uses
POOL_GITHUB_TOKEN and POOL_BASE_REF=main. Docs/skills/rules retargeted.
2026-07-31 20:57:18 -03:00
Francisco Ignácio Fontoura Solla
5237fa9d79 docs(skills): model-selection Composer / Grok / Kimi K3 only
Collapse the canonical table; bipartition for complex issues; drop
K2.7/Haiku/GLM/Gemini from the happy path.
2026-07-31 20:57:18 -03:00
Francisco Ignácio Fontoura Solla
42d1a7be93 ci(pr): prettier + ignore local tool artifacts in format check 2026-07-31 20:57:18 -03:00
Francisco Ignácio Fontoura Solla
9d810d1564 ci(pr): cascade phase1→phase2 with blast-radius skips
Add scope classifiers for code/build jobs, always-on test-location
guardrails, and gate:ci parity. Default affected base is origin/main.
2026-07-31 20:57:18 -03:00
Cursor Agent
503a775b9f fix(cloud): ensure-postgres bootstrap before teqo readiness check
Warm Cloud snapshots often have PostgreSQL online without the teqo
role/DBs. start_postgres previously gated on teqo_ready, exited before
bootstrap_databases, and marked the environment INSTALL_FAILED even
though agents still ran. Also pin DATABASE_URL and assert migrations
in cloud-setup so a silent no-op migrate cannot slip through.

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-07-31 20:57:18 -03:00
Cursor Agent
7a876ec334 refactor(notifications): bell loaders read through owner access, no bypass
countUnreadNotifications/loadNotificationList took a caller-supplied
recipientID with module-level admin bypass — one misuse away from reading
someone else's inbox. They now take the actor (CampaignUser) and read
with overrideAccess: false under canReadOwnNotifications, keeping the
explicit recipient filter as a second fence. Pin: owner isolation at the
loader level in campaignNotifications.int.spec.ts.

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-07-31 20:57:18 -03:00
Cursor Agent
6705db80eb security: lock public globals update to payloadAdminOnly (Pass 4 P0)
The four public globals (site-settings, home, metadata, privacy-policy)
spelled update access as "any authenticated user" — and campaign JWTs
authenticate against /api/*, so any campaign session (leader included)
could PATCH the public site. payloadAdminOnly matches the collection
lockdown precedent; editors lose config-global writes deliberately
(content editing stays on canManagePublishedContent collections).

Pins: identity + deny (coordinator/editor) + allow (admin fn) + anonymous
read in collectionAccessLockdown.int.spec.ts. Recurrence guard:
globalAccessConventions.unit.spec.ts bans the Boolean(user) shape in
src/globals.

Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
2026-07-31 20:57:18 -03:00
Cursor Agent
84fed02ee5 test(miss-54): deterministic guard for unsettled goto→goto + nav convention
The SavedFilters incident shape — a page.goto fired while the previous
heavy RSC navigation was still in flight (net::ERR_ABORTED) — gets a
build-level guard: two gotos with no settle between them (await expect /
waitForURL / click / reload / login / catch) fail the suite. Measured
baseline on the current tree: 58 gotos across 17 specs, 0 unsettled
pairs — the six SOFT pairs from the miss audit all settle on awaited
assertions, so the guard starts clean without churning them.

TESTING.md records the convention the miss asked for: goto for cold
loads and URL contracts; in-shell navigation for continuity scenarios;
interactive-state waits before dynamic clicks; a dev-mode caveat for the
campaignLeaderships chip spec (deterministic dev failure at the
suggestion/commit step, prod green — ledgered).
2026-07-31 20:57:18 -03:00
Cursor Agent
5c59793e4c test(miss-53): gate WebAuthn ceremonies on authenticator readiness
The app's biometrics probe is one-shot per island mount: when
isUserVerifyingPlatformAuthenticatorAvailable() resolves before the CDP
virtual authenticator answers, the enrollment form / biometric button
never mount and no wait flips them (prod-build CI flake). New
expectCampaignBiometricsReady(page) polls the platform answer BEFORE the
surface whose island probes it; adopted at both ceremony entries in
campaignWebAuthn (verified green locally). Conventions pin:
e2eNavigationConventions fails the build when a virtual-authenticator
spec skips the readiness gate.
2026-07-31 20:57:18 -03:00