[JUM-821][Release] Promote dev to main — public OSS rebind, frontend X-CRUD, service-management monitoring - #327
Conversation
Bugbot couldn't run - usage limit reachedBugbot 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) |
…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 -->
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
Bugbot couldn't run - usage limit reachedBugbot 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) |
|



Summary
Promoção de release
dev→maingovernada 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 emdev, cada um tendo passado pelo gate de branch correspondente (ci:gate:task/test:unitemdev). Temas principais: (1) rebind do repositório públicoweb2solutions/Jumentixe restauração da saúde doci: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:mainreflete o estado de desenvolvimento verificado, com a matriz completa (ci:gate:strict) executada neste PR antes do merge.Problem Statement
mainestá 444 commits atrás dedev(origin/main=bf859d1a07f1c7231fda6b675e725111f8f822d5,origin/dev=cc7c5b2f1a9b7945cc68878ef416dba8aaa5e3b8). A promoção consolida emmaino trabalho aprovado emdev, incluindo a transição do repositório para público sobweb2solutions/Jumentix(requirement 113 emendado em 2026-09-13).devno rangeorigin/main..origin/dev([JUM-634][Release] Promote dev to main #158…[JUM-784][CI] Keep Sonar scan encoding safe #326; ver mapeamento abaixo)ci:gate:strict) — pendentes na criaçãoProject Tracking (Required)
Jumentix(https://linear.app/jumentix)kimi-code-primary-001(agente executor desta promoção, registrado no Agent Registry Firestore; assignee da issue no Linear: Eduardo Almeida)Start date->End date): sem ciclo atribuído à JUM-821 no LinearP0/P1/P2): P0 (promoção de release)Branch Promotion Path (Required)
devmain[JUM-XXXX][Nature] <concise outcome>JUM-XXXXmatches the single Linear Issue declared above.dev. (Não se aplica: este é um PR de promoção de release, não um PR de tarefa.)main, it is a release promotion sourced fromdev, references the task PRs/issues already merged intodev, and introduces no unreviewed changes.main.Bidirectional Traceability (Required)
devcarrega seu identificador JUM no título do commit de merge — ver logorigin/main..origin/dev.)origin/main..origin/dev, 444 commits; grupos representativos pelo commit de merge do PR):JUM-568:ab742320([JUM-568][CI] Rebind public CI providers #319),b474afeb([JUM-568][CI] Use HTTPS checkout for CircleCI #322),1ce77609([JUM-568][Docs] Fix CircleCI and Codecov badges #321),c29f8f16([JUM-568][Test] Isolate frontend auth guard storage #320),68b05389([JUM-568][Docs] Fix provider badges after migration #324) — rebind CI público web2solutions/JumentixJUM-784:811ba5b7,d3e7ff53([JUM-784][CI] Restore ci:gate health (boundaries, build:dev, branch-gate preflight) #323),cc7c5b2f([JUM-784][CI] Keep Sonar scan encoding safe #326) — restauração da saúde do ci:gateJUM-774:44e0302c([JUM-774][Feature] Frontend seed and X-CRUD kit hardening (JUM-774…782) #318) — frontend seed + X-CRUD kit hardeningJUM-783:14689713([JUM-783][Feature] Auto-redirect to login when the session expires #317) — auto-redirect de sessão expiradaJUM-733:c6f67982([JUM-733] Complete Service Management audit help epic #316) — Service Management audit help epicJUM-773:c4f57d43([JUM-773][Feature] X-CRUD enterprise redesign: X-SYNTH toolbar/grid, array editors, FK labels #315) — X-CRUD enterprise redesign (X-SYNTH)JUM-772:a920f75a([JUM-772][Feature] Generic X-CRUD kit, Users domain sub-apps, XpertMinds seeds, OAS RBAC #314) — X-CRUD kit genérico com sub-apps usersJUM-757:60f09b45([JUM-757][Feature] GUI interface slot + interactive hexagonal architecture map #298),ced3139b— GUI interface slot + mapa arquiteturalJUM-770:d8991c56([JUM-770][Fix] Service Management lifecycle, self-guard, stable help popover, numeric charts #313) — reparo do lifecycle PM2JUM-767:0d9ea05f([JUM-767][Fix] Harden monitoring disk I/O, start-after-stop, async context, process help #310),25ad8dd4([JUM-767][Feature] Service Management monitoring WebSocket + D3/Cana/disk I/O/ALS #308) — monitoring WebSocket/PM2/disk I/OJUM-769:832f0b50([JUM-769][Fix] Enforce pattern-only OAS rules at input level, visible enum affordance, x-hide #311) — OAS pattern-only rulesJUM-766…JUM-761: [JUM-766][Feature] Build forms from the OAS schema at runtime #307…[JUM-761][Feature] Editable profile page through the user menu #302 — forms OAS em runtime, perfil editável, seed idempotente(JUM-NNN)em cada commit do rangeScope 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
ubuntu-latest, CircleCI reabilitado como mirror secundário, Sonar ativo no projeto público, badges e cobertura publicados pelo repo.arch:check-workspace-boundaries.service-management-api(requirement 126 ampliado), redesign X-CRUD/X-SYNTH.Architecture and Design Alignment
Security Impact
Data and Migration Impact
main(ref anteriorbf859d1a07f1c7231fda6b675e725111f8f822d5); nenhum dado de runtime é alterado pela promoção.Breaking Changes
web2solutions/Jumentix(requirement 113 emendado em 2026-09-13, somente emdevaté este merge): CI/cobertura/Sonar operam no contexto público; requirements 103/104/114 ainda citam o path privadoXpertMinds/Jumentix— drift de documentação de governança registrado, a ser reconciliado em requirement próprio.Acceptance Criteria
dev)pm2-metrics/pm2-ws)arch:check-workspace-boundariesintegrado aoci:gate, inclui requirement 136)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 deci:gate)pnpm run deps:check-cyclespnpm run arch:check-boundariespnpm run arch:check-users-legacy-importspnpm run test:unitpnpm run oas:check-routespnpm run build:devpnpm run ci:smokepnpm run ci:gateCoverage
SonarQube Cloud
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
/api/runtime/pm2-metrics,/api/runtime/pm2-ws) documentados no requirement 126Deployment and Rollout
main; publicação de pacotes/deploy seguem processo próprio, fora deste PR.git revertdo merge commit ou reset demainparabf859d1a07f1c7231fda6b675e725111f8f822d5com force-push documentado e aprovado pelo owner.Risks and Mitigations
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.devcontradiz 103/104/114 que citam repo privado).Mitigation: drift registrado neste PR e no onboard do agente; merge do 113 em
mainalinha as tips; reconciliação dos requirements 103/104/114 fica como trabalho subsequente rastreável.Documentation Updates
documentation/no rangepnpm run changelog:update) — CHANGELOG.md atualizado emdev([JUM-784][CI] Keep Sonar scan encoding safe #326)Reviewer Checklist
dev)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 publicweb2solutions/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
jumentixrunners toubuntu-latestwith standard checkout/setup-node; coverage adds frontend coverage for patch reports and uses the pinned Codecov action; optional CI Sonar is gated byJUMENTIX_ENABLE_SONAR_CI. A full.circleci/config.ymlmirrors the same context classifier and release matrix (branch-gate through database-matrix).Governance / contracts: Registers
apps/service-management-apiownership; requirement 126 expands pinned contracts (catalog API URL, PM2 ecosystem filenames,GET /api/runtime/pm2-metrics,WS /api/runtime/pm2-ws,codeWorkspace/monitoringHistoryin 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 wrapsContext.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 underinterface/GUI/.Tooling: ESLint ignores vendored
apps/frontend/template, scopes frontend/Cypress suites;.dockerignoreadded; 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.