Skip to content

[JUM-821][Release] Promote dev to main — public OSS rebind, frontend X-CRUD, service-management monitoring - #327

Merged
web2solutions merged 1 commit into
mainfrom
dev
Sep 16, 2026
Merged

web2solutions merged 1 commit into
mainfrom
dev

Conversation

@web2solutions

@web2solutions web2solutions commented Sep 13, 2026 •

Copy link
Copy Markdown
Owner

Summary

Promoção de release dev → main governada pela issue Linear JUM-821 ("[Release] Promote dev to main (Jumentix sob web2solutions)"). O delta contém 444 commits / 687 arquivos (+59.324/−3.641), resultado de ~216 PRs de tarefa já mergeados em dev, cada um tendo passado pelo gate de branch correspondente (ci:gate:task / test:unit em dev). Temas principais: (1) rebind do repositório público web2solutions/Jumentix e restauração da saúde do ci:gate (JUM-568, JUM-784); (2) frontend X-CRUD kit enterprise, GUI interface slot e hardening de sessão (JUM-757…JUM-783); (3) Service Management monitoring live via WebSocket/PM2 e redesign X-SYNTH (JUM-767…JUM-774); (4) emendas de requirements 113/126 e novo requirement 136. Resultado esperado: main reflete o estado de desenvolvimento verificado, com a matriz completa (ci:gate:strict) executada neste PR antes do merge.

Problem Statement

main está 444 commits atrás de dev (origin/main = bf859d1a07f1c7231fda6b675e725111f8f822d5, origin/dev = cc7c5b2f1a9b7945cc68878ef416dba8aaa5e3b8). A promoção consolida em main o trabalho aprovado em dev, incluindo a transição do repositório para público sob web2solutions/Jumentix (requirement 113 emendado em 2026-09-13).

Project Tracking (Required)

Branch Promotion Path (Required)

  • Source branch: dev
  • Target branch: main
  • Required PR title format: [JUM-XXXX][Nature] <concise outcome>
  • The leading JUM-XXXX matches the single Linear Issue declared above.
  • This task PR targets dev. (Não se aplica: este é um PR de promoção de release, não um PR de tarefa.)
  • If this PR targets main, it is a release promotion sourced from dev, references the task PRs/issues already merged into dev, and introduces no unreviewed changes.
  • This PR is not a direct task/topic branch promotion to main.

Bidirectional Traceability (Required)

Scope of Change

687 arquivos alterados, +59.324/−3.641 (diff origin/main..origin/dev).

Domain / Business Rules

  • apps/backend-template: 165 arquivos, +2.407/−21.480 (limpeza de legado e alinhamento de contratos).

Application / Use Cases

  • apps/frontend: 276 arquivos, +34.805 — kit X-CRUD genérico orientado a OAS, sub-apps do domínio users, RBAC via OAS, forms gerados em runtime, guarda de sessão com auto-redirect.

Adapters / Infrastructure

  • apps/service-management + apps/service-management-api: 136 arquivos, +33.857/−282 — monitoring live (WS /api/runtime/pm2-ws, snapshot /api/runtime/pm2-metrics), lifecycle PM2, audit help.
  • ci-cd + .github: 13 arquivos, +608/−311 — classificador de contexto CI, gates branch-aware, provider checks.

API / Contracts (OpenAPI, DTOs, handlers, controllers)

  • packages: 24 arquivos, +1.741/−93 — contratos compartilhados e tooling de governança.
  • apps/jumentix-website: 59 arquivos, +1.131/−180 — experiência OSS comercial.
  • .agents: 6 arquivos, +224/−32 — requirements 113 (emendado), 126 (ampliado), 136 (novo: frontend conhece backend só via OAS).
  • documentation: 67 arquivos, +1.117/−573 — sincronização bilíngue EN/PT-BR.

Detailed Technical Changes

  1. Rebind para repositório público (JUM-568 + requirement 113 emendado): GitHub Actions em runners hosted ubuntu-latest, CircleCI reabilitado como mirror secundário, Sonar ativo no projeto público, badges e cobertura publicados pelo repo.
  2. Frontend desacoplado via OAS (requirement 136, JUM-758/776–783): frontend nunca importa fonte do backend; forms/validação/RBAC derivados do documento OpenAPI em runtime; enforced por arch:check-workspace-boundaries.
  3. Service Management como suite operacional (JUM-733/736/748/767–774): monitoramento PM2 com métricas de host e async-context, catálogo movido para service-management-api (requirement 126 ampliado), redesign X-CRUD/X-SYNTH.

Architecture and Design Alignment

  • Domain logic remains inside domain/application layers.
  • Controllers/handlers do not instantiate repositories/services directly.
  • Ports/adapters boundaries are respected.
  • No new circular dependencies introduced.
  • Event publishing/listening flow remains consistent.

Security Impact

  • Security impact: sem novos segredos commitados; sanitização de DTOs (password/salt) mantida; seed admin (JUM-764) usa credenciais dirigidas por ambiente e seeding idempotente (JUM-763).
  • Secrets handling reviewed: [x] Yes [ ] No [ ] N/A
  • Input/output sanitization reviewed: [x] Yes [ ] No [ ] N/A
  • AuthN/AuthZ impact: [ ] Yes [x] No (RBAC existente exposto ao frontend via OAS, sem mudança de modelo)
  • Data exposure risk (password/salt/token/PII): [ ] Yes [x] No
  • Sonar security findings addressed or unaffected: [x] Yes [ ] No (quality gate Sonar executa neste PR — resultado pendente)

Data and Migration Impact

  • Data model impact: nenhuma quebra de schema; seeding tornado idempotente para bancos persistentes (JUM-763).
  • Migration required: [ ] Yes [x] No
  • Rollback strategy: reverter o merge em main (ref anterior bf859d1a07f1c7231fda6b675e725111f8f822d5); nenhum dado de runtime é alterado pela promoção.

Breaking Changes

  • Repositório canônico passa a ser público sob web2solutions/Jumentix (requirement 113 emendado em 2026-09-13, somente em dev até este merge): CI/cobertura/Sonar operam no contexto público; requirements 103/104/114 ainda citam o path privado XpertMinds/Jumentix — drift de documentação de governança registrado, a ser reconciliado em requirement próprio.
  • Nenhuma quebra de contrato de API ou de runtime para consumidores dos pacotes.

Acceptance Criteria

  • Feature/bug behavior matches expected functional outcome. (Evidência: matriz completa deste PR — pendente)
  • Error paths and edge cases are covered. (Coberto pelos gates de tarefa já executados em cada PR mergeado em dev)
  • API contract changes (if any) are documented and validated. (Requirement 126 ampliado documenta os novos contratos pm2-metrics/pm2-ws)
  • Architecture boundaries remain enforced. (arch:check-workspace-boundaries integrado ao ci:gate, inclui requirement 136)
  • No regression in existing workflows. (A confirmar pela matriz completa deste PR)

Test Plan (Evidence)

Os itens abaixo não foram reexecutados localmente pelo agente promotor; cada PR de tarefa já passou pelo gate aplicável em dev (ci:gate:task/test:unit), e a matriz completa executa como checks obrigatórios deste PR. Caixas serão marcadas somente quando os checks remotos terminarem verdes:

  • pnpm run lint (equiv. CI: lint dentro de ci:gate)
  • pnpm run deps:check-cycles
  • pnpm run arch:check-boundaries
  • pnpm run arch:check-users-legacy-imports
  • pnpm run test:unit
  • pnpm run oas:check-routes
  • pnpm run build:dev
  • pnpm run ci:smoke
  • pnpm run ci:gate

Coverage

  • Project coverage >= 95%: [ ] Yes [ ] No — pendente (job de cobertura deste PR)
  • Patch coverage >= 95%: [ ] Yes [ ] No — pendente
  • Codecov status passing: [ ] Yes [ ] No — pendente

SonarQube Cloud

  • Quality Gate passing: [ ] Yes [ ] No — pendente (scan neste PR)
  • New vulnerabilities introduced: [ ] Yes [ ] No — pendente
  • New security hotspots reviewed: [ ] Yes [ ] No [x] N/A — pendente confirmação do scan

Performance / Reliability Impact

Sem impacto mensurável introduzido pela promoção em si. Mudanças de runtime relevantes já validadas em dev: monitoring PM2/WebSocket (overhead confinado ao app service-management), forms OAS em runtime no frontend (custo de parse no carregamento).

Observability

  • Logs updated: [ ] Yes [x] No
  • Metrics/Tracing updated: [x] Yes [ ] No [ ] N/A — novos endpoints de telemetria do Service Management (/api/runtime/pm2-metrics, /api/runtime/pm2-ws) documentados no requirement 126

Deployment and Rollout

  • Deployment notes: promoção por merge deste PR somente após todos os checks obrigatórios verdes; sem auto-deploy (requirement 070).
  • Feature flag needed: [ ] Yes [x] No
  • Rollout strategy: merge em main; publicação de pacotes/deploy seguem processo próprio, fora deste PR.
  • Rollback steps: git revert do merge commit ou reset de main para bf859d1a07f1c7231fda6b675e725111f8f822d5 com force-push documentado e aprovado pelo owner.

Risks and Mitigations

  1. Risk: delta grande (444 commits / 687 arquivos) dificulta revisão humana integral.
    Mitigation: todo o conteúdo já passou por gates individuais em dev; este PR executa a matriz completa (ci:gate:strict) como condição de merge; rollback por revert documentado.
  2. Risk: drift de governança entre tips (requirement 113 emendado só em dev contradiz 103/104/114 que citam repo privado).
    Mitigation: drift registrado neste PR e no onboard do agente; merge do 113 em main alinha as tips; reconciliação dos requirements 103/104/114 fica como trabalho subsequente rastreável.

Documentation Updates

Reviewer Checklist

  • Changes are clear and scoped. (Promoção dev→main sem commits novos fora de dev)
  • Acceptance criteria are testable and satisfied. (Depende da matriz completa — pendente)
  • Tests are sufficient for risk level. (A confirmar pelos checks deste PR)
  • Security and data impacts are addressed.
  • CI checks pass fully. (Pendente na criação — condição obrigatória de merge)

Note

High Risk
Large release promotion touching CI authority, public repo bindings, persistence soft-delete/seed credentials, and removal of catalog from the backend template—any regression affects delivery gates and generated-service defaults.

Overview
Release promotion folding ~444 commits into main: canonical repo becomes public web2solutions/Jumentix, with governance and docs updated to match (requirement 113 rewritten, integration-migration matrices, README badges for GitHub Actions + restored CircleCI + Sonar project key).

CI/CD changes: GitHub Actions jobs move from self-hosted jumentix runners to ubuntu-latest with standard checkout/setup-node; coverage adds frontend coverage for patch reports and uses the pinned Codecov action; optional CI Sonar is gated by JUMENTIX_ENABLE_SONAR_CI. A full .circleci/config.yml mirrors the same context classifier and release matrix (branch-gate through database-matrix).

Governance / contracts: Registers apps/service-management-api ownership; requirement 126 expands pinned contracts (catalog API URL, PM2 ecosystem filenames, GET /api/runtime/pm2-metrics, WS /api/runtime/pm2-ws, codeWorkspace / monitoringHistory in designer state and exports). New requirement 136 forbids frontend imports of backend source—OAS/SDK only.

Backend template: Catalog runtime, stores, and realtime OAS mappings are removed from the generated-service template (catalog lives on the platform API per 126/JUM-748). User/Organization in-memory stores gain soft-delete, shared id reservation ledger, list queries via runListQuery, and tombstone purge helpers; async-context metrics instrumentation wraps Context.run. Seeds use stable IDs, add XpertMinds tenant and RBAC demo users, and widen dev CORS for port 3001. GUI inbound slot docs are added under interface/GUI/.

Tooling: ESLint ignores vendored apps/frontend/template, scopes frontend/Cypress suites; .dockerignore added; gitignore tweaks for service-management-api adapters and local SQLite.

Reviewed by Cursor Bugbot for commit 88e91a4. Bugbot is set up for automated code reviews on this repo. Configure here.

@cursor

cursor Bot commented Sep 13, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_77ce5b28-c8f3-40c9-96c6-aa9cd6690a10)

Comment thread apps/frontend/e2e/Dockerfile.backend Fixed
Comment thread apps/frontend/template/src/features/dashboard/MainChart.vue Fixed
Comment thread apps/frontend/e2e/Dockerfile.backend Fixed
Comment thread apps/frontend/e2e/Dockerfile.backend Fixed
Comment thread apps/frontend/scripts/run-e2e.mjs Fixed
web2solutions added a commit that referenced this pull request Sep 14, 2026
…ncile main lineage (#328)

## Summary

Desbloqueia a promoção `dev → main` (JUM-821, PR #327) corrigindo todos
os achados que reprovaram o Quality Gate do SonarQube Cloud (Security
Rating C, Reliability Rating D no new code) e reconciliando a linhagem
de `origin/main` em `dev`. São 7 vulnerabilities, 15 bugs e 1 code smell
BLOCKER corrigidos em 13 arquivos, mais um merge commit que incorpora os
2 commits exclusivos de `main` (squash assinado da promoção JUM-721,
#278) resolvendo 32 conflitos com o lado de `dev` como autoritativo.
Resultado esperado: após o merge, a PR #327 fica mergeable, dispara o
run de `pull_request` com a matriz completa e passa no Sonar com ratings
A.

## Problem Statement

A PR #327 (`dev → main`) está bloqueada por: (1) `mergeable:
CONFLICTING` — `main` divergiu pelo squash assinado de #278; (2)
`SonarCloud Code Analysis` fail — Security Rating C e Reliability Rating
D; (3) o run de `pull_request` não executa enquanto houver conflitos
(GitHub não cria o merge commit de teste), deixando a matriz completa
sem rodar.

- Related issue(s): JUM-821 —
https://linear.app/jumentix/issue/JUM-821/release-promote-dev-to-main-jumentix-sob-web2solutions
- Related PR(s): #327 (promoção que este PR desbloqueia), #325
(tentativa anterior, fechada), #278 (squash que originou a divergência)
- Related check run(s): SonarCloud Code Analysis fail em `cc7c5b2f`
(Security C / Reliability D)

## Project Tracking (Required)

- Linear Project: `Jumentix` (`https://linear.app/jumentix`)
- Focused epic link:
https://linear.app/jumentix/project/epicwebsite-rebuild-jumentix-oss-product-and-documentation-29afbed6583c
- Epic milestone: Jumentix OSS website rebuild - 2026-12-31
- Primary task nature: fix
- Epic-delegated agent ID: kimi-code-primary-001
- Child task issue link:
https://linear.app/jumentix/issue/JUM-821/release-promote-dev-to-main-jumentix-sob-web2solutions
- Project Update:
https://linear.app/jumentix/project/epicwebsite-rebuild-jumentix-oss-product-and-documentation-29afbed6583c/activity#project-update-8b68657a
- Linear Project link(s):
https://linear.app/jumentix/project/epicwebsite-rebuild-jumentix-oss-product-and-documentation-29afbed6583c
- Linear Issue link(s):
https://linear.app/jumentix/issue/JUM-821/release-promote-dev-to-main-jumentix-sob-web2solutions
- Linear Issue ID list (comma separated): JUM-821
- Item status at PR creation: In Progress
- Target cycle (`Start date` -> `End date`): sem ciclo atribuído à
JUM-821 no Linear na criação deste PR
- Priority group for this PR (`P0` / `P1` / `P2`): P0
- [x] This PR contains tasks from only one priority group.

## Branch Promotion Path (Required)

- Source branch: `kimi/fix/JUM-821-main-promotion-blockers`
- Target branch: `dev`
- Required PR title format: `[JUM-XXXX][Nature] <concise outcome>`
- [x] The leading `JUM-XXXX` matches the single Linear Issue declared
above.
- [x] This task PR targets `dev`.
- [ ] If this PR targets `main`, it is a release promotion sourced from
`dev`, references the task PRs/issues already merged into `dev`, and
introduces no unreviewed changes. (Não se aplica: este PR mira `dev`.)
- [x] This PR is not a direct task/topic branch promotion to `main`.

## Bidirectional Traceability (Required)

- [x] Every linked issue already contains this PR URL. (A URL deste PR
será registrada em Project Update no épico; o Project Update inicial já
referencia a branch e a PR #327.)
- [x] Every linked issue already contains commit hash/range evidence.
(Commits `99f7a63b` (merge) e `50123410` (fixes) citam JUM-821.)
- [x] PR description includes mapping of task -> commit(s).
- Task -> commit(s) mapping:
- `JUM-821`: `99f7a63b` (merge origin/main → branch, 32 conflitos
resolvidos para o lado dev), `50123410` (correções SonarQube)

## Scope of Change

13 arquivos, +47/−33, mais o merge commit de reconciliação (diff final
vs `origin/dev`: apenas `CHANGELOG.md` +4 linhas de entradas recentes).

### Domain / Business Rules

- Nenhuma alteração.

### Application / Use Cases

- Nenhuma alteração.

### Adapters / Infrastructure

- `apps/service-management/src/ui/controlHelp.js`, `renderGuard.js`,
`monitoringApp.js`, `server.js`: compare functions com `localeCompare`
em `sort()` (S2871 ×4) e remoção de condicional que retorna o mesmo
valor nos dois ramos (S3923).
- `apps/frontend/e2e/Dockerfile.backend`: `USER bun` (S6471), `bun
install --ignore-scripts` (S6505), remoção de `NODE_ENV=dev` do ENV
(S4507).
- `apps/frontend/scripts/run-e2e.mjs`: `spawn(process.execPath)` em vez
de resolução via PATH (S4036).
- `.github/workflows/ci.yml`: bloco `permissions:` removido do nível do
workflow e declarado por job no mínimo necessário (S8264, S8233);
`security-events: write` eliminada por não ter uso (nenhum upload
SARIF).

### API / Contracts (OpenAPI, DTOs, handlers, controllers)

- `apps/frontend/template/src/features/dashboard/MainChart.vue`:
`crypto.getRandomValues` no lugar de `Math.random` (S2245).
- `apps/frontend/index.html`, `apps/frontend/template/index.html`:
`lang="en"` (S5254).
- `apps/frontend/template/src/features/forms/ChecksRadios.vue`,
`Validation.vue`: ids duplicados tornados únicos preservando associações
label/aria (S7930 ×8).
- `apps/frontend/cypress/e2e/users-crud.cy.ts`: asserções
`.should('be.visible')` no teste de locale pt-BR (S2699, BLOCKER).

## Detailed Technical Changes

1. **S2871 (×4)**: `sort()` sem compare function usa ordenação por
UTF-16 code units; todos os conjuntos são listas de
nomes/identificadores (strings), então `(a, b) => a.localeCompare(b)` —
comportamento alfabético correto e determinístico.
2. **S3923 (`monitoringApp.js:263`)**: o ternário retornava
`processes.map((entry) => entry.name)` em ambos os ramos; simplificado
para o valor direto — o conjunto de nomes presentes é o valor correto
independentemente de `expectedProcessCount`.
3. **Dockerfile e2e**: imagem `oven/bun:1.3.13` já provê o usuário `bun`
(uid 1000); `--ignore-scripts` não afeta patches do `bunfig.toml`;
`NODE_ENV` unset mantém comportamento não-production do backend
(`isProductionEnv()` só reconhece `prod`/`production`).
4. **Permissões do workflow**: nenhum step faz upload SARIF/code
scanning, então `security-events: write` era privilégio sem uso;
`pull-requests: read` só em `branch-gate` (único que lê metadados do
PR); `contents: read` em todos (checkout).

## Architecture and Design Alignment

- [x] Domain logic remains inside domain/application layers.
- [x] Controllers/handlers do not instantiate repositories/services
directly.
- [x] Ports/adapters boundaries are respected.
- [x] No new circular dependencies introduced.
- [x] Event publishing/listening flow remains consistent.

## Security Impact

- Security impact: positivo — corrige as 7 vulnerabilities apontadas
pelo Sonar (container não-root, install sem lifecycle scripts, debug
fora do ENV, PATH fixo via `process.execPath`, PRNG criptográfico,
permissões mínimas no workflow).
- Secrets handling reviewed: [x] Yes [ ] No [ ] N/A
- Input/output sanitization reviewed: [ ] Yes [ ] No [x] N/A
- AuthN/AuthZ impact: [ ] Yes [x] No
- Data exposure risk (password/salt/token/PII): [ ] Yes [x] No
- Sonar security findings addressed or unaffected: [x] Yes [ ] No (todos
os 7 findings de segurança corrigidos neste PR)

## Data and Migration Impact

- Data model impact: nenhum.
- Migration required: [ ] Yes [x] No
- Rollback strategy: revert do merge/squash deste PR em `dev`.

## Breaking Changes

None. Nenhuma mudança de contrato, runtime ou comportamento observável
além das correções de segurança/confiabilidade descritas. A PR #327
(`dev → main`) passa a conseguir executar seu run de `pull_request`
(matriz completa) após este merge.

## Acceptance Criteria

- [x] Feature/bug behavior matches expected functional outcome. (Todos
os 23 findings-alvo corrigidos sem alterar comportamento além da
correção)
- [x] Error paths and edge cases are covered. (Suites existentes verdes
— evidências abaixo)
- [x] API contract changes (if any) are documented and validated.
(Nenhuma mudança de contrato)
- [x] Architecture boundaries remain enforced. (Nenhum boundary tocado)
- [x] No regression in existing workflows. (Suites unitárias e checks
standalone verdes; branch-gate desta PR confirma)

## Test Plan (Evidence)

Comandos executados localmente no worktree (verbatim):

- `NODE_ENV=dev bun x jest apps/service-management/test/unit
--coverageThreshold='{}' --forceExit` → `Test Suites: 40 passed, 40
total` / `Tests: 782 passed, 782 total` (5.062 s)
- `bun run test` em `apps/frontend` → `158 pass / 0 fail / 477 expect()
calls` (23 files)
- `bun run typecheck` e `bun run lint` em `apps/frontend` → exit 0
- `bun test apps/backend-template/test/unit/ci-cd/` → `658 pass / 0 fail
/ 1218 expect() calls` (46 files)
- `bun ci-cd/check-ci-provider.js` → "CI provider check passed"
- `bun ci-cd/check-third-party-review.js` → "Third-party review contract
passed"
- Pre-commit hook (husky, sem `--no-verify`) executou o seletor
layer-aware de testes sobre os arquivos alterados — verde nos dois
commits.

Checkboxes do template abaixo referem-se ao gate remoto desta PR
(branch-gate, obrigatório) — serão marcados apenas com evidência do
check remoto:

- [ ] `pnpm run lint` — via branch-gate remoto (pendente)
- [ ] `pnpm run deps:check-cycles` — via branch-gate remoto (pendente)
- [ ] `pnpm run arch:check-boundaries` — via branch-gate remoto
(pendente)
- [ ] `pnpm run arch:check-users-legacy-imports` — via branch-gate
remoto (pendente)
- [ ] `pnpm run test:unit` — via branch-gate remoto (pendente)
- [ ] `pnpm run oas:check-routes` — via branch-gate remoto (pendente)
- [ ] `pnpm run build:dev` — via branch-gate remoto (pendente)
- [ ] `pnpm run ci:smoke` — via branch-gate remoto (pendente)
- [ ] `pnpm run ci:gate` — via branch-gate remoto (pendente)

### Coverage

- Project coverage >= 95%: [ ] Yes [ ] No — pendente (job de cobertura
desta PR)
- Patch coverage >= 95%: [ ] Yes [ ] No — pendente
- Codecov status passing: [ ] Yes [ ] No — pendente

### SonarQube Cloud

- Quality Gate passing: [ ] Yes [ ] No — pendente (scan desta PR; os
findings anteriores foram corrigidos aqui)
- New vulnerabilities introduced: [ ] Yes [x] No
- New security hotspots reviewed: [ ] Yes [ ] No [x] N/A

## Performance / Reliability Impact

No measurable impact. As correções S2871 tornam a ordenação alfabética
correta para strings não-ASCII (melhoria de confiabilidade);
`crypto.getRandomValues` tem custo equivalente a `Math.random` no volume
usado (12 pontos de gráfico).

## Observability

- Logs updated: [ ] Yes [x] No
- Metrics/Tracing updated: [ ] Yes [ ] No [x] N/A

## Deployment and Rollout

- Deployment notes: merge em `dev` com **merge commit** (não squash) —
requisito técnico para que a PR #327 fique mergeable (a reconciliação de
`origin/main` precisa entrar na ancestralidade de `dev`).
- Feature flag needed: [ ] Yes [x] No
- Rollout strategy: após merge, a PR #327 é atualizada automaticamente e
seu run de `pull_request` executa a matriz completa.
- Rollback steps: `git revert -m 1` do merge commit em `dev`.

## Risks and Mitigations

1. Risk: o merge commit reintroduzir conteúdo antigo de `main` sobre
`dev`.
Mitigation: diff final vs `origin/dev` revisado — apenas `CHANGELOG.md`
(+4 linhas de entradas recentes); as 2 imagens PNG que o merge
ressuscitou foram removidas no amend (deleção de JUM-728 preservada);
árvore final = árvore de `dev` + changelog.
2. Risk: testes que validam `ci.yml` quebrarem com a mudança de
permissões.
Mitigation: `bun test apps/backend-template/test/unit/ci-cd/` → 658/658
verde; nenhum teste assertava o bloco de permissões no nível do
workflow.

## Documentation Updates

- [ ] README updated (if needed) — não necessário: sem mudança de
runtime/arquitetura
- [ ] Additional docs updated (if needed) — não necessário: correções
internas de qualidade
- [ ] Changelog updated/synced (`pnpm run changelog:update`) —
CHANGELOG.md já recebe +4 linhas via merge commit; entrada desta PR
segue o fluxo padrão de changelog do repo

## Reviewer Checklist

- [x] Changes are clear and scoped.
- [x] Acceptance criteria are testable and satisfied.
- [x] Tests are sufficient for risk level. (Suites verdes citadas acima;
cobertura remota pendente)
- [x] Security and data impacts are addressed.
- [ ] CI checks pass fully. (Pendente — condição de merge)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Mostly static analysis and CI permission scoping with no API or auth
behavior changes; e2e container runs non-root, which is a positive
security shift with low rollout risk.
> 
> **Overview**
> Addresses **SonarQube** security/reliability blockers ahead of `dev →
main` promotion (JUM-821), plus **CHANGELOG** entries from reconciling
`origin/main` into `dev`.
> 
> **CI (`.github/workflows/ci.yml`)** drops workflow-wide `permissions`
(including unused `security-events: write`) and grants **least privilege
per job**—`contents: read` everywhere, `pull-requests: read` only on
`branch-gate`.
> 
> **Frontend / e2e hardening:** the e2e backend image runs as **`USER
bun`**, uses `bun install --ignore-scripts`, and no longer sets
`NODE_ENV=dev` in the image; the e2e runner spawns Vite via
**`process.execPath`** instead of a PATH-resolved `bun`. Shell pages get
**`lang="en"`**; demo chart data uses **`crypto.getRandomValues`**;
template form demos get **unique element ids**; the pt-BR Cypress case
adds **visibility assertions**.
> 
> **Service Management** uses **`localeCompare`** in string `sort()`
calls and removes a **no-op ternary** when building the expected
process-name set for PM2 monitoring filters.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
5012341. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_1fe8aa40-9a7e-4949-93ce-66cde1b9f5ae)

@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_80c2f3b0-b293-4709-a889-3acc02f5a94a)

@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_2df63f98-14bc-4b4e-a5e9-9c1cd6c6aafe)

Comment thread apps/frontend/test/component/XCrud.test.ts Fixed
@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_82c7e8fa-4913-43cf-ae54-0f26a4ae01e1)

@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_88abc2f1-0ed8-4913-a5d3-e05bae0d888e)

@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_2979db22-71bd-4bab-8a36-d0bd83122036)

@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_84543b29-4bcd-4ab5-bd5e-24a9f53a6176)

@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_79ff87f0-6075-4a66-941f-0b4e3bbde7da)

@cursor

cursor Bot commented Sep 14, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_b0682d9f-6130-4761-8626-0bc957a579fa)

@cursor

cursor Bot commented Sep 15, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_2215522c-5ca7-4925-95c3-6c43a7c50ae1)

@cursor

cursor Bot commented Sep 15, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_5d97434c-47c2-4a31-b8c0-b113f48905f1)

Preserve the exact origin/dev tree from de79521 for PR #327 while satisfying the verified-signature branch rule.\n\nNo merge performed.
@cursor

cursor Bot commented Sep 16, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_0b84449b-97fb-4356-937e-7870eb9b4af3)

@sonarqubecloud

Copy link
Copy Markdown

@web2solutions
web2solutions merged commit 39f14a6 into main Sep 16, 2026
24 of 25 checks passed
@cursor cursor Bot mentioned this pull request Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants