Merge da dev na main 2.2.2 #2

Merged
victor merged 26 commits from dev into main 2026-09-21 11:08:49 -03:00
Owner
No description provided.
ci: testes em container e deploy do staging por scripts root com versao
Some checks failed
CI e deploy staging / test (push) Failing after 0s
CI e deploy staging / deploy (push) Has been skipped
a60b24fb14
Workflow com dois jobs no runner do servidor (pacote forgejo_runner do
YunoHost, label staging-host, executor host): "test" em todo push e
"deploy" em push na staging. O usuario do runner nao tem Docker nem Node;
cada job chama via sudo um script root versionado de infra/staging:

- devflow-test-staging: git archive do commit, imagem de Dockerfile.test,
  lint + unitarios num container sem rede, sem capabilities e sem root.
- devflow-deploy-staging: exige SHA na staging, atualiza o clone, compara
  versoes (SCRIPT_VERSION e x-devflow-version) com as copias instaladas em
  /etc/devflow/staging, up -d --build e smoke no /api/health.
- install: copia script, sudoers, drop-in do systemd (libera sudo na unit
  do pacote) e compose, mostrando o diff e pedindo confirmacao; grava o
  caminho do clone em clone.path.

Compose ganha x-devflow-version e build.context parametrizado (DEVFLOW_SRC)
para a copia instalada ser verbatim. Dockerfile.test em Debian porque dois
testes sobem Mongo pelo mongodb-memory-server. §14 do deploy-staging.md
reescrito; estudo com nota de revisao e o validador de compose guardado
nas melhorias futuras.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ci: staging implanta a partir da branch dev
Some checks failed
CI e deploy staging / test (push) Failing after 0s
CI e deploy staging / deploy (push) Has been skipped
e168886d23
O clone do servidor e o push do dia a dia usam a dev; a staging ficou para
tras. A branch de deploy vira constante no script (DEPLOY_BRANCH) e no
gatilho do workflow.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Mudanca so no .env.staging nao faz o compose recriar o container, e um
container em loop de restart passa como existente. Um segundo up com
--force-recreate --no-deps app fecha os dois casos. SCRIPT_VERSION=2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ci: configuracao do staging em /var/www/devflow/deploy-config/staging
Some checks failed
CI e deploy staging / test (push) Failing after 0s
CI e deploy staging / deploy (push) Has been skipped
c9b23c2819
Compose, .env.staging, chave do Etherpad e clone.path saem de /etc/devflow
e ficam ao lado do clone, numa pasta dona root que o usuario do runner nao
le nem move. O instalador confere o dono do pai. devflow-test-staging sobe
para v2 (caminho novo); devflow-deploy-staging ja estava em v2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bump para validar o pipeline test + deploy do staging pelo runner.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015MjjjPJ3UBDboTiY5zr5zQ
ci: drop-in do runner desliga tudo que implica NoNewPrivileges
Some checks failed
CI e deploy staging / test (push) Failing after 1s
CI e deploy staging / deploy (push) Has been skipped
ca468104a8
Com User= nao-root, o systemd liga a flag sozinho quando a unit usa
SystemCallFilter, PrivateDevices, RestrictAddressFamilies,
RestrictNamespaces, RestrictRealtime, ProtectKernel*, LockPersonality.
NoNewPrivileges=no sozinho nao bastava: o processo seguia com
NoNewPrivs=1 e o sudo dos jobs falhava.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015MjjjPJ3UBDboTiY5zr5zQ
ci: drop-in restaura o bounding set com "=~", nao com "=" vazio
All checks were successful
CI e deploy staging / test (push) Successful in 15m11s
CI e deploy staging / deploy (push) Successful in 2m43s
9600f7df4c
CapabilityBoundingSet= vazio zera todas as capabilities; o sudo falhava com
"unable to change to root gid". "=~" e o conjunto completo.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015MjjjPJ3UBDboTiY5zr5zQ
ci: teste extrai o archive sem avisos de timestamp
Some checks failed
CI e deploy staging / test (push) Failing after 0s
CI e deploy staging / deploy (push) Has been skipped
56b92c1167
O git archive carrega a data do commit; com relogios desalinhados o tar
enche o log do job de "time stamp is in the future". SCRIPT_VERSION=3.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015MjjjPJ3UBDboTiY5zr5zQ
Traz para a dev o que so estava na main: o aviso de movimentacao de card
no Zulip (um canal por projeto), o estudo da integracao, o Docker com npm
e o selo da versao ao lado da logo.

Conflito so no numero da versao: a dev tinha subido para 2.0.2 (deploy
da staging) em paralelo a 2.1.0 da main. Fica a 2.1.0, a maior das duas.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A tela /novidades lista as versoes do mes (2.0.1, 2.0.2, 2.1.0 e 2.2.0),
cada uma com numero, data, resumo e itens marcados como novidade,
melhoria ou correcao. Chega-se a ela pelo selo da versao ao lado da logo,
que virou link, e por "Novidades" no menu do perfil.

Os dados ficam em utils/novidades.ts so como numero, data e chave; as
frases moram em pt.json e en.json, como o resto da interface. A lista
segue a ordem do numero da versao: a 2.0.2 (14/09) vem depois da 2.1.0
(10/09) porque as duas sairam em branches paralelas.

A data da versao e lida como dia local: `new Date('2026-09-16')` e
meia-noite UTC e aparecia como 15/09 no Brasil.

tests/unit/novidades.test.ts cobra que a primeira versao da lista e a do
package.json e que todo texto existe nos dois idiomas, para ninguem subir
a versao sem registrar a novidade.

Suite: 1559 passando. oidc.integration e projectTimeSummary seguem
falhando como antes, dependem de baixar o binario do mongodb-memory-server.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
O estudo mostra que nao havia vazamento entre organizacoes: eram pastas
de projetos da OSocioBio criados por engano na Terra Krya e arquivados
sem levar a pasta. As pastas foram arquivadas na producao em 16/09.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
merge: ajuste de CI da staging (origin/dev) antes do envio
Some checks failed
CI e deploy staging / test (push) Failing after 0s
CI e deploy staging / deploy (push) Has been skipped
70a645032d
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
"Adicionar arquivos" enviava video/mp4 para /api/uploads/documents e a
allowlist respondia 415 (tipo nao permitido). Inclui video/mp4 (.mp4,
.m4v), video/webm e video/quicktime (.mov) e a rota de servico passa a
devolver o content-type de video inline, para tocar no navegador.
O limite de 32MB segue valendo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Para conferir o anexo de video sem precisar enviar um arquivo. O seed
copia scripts/fixtures/video-exemplo.mp4 (3s, 9KB) para
UPLOADS_DIR/<org>/documents/ com nome fixo, entao re-rodar sobrescreve
o mesmo arquivo. Com o app no Docker a pasta ./uploads e do container:
o seed roda la dentro (docker compose exec nuxt3 node
scripts/seed-dev.mjs --force).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
chore: versao 2.2.1
All checks were successful
CI e deploy staging / test (push) Successful in 10m12s
CI e deploy staging / deploy (push) Has been skipped
467e24eacc
Correcao do anexo de video (MP4, WebM e MOV) registrada na tela de
Novidades.

Suite: 1562 passando. oidc.integration e projectTimeSummary seguem
falhando como antes, dependem de baixar o binario do mongodb-memory-server.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
O "test" rodava em todo push de qualquer branch e ocupava o runner do
servidor do staging com um build do Dockerfile.test a cada push de branch
de trabalho. O "deploy" ja era so da dev (e o script recusa SHA fora dela);
agora o gatilho inteiro acompanha.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Bump para validar o pipeline test + deploy do staging pelo runner.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A pasta lablab-bkp/ na raiz e um backup local de outro projeto (28 MB).
Fora do .gitignore ela aparecia em todo `git status` e respondia pelos 34
erros do `npm run lint` — todos de Vue 2 (filtros, slot-scope,
beforeDestroy), nenhum do Devflow.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Achados da auditoria de estado por organizacao (docs/estudos/triagem-estado-cliente.md,
arbitrados em parecer-arbitragem-09set.md), sem store de contexto nem fabrica:

- setOrganization passa o recorte global da Biblioteca (org corrente, arvore
  expandida, item selecionado, nota inicial, notas do painel) para a org nova.
  Antes so loadAll/loadFolders faziam isso: fora da Biblioteca a troca nao
  chegava e as pastas da org anterior seguiam em cena.
- loadOrganization ganha um contador de pedido: resposta de uma org que o
  usuario ja abandonou nao volta a ser a org ativa (nem o lastActiveOrgId).
- clearState passa pelo setOrganization, para invalidar carga em voo e mover
  a Biblioteca junto.
- loadHomeNote zera a nota inicial quando a org nova nao tem uma.
- useRelationTargets: a org ATIVA manda, a corrente da Biblioteca e so
  fallback; na ordem inversa um campo de relacao listava candidatos da org
  anterior.
- Sair da org ativa (OrganizationInfo) reaponta a tela para outra org do
  perfil em vez de deixar tudo numa org sem vinculo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- initAuth(true) volta a buscar de verdade: um /me ja em voo respondeu antes
  da mudanca que motivou o refresh, e reaproveita-lo devolvia o perfil velho.
  So a carga inicial compartilha a requisicao em voo.
- addOrganization insere a org criada na lista do perfil em memoria; o /me
  passa a ser revalidacao, nao a unica fonte. Sem isso, o perfil ja
  inicializado ignorava o initAuth() e a org criada nunca aparecia.
- A pagina de organizacoes larga o cookie proprio de um ano e usa a mesma
  escolha do resto do app (activateDefaultOrganization). Quando o cookie
  discordava da ultima org usada, as duas cargas corriam e a org ativa virava
  a que respondesse por ultimo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
11 casos: o recorte da Biblioteca nao atravessa a troca (pastas, item
selecionado, nota inicial), org nova sem cache abre vazia, sem org ativa a
Biblioteca nao mostra nada, resposta de org abandonada nao reativa a org
antiga e addOrganization nao duplica quando o /me responde depois.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
O .env.staging vivia so em /var/www/devflow/deploy-config/staging e era
copiado do exemplo uma unica vez: mudar uma env no repo local nao tinha
caminho ate o servidor. Agora o lugar de editar e o .env.staging do clone
(fora do git, intocado pelo `git reset --hard` do deploy) e cada
`devflow-staging-install` mostra o diff instalado -> clone e copia depois de
confirmar, ignorando a linha DEVFLOW_SRC que o proprio script grava.

Como o arquivo guarda segredos e o clone pertence ao usuario do runner, o
install o deixa root:root 600 nos dois lados: edicao so com sudo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Os cinco estudos da rodada mais a triagem (52 achados em 6 faixas), a revisao
do Codex e o parecer de arbitragem que fechou o desenho: sem store de contexto
nem fabrica, tres regras e sete edicoes cobrem onze dos doze achados vivos
(B4, B6 e B8 refutados). As correcoes correspondentes estao nos dois commits
`fix(organizacoes)` desta serie.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Notificacoes: feed de atividade no painel e canais externos, com os 69
  pontos de escrita mapeados e o contrato de provider plugavel (Zulip e
  webhook antes do SSE). Continuacao do estudo-eventos de 21/ago.
- Convite de organizacao: criar conta com o cadastro fechado e cair dentro da
  org, escrito depois de dois incidentes em producao.

Nenhum dos dois esta implementado; as decisoes seguem em aberto.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Traz para a dev local o Zulip, a tela de Novidades, o anexo de video e a
versao 2.2.1 vindos do origin/dev, e leva para la as correcoes de estado por
organizacao, o teste novo, a sincronizacao do .env.staging no install e o
ajuste do CI ("test" so na branch dev, que ainda nao tinha chegado ao
servidor: o merge 70a6450 integrou o commit anterior a ele).

Conflito unico: a versao no package.json e no package-lock.json. Fica a
2.2.1 do remoto, que e a que a tela de Novidades anuncia.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
chore: versao 2.2.2 com as correcoes de organizacao nas Novidades
All checks were successful
CI e deploy staging / test (push) Successful in 7m13s
CI e deploy staging / deploy (push) Successful in 2m59s
16a6dc96f2
Quatro itens de correcao na tela de Novidades, nos dois catalogos: a
Biblioteca acompanha a troca de organizacao, a organizacao ativa e a mesma em
todas as telas, a organizacao criada aparece na lista na hora e sair de uma
organizacao nao deixa a tela nela.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
victor merged commit e1a12af39e into main 2026-09-21 11:08:49 -03:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
LabLab/Devflow!2
No description provided.