Repository navigation
Description
Contexto
docs/decisoes-iniciais.md §1 e §4: SemVer a partir de 0.1.0 com Changesets; imagem multi-arch amd64 + arm64 construída no GitHub Actions e publicada em tmsoftbrasil/thinker com os secrets DOCKERHUB_USERNAME/DOCKERHUB_TOKEN, que o usuário cadastra. O CI de PR já existe (#38, #20); falta o caminho de release.
Ordem dos secrets: o usuário só cadastra DOCKERHUB_USERNAME/DOCKERHUB_TOKEN depois que o docker.yml herdado tiver saído (#38) e o docker.yml de publicação desta issue tiver sido revisado. Antes disso, um workflow herdado poderia publicar com eles.
O release.yml herdado usava um GitHub App (APP_ID/APP_PRIVATE_KEY) para que o PR de versão disparasse o CI. Com GITHUB_TOKEN, o PR "Version Packages" não dispara workflows. É preciso escolher: o usuário fecha e reabre o PR de versão a cada release, ou cadastra um PAT fino (RELEASE_TOKEN). Registrar a escolha aqui.
Decisão do mantenedor (2026-10-11): este fluxo de release já nasce com o Changesets 3 e o
changesets/action@v2, em vez do Changesets 2 com a action v1. O upgrade sai do v0.2 (antes #88, que ficou só com o resto do alerta 95 do Dependabot), para orelease.ymlser escrito uma vez só. O que muda no 3 e importa aqui (CHANGELOG oficial):
- pacotes privados deixam de ser versionados por padrão. Todos os workspaces do Thinker são privados, inclusive
packages/thinker; semprivatePackagesexplícito, ochangeset versionpara de subir a versão do produto em silêncio;changeset tagfoi renomeado parachangeset git-tag;changeset versionsai com código 1 quando não há changesets;- o
changesets/action@v2exige o CLI 3. As entradas foram renomeadas para kebab-case (ex.:version→version-script), ogithub-tokené passado como entrada, o push é feito pela API por padrão, e scripts próprios recebemCHANGESETS_OUTPUT;- Node
^22.11 || ^24 || >=26e npm>=10.9.0(opackageManagerénpm@10.9.2).
Escopo
-
Changesets 3:
@changesets/cliem^3.0na raiz;packages/thinkerna versão0.1.0, comCHANGELOG.mdzerado (sem o histórico do Manifest);- todos os workspaces em
0.1.0(thinker-clivem de6.24.0); .changeset/config.jsonrevisado: sem publicação no npm e com"privatePackages": { "version": true, "tag": true }explícito, para que os workspaces privados continuem sendo versionados;- remover o override
read-yaml-file→js-yaml 3.15.2dopackage.jsonda raiz, que fica morto com o Changesets 3; scripts/check-changesets.jse.changeset/README.mdatualizados.
-
release.yml: em push namain, ochangesets/action@v2(fixado por SHA, entradas em kebab-case,github-tokencomo entrada) abre o PR de versão. Oversion-scriptnão chamachangeset versionquando não há changesets pendentes (no 3 ele sai com código 1). Para a tag, usarchangeset git-tag(o antigochangeset tag) ou criá-la no próprio workflow. Quando não houver changesets pendentes e a versão depackages/thinker/package.jsonainda não tiver tag:- cria a tag
vX.Y.Z; - cria o GitHub Release com as notas de
docs/releases/X.Y.Z.md(PT-BR); - chama
docker.yml.
Sem hook de site e sem npm.
- cria a tag
-
docker.yml(workflow_call/workflow_dispatch):- build por plataforma (amd64 em
ubuntu-latest, arm64 emubuntu-24.04-arm), push by digest e merge do manifest list; - esquema completo de tags:
- versão estável
X.Y.Z:X.Y.Z,X.Y,latestesha-<curto>; - pré-release
X.Y.Z-rc.N:X.Y.Z-rc.Nesha-<curto>, sem moverX.Ynemlatest; sha-<curto>= os 7 primeiros caracteres do commit;- sem tag só de major enquanto a versão for
0.x;
- versão estável
- provenance e SBOM; assinatura cosign keyless (mantida do upstream).
- build por plataforma (amd64 em
-
dockerhub-description.ymlrecriado paratmsoftbrasil/thinker, lendodocker/DOCKER_README.md. -
Guard de nomes legados,
scripts/check-legacy-names.js(+ teste): acusamanifest/mnfstfora da allowlist.- Entra em modo relatório no
ci.yml: lista as ocorrências no resumo do job e não falha. Com--strict, sai com código diferente de 0. Ele não pode bloquear agora, porque o guia do desenvolvedor (Guia do desenvolvedor do Thinker #32) e o README/docs (README e documentação do usuário em PT-BR #33) ainda não foram reescritos. - Vira bloqueante só depois de Guia do desenvolvedor do Thinker #32 e README e documentação do usuário em PT-BR #33: o
qa-dockerroda--strictem Baseline do qa-docker: smoke e e2e da imagem v0.1 #34, e odevopsliga--strictnoci.ymlno primeiro passo de Release 0.1.0 e primeira imagem no Docker Hub #35. - A allowlist tem dois tipos de entrada:
- arquivos e pastas inteiros:
- todo arquivo de licença (
LICENSE,**/LICENSE*), que mantém o copyright da MNFST, Inc.; upstream/,docs/adr/,docs/decisoes-iniciais.md,CLAUDE.md,docs/agentes.md;docs/referencia/(artefatos do upstream guardados como insumo, ex.: o PoC de autofix movido em Remover Autofix/Phoenix do backend #16);docs/releases/(as notas comparam com o Manifest 6.28.6);.claude/agents/inteiro (omanifest-trackere as referências ao upstream nos demais agentes);docs/dev/manifest-*.md, só até Guia do desenvolvedor do Thinker #32, que apaga esses arquivos e tira a entrada da allowlist;- os arquivos do próprio guard (
scripts/check-legacy-names.js, o teste e o arquivo de allowlist, se separado); - as migrations até
1803100000000;
- todo arquivo de licença (
- linhas de atribuição e crédito, em qualquer arquivo: uma linha é aceita quando cita a origem por um destes marcadores:
mnfst/llm-gateway,MNFST, Inc/MNFST Inc,manifest@6.28.6ou "Manifest 6.28.6". Cobre o parágrafo de origem do README, oSECURITY.md("O Thinker deriva do projeto mnfst/llm-gateway…"), oCONTRIBUTING.md, odocker/DOCKER_README.mde o crédito nas telas de ajuda. O guard tira os marcadores da linha e acusa o que sobrar: uma linha com marcador e outra menção legada (ex.:mnfst_) continua sendo acusada; - usos genéricos por linha ("image manifest", "web manifest", "manifest list").
- arquivos e pastas inteiros:
- Entra em modo relatório no
-
Validação sem release real:
workflow_dispatchcom a versão0.1.0-rc.1publicatmsoftbrasil/thinker:0.1.0-rc.1esha-<curto>sem tocar em0.1nem emlatest. Antes disso, o usuário cadastra os secrets (na ordem acima) e confirma o repositório no Docker Hub. -
Passo do mantenedor: incluir o SHA do
changesets/action@v2na lista de actions permitidas do repositório.
Fora de escopo
- O release 0.1.0 em si (Release 0.1.0 e primeira imagem no Docker Hub #35).
- Notas de release (escritas em Release 0.1.0 e primeira imagem no Docker Hub #35 pelo
docs-ptbr).
Critérios de aceite
docker buildx imagetools inspect tmsoftbrasil/thinker:0.1.0-rc.1listalinux/amd64elinux/arm64; a tagsha-<curto>existe;lateste0.1não existem.- O guard roda em modo relatório no
ci.ymlsem falhar o job; com--strict, falha num commit de teste que introduzamnfst_fora da allowlist. - A escolha entre PAT e fechar/reabrir o PR de versão está registrada nesta issue.
npm ls @changesets/climostra 3.x enpm ls read-yaml-filenão encontra nada. Num branch de teste, um changeset de patch parathinkermaisnpx changeset versionsobepackages/thinker(pacote privado); sem changesets, o workflow não falha.
Dependências
- CI completa com os nomes novos #20
- Rebranding do backend: textos, e-mails, MCP e atribuição de provedores #22, CLI thinker #23, Nó n8n do Thinker #24, Rebranding do dashboard #25, Docker, Compose e instalador do Thinker #26, Templates de deploy da comunidade #30: o release e o relatório do guard partem do rebranding de código completo.
Agente responsável
devops
Activity
patrickbrandao commentedon Oct 10, 2026
manifest*.patrickbrandao commentedon Oct 11, 2026
patrickbrandao commentedon Oct 11, 2026
1803300000000), das rotas de waitlist, CRM, free-models, stars e páginas de erro públicas, e das variáveisCREDITS_*,ERROR_PAGE_PUSH_SECRET,CRM_METRICS_SECRETePIVOT_CLAIM_*(Remover waitlist, CRM, Gemini Free, free-models, GitHub stars e páginas de erro públicas #15, PR refactor(backend): remove waitlist, CRM, Gemini Free, free models, GitHub stars and error pages #60).patrickbrandao commentedon Oct 11, 2026
x-api-key, além deAuthorization: Bearer. Atenção: se os dois headers chegarem com valores diferentes, a requisição é rejeitada com M006. Isso acontece com o Claude Code e os SDKs da Anthropic quandoANTHROPIC_AUTH_TOKENeANTHROPIC_API_KEYestão definidas com valores diferentes. Defina só uma das duas.patrickbrandao commentedon Oct 11, 2026
/api/v1/overview/reliability/*. As rotas/routing/:agent/autofix,/autofix/*, as ferramentas MCP do Autofix e o comando de CLIrouting autofixforam removidos. Criar harness comautofix_enabledagora responde 400. Os headersx-manifest-providerex-manifest-auth-typenão reescrevem mais o modelo de roteamento. VariáveisAUTOFIX_*removidas.patrickbrandao commentedon Oct 11, 2026
patrickbrandao commentedon Oct 11, 2026
WINGMAN_CORS_ORIGINSvirouTHINKER_CORS_ORIGINS, sem alias (quem usava a variável antiga perde as origens extras). Telemetria, update check, discovery e Sentry foram removidos. A CLI agora aponta por padrão parahttp://localhost:2099. A tabelainstall_metadataé removida pela migração.patrickbrandao commentedon Oct 11, 2026
Pendência de changesets (should-fix S2 da revisão do #100): hoje
.changeset/config.jsonignora todos os workspaces do Thinker, então PRs com mudança visível ao usuário não conseguem gravar um changeset útil. Ao configurar o Changesets 3 aqui, garantir que mudanças visíveis gerem changeset e que as notas do 0.1.0 cubram as que entraram antes disso, entre elas o #100 (suporte a LM Studio e llama.cpp, comTHINKER_LMSTUDIO_BASE_URLeTHINKER_LLAMACPP_BASE_URL).patrickbrandao commentedon Oct 11, 2026
Nota de release (do #5, Better Auth 1.7.7): o cookie de estado do OAuth passa a ser assinado com uma chave derivada de
BETTER_AUTH_SECRET. Um login social em andamento durante o deploy precisa ser refeito; sessões já abertas continuam válidas.patrickbrandao commentedon Oct 11, 2026
Da revisão do #110 (#19), para o release:
packages/thinker/README.md:10descreve um workflow de release que só existe depois desta issue;packages/thinker/CHANGELOG.md:1ainda tem o título# manifest; epackages/frontend/vite.config.ts:36-45cai em versão vazia em silêncio se../thinker/package.jsonfaltar — falhar o build nesse caso.chore: rename npm workspaces and the version package to thinker (#110)
fix(backend): address #138 review for the Thinker identifier rename
ci: release pipeline with Changesets 3 and version 0.1.0 (#140)
feat(backend)!: rename client-visible identifiers to THINKER_*, thk_ …
fix(backend): escape error text in SSE and friendly bodies, add nosniff
chore!: rename every remaining Manifest reference to Thinker (#161)