Changelog¶
Historico canonico de versoes do toolkit. Conteudo includido literalmente do
CHANGELOG.md
da raiz — qualquer release nova aparece aqui no proximo build CI.
Changelog¶
Todas as mudanças relevantes deste projeto são documentadas aqui.
O formato segue Keep a Changelog e este projeto adere a Semantic Versioning.
5.21.0 - 2026-07-17¶
Fecha dois gaps de execução autônoma levantados em dogfooding (PR #37):
a triagem interativa da specify não tinha atalho para orquestradores
(que não têm usuário presente para responder o menu), e a métrica
tool_calls das ondas era sempre 0 porque nenhum mecanismo automático
invocava o tick. Mudanças aditivas — sem breaking changes.
Added¶
- Hook PostToolUse
posttooluse-tool-call-tick.sh(runtime agente-00c): alimenta de verdade a métrica de tool calls por onda. Matcher*(todas as tools), fail-OPEN absoluto (qualquer falha = no-op exit 0 — é métrica, nunca guarda), mesma detecção de execução ativa e precedência dopretooluse-bash-guard.sh(agente-00c vence; entre feature-00c, menor short-name; statusem_andamento/aguardando_humano). Decisão de design: o hook nunca toca ostate.json— PostToolUse dispara concorrente aos writes transacionais do orquestrador e um read-modify-write clobberaria Decisões/bloqueios; o tick vai num sidecar append-only<state-dir>/tool-call-ticks.log. Provisionado porapply_guard_hooks()junto do guard (best-effort: catálogo antigo sem o hook não é erro);settings.snippet.jsonganha o blocoPostToolUse. Cobertura:tests/test_posttooluse-tool-call-tick.sh(11 cenários) + 2 cenários novos emtests/cstk/test_hooks.sh. - ETAPA 0.0 na skill
specify(atalho de modo autônomo): com execução 00c ATIVA (AGENTE_00C_STATE_DIRsetada, OUstate.jsonde agente-00c/feature-00c com statusem_andamento/aguardando_humano), a invocação pelo orquestrador pai vale como a confirmação explícita da triagem — menu 0.3 não é apresentado e o pressuposto é registrado em uma linha no output. Refinamento sobre a detecção da seção de cache: state em disco só conta com status ativo, então um state antigo/concluído no repo não pula a triagem de uma invocação manual. A classificação 0.1 segue rodando como auditoria (divergência bugfix/refactor é registrada, não aborta).
Changed¶
state-ondas.sh+budget.shagregam o sidecar de ticks:endsoma campo do state + sidecar no fechamento da onda (e consome o sidecar);startzera a janela de contagem;budget.sh check|statussomam mid-onda. Com isso o thresholdtool_calls_threshold_wave(default 80) passa a comparar com número real — estourar gera fim de onda gracioso, não aborto; o valor 80 nunca foi validado com contagem real e deve ser recalibrado com dados de execução.tool-call-tickmanual preservado (legado), mas NÃO deve ser usado em paralelo ao hook (contagem dobrada).- Prosa dos orquestradores (
agente-00c-orchestrator.mdeagente-00c-feature-orchestrator.md): a instrução manual de tick por Bash call (advisory, nunca cumprida — a mesma classe de falha que motivou enforced-guards) foi substituída pela nota do mecanismo automático via hook.
5.20.0 - 2026-07-16¶
Nova skill converge: fecha o loop de reconciliação entre documentação
(spec/plan/tasks) e o estado REAL do código, atuando como gate incondicional
entre execute-task e review-task nos orquestradores autônomos. Skill nova
aditiva — sem breaking changes.
Added¶
- Skill
converge(featureskill-converge): reconcilia a intenção documentada (spec/plan/tasks) contra o estado ATUAL do código do projeto-alvo e apenda gaps acionáveis como nova fase detasks.md, classificando cada divergência comomissing/partial/contradicts/unrequested. 5 scripts POSIX novos emglobal/skills/converge/scripts/:extract-intent.sh(paths declarados + origem),extract-must.sh(princípios MUST/NON-NEGOTIABLE da constitution),severity.sh(função pura tipo×prioridade×must→severidade),converge-tasks.sh(mecânica determinística dotasks.md: next-phase/existing-keys/append-phase) epath-contains.sh(contenção de blast radius com resolução de symlinks, fail-closed).SKILL.mdtraz o fluxo de agente + rubrica de classificação determinística, comtemplates/convergence-phase.mdeevals/triggers.jsonlpara eval de disparo. Cobertura: 6 arquivos de teste novos (test_extract-intent.sh,test_extract-must.sh,test_severity.sh,test_converge-tasks.sh,test_path-contains.sh,test_converge-orchestrator-gate.sh), 109 cenários no total. - Gate incondicional
convergenceemagente-00c-orchestrator.mdeagente-00c-feature-orchestrator.md: disparado automaticamente na fronteiraexecute-task → review-task, diferente dos demais gates de qualidade (validate-documentation/validate-docs-rendered/owasp-security) — não é opt-outable. A própria skillconvergeauto-detecta modo autônomo (viaAGENTE_00C_STATE_DIR) e auto-registra seu two-step (state-decisions.sh register+record-skill); findingsCRITICALviramBloqueioHumano, demais viram Decisão informativa.quickstart.mdScenario 11 documenta o roteiro passo-a-passo do cenário de integração ponta-a-ponta. - Perfis de instalação:
convergeregistrado emscripts/profiles.txt.insobsdd(gate obrigatório dos orquestradores — mesma razão devalidate-documentation/validate-docs-rendered/owasp-security) ecomplementary(uso standalone). Perfilsdd16→17 skills,complementary12→13,all30→31;README.mdatualizado (contagem de skills, tabela de skills complementares, tabela de perfis de instalação).
5.19.0 - 2026-07-15¶
Added¶
- knowledge.db schema v9 (
executions-target-path): coluna aditivatarget_project_path TEXT(nullable) na tabelaexecutions, fechando o gap do consumidor (cstk-panel #7) que não tinha como localizar o projeto no filesystem sem configuração manual (CSTK_PROJECT_PATHS). Ocstk recall --ingestagora persiste o caminho do projeto-alvo lido do state.json (.execution.target_project_path, com fallback legado.execucao.projeto_alvo_path) — valor BRUTO, sem canonicalização nem validação no ingest (responsabilidade do consumidor); campo ausente/vazio →NULLsilencioso (degradar-nunca-quebrar). - Migração v8→v9:
ALTER TABLE ADD COLUMNidempotente guardado porPRAGMA table_info(mesmo padrão da colunasessiondo v8); DB v8 existente migra sem perda, DB nova nasce v9,waveseknowledge_ftsintocadas. Puramente aditiva: consumidores antigos que ignoram a coluna continuam funcionando. - Backfill em re-ingestão: como o upsert é pela chave natural
(
project,feature,wave,source_id), re-rodar--ingestsobre um state já indexado preenche a coluna em linhas pré-existentes, sem duplicatas. - Cobertura: 3 cenários novos em
tests/cstk/test_recall.sh(EN + fallback pt + ausente→NULL; backfill idempotente sobre DB v8; migração v8→v9 idempotente com linhas v8 intactas) + expectativas deschema_versionatualizadas 8→9 nos cenários existentes.
5.18.0 - 2026-07-11¶
Added¶
cstk serve: asset de release verificável preferido ao auto-tarball da API: o guard fail-closed do 5.15.0 (enforced-guards) bloqueava todocstk serve/--updatecomunverifiable-blockedporque procurava o checksum em<tarball_url>.sha256— endpoint de auto-tarball da API do GitHub, que não tem como ter arquivo publicado; o único caminho era--allow-unverified. Agora_serve_download_verify_extract(modos nativo E--docker) prefere um par de assets<nome>.tar.gz+<nome>.tar.gz.sha256publicado na release (primeiro.tar.gzna ordem da API cujo sibling exato exista; pareamento por igualdade de string completa, nunca substring) e instala com outcomeverified, sem bypass. Sem par completo, fallback ao auto-tarball (fail-closed intacto); mismatch segue bloqueio absoluto; o asset passa pela MESMA allowlist de hosts (trusted-hosts.sh). Opackage_urldoenforcement-log.jsonlregistra a URL de fato baixada (asset ou auto-tarball). Lado emissor: workflowrelease.ymladicionado ao repo do cstk-panel publica o par a cada tag (idempotente com release criada manualmente). 4 cenários novos emtests/cstk/test_serve.sh(55 no total).
5.17.0 - 2026-07-11¶
Feature panel-docker, via pipeline SDD feature-00c. Aditiva/não-breaking:
o modo nativo do cstk serve permanece 100% inalterado quando --docker
está ausente.
Added¶
cstk serve --docker: modo opt-in de container para o painel web. Roda ocstk-paneldentro de um container Docker local em vez de nativamente no host — útil quandonpm/nodenão estão disponíveis na máquina. Pré-flight fail-closed checadockerno PATH e o daemon acessível (docker info) ANTES de qualquer rede, com mensagens distintas e acionáveis para cada causa. Reusa o MESMO mecanismo de download/allowlist/integridade fail-closed já em produção no modo nativo (--allow-unverified/CSTK_SERVE_ALLOW_UNVERIFIEDaplicam-se igualmente) — sem segunda fonte de instalação.- Imagem local multi-stage (
node:22-alpine, fixada por digest nos dois estágios;better-sqlite3compilado do fonte para musl no estágio de build) construída a partir da mesma árvore-fonte verificada usada no modo nativo; nunca publicada em registry remoto. Um encaminhadorsocat(0.0.0.0:8080 -> 127.0.0.1:3001dentro do container) resolve o bind hardcoded do painel em127.0.0.1. --update/--reinstallcompõem com--docker: reconstroem a imagem (em vez do diretório de instalação nativo) —--updatesó reconstrói se houver release nova (best-effort);--reinstallsempre vence sobre--update, em qualquer ordem dos flags.docker runhardened por padrão: usuário não-root,--cap-drop ALL,--security-opt no-new-privileges, rootfs--read-only+tmpfspara/tmp,--init(tini) +--rm. Container de nome determinístico (cstk-panel) auto-reconciliado a cada execução (remanescente de uma execução anterior é removido antes de subir).- Monta o diretório do
~/.claude/cstk/(ou o diretório de$CSTK_KNOWLEDGE_DB, se definida) somente leitura dentro do container. Verificado empiricamente contra o índice de produção (WAL, 13.5 MB): leitura read-only sobre o mount:rofunciona semimmutable=1(RISCO #1 tecnicamente fechado) com paridade EXATA nas 12 tabelas de/api/v1/healthvssqlite3nativo; gravações concorrentes no host (nova onda deagente-00c/feature-00c, oucstk recall --ingest) ficam visíveis na PRÓXIMA requisição do painel containerizado sem reiniciar o container; e um índice ausente degrada graciosamente (HTTP 200,dbReachable:false), em paridade com o modo nativo. - Encerramento gracioso (
Ctrl+C→docker stopcom o mesmo grace period de 5s do modo nativo). --helpdocstk servedocumenta--dockere a semântica docker-specific de--update/--reinstall.- Nova suíte opt-in
tests/docker/run-panel-docker-smoke.sh(Docker real, fora de./tests/run.sh) automatiza os 3 comportamentos acima como regressão contínua. Cobertura hermética (sem daemon) emtests/cstk/test_serve-docker.sh(53 cenários) + extensão detests/cstk/test_serve.sh(regressão do modo nativo intacto). - Documentação:
docs/specs/panel-docker/(spec, plan, research, data-model, contracts, quickstart, checklists).
5.16.1 - 2026-07-10¶
Bugfixes derivados de uma varredura da knowledge.db (sugestões acumuladas por
execuções 00c passadas), validados contra o código atual antes de aplicar.
Fixed¶
state-ondas.sh git-commitquebrava em git worktree (afetacstk session): o check de repositório usava[ -d "$_pap/.git" ], mas em worktree o.gité um ARQUIVO (gitdir: ...), não diretório → falso-negativo "não é repositório git". Trocado porgit -C "$_pap" rev-parse --is-inside-work-tree(worktree/ submódulo-safe, alinhado aocommit-mode.sh). Regressão coberta porscenario_git_commit_worktree.report.shafirmava "execução abortada" em feature-00c concluída: o campo "Stack final" do Resumo Executivo imprimia "não aplicável — execução abortada antes de definir" sempre quesuggested_stackera null (sempre, em feature-00c, que herda a stack do projeto), contradizendo oStatus=concluidana mesma tabela. O fallback agora é condicional ao status: mensagem de "abortada" só parastatus=abortada; caso contrário, "não aplicável (herdada do projeto / não definida)". Regressão coberta porscenario_stack_final_condicional_ao_status.review-task/SKILL.mdreferenciava subcomandos inexistentes: a §4.5 (half-records) mandavastate-decisions-reconcile.sh detecterepair --dry-run/--apply, mas o script só expõecheck(detect-only) — rodardetectsaía com exit 2. Corrigido parachecke reescrito para refletir que não há subcomando de repair (resolução de half-record é manual na retomada).validate-documentation(perfil--runbook): falso-positivo de placeholder em corpus pt-br. O check de placeholder residual casava o token soltoTODO, colidindo com "TODO/TODA" em ênfase CAIXA-ALTA (ex.: "para TODO comando"), legítimo em prosa pt-br. Passa a exigir o marcador delimitado (TODO:ouTODO(). (O motorvalidate-sdd.shintroduzido em 5.16.0 já era imune — usa delimitadores[...].)
5.16.0 - 2026-07-10¶
Origem: 4 sugestões geradas por IA em outra máquina, validadas contra o código
antes de implementar (Princípio VI). Duas features via pipeline SDD feature-00c.
A sugestão que apontava cycles.sh check --fase era confabulação (a flag não
existe em nenhum agent file) e foi descartada.
Added¶
validate-documentation: perfil de validação de artefatos SDD (sug-001/sug-003). Novo motor POSIXglobal/skills/validate-documentation/scripts/validate-sdd.shcom dois perfis:spec-profile(sem termos de stack/implementação, FR/SC sem ID duplicado, success criteria mensuráveis e technology-agnostic, seções obrigatórias,[NEEDS CLARIFICATION]≤ 3) eplan-profile(rótulo[EXISTENTE]/[PROPOSTA]em claims de contrato, FR/SC citados existem na spec, zero placeholder de template não-substituído). Acionamento por flag--sdd-spec/--sdd-planou auto-detecção por pathdocs/specs/*/. FormatoFINDING|<severity>|<code>|<msg>, exit 0 (ok/avisos), 1 (erro), 2 (uso). A skill antes só tinha os perfis UC (default) e--runbook.SKILL.mdganhou as seções dos dois perfis + tabela de fronteira de não-duplicação comanalyze(cross-artifact) evalidate-docs-rendered(render/links). Cobertura emtests/test_validate-sdd.sh(19 cenários).
Fixed¶
- feature-00c: falso breach de wallclock na retomada (sug-004). Na
retomada (
/feature-00c-resume), o Loop deagente-00c-feature-orchestrator.mdmediabudget.sh checkantes de iniciar a onda, medindo o wallclock desde.budgets.current_wave_startda onda anterior já fechada (state-ondas.sh endnão reseta o campo) → estouro de orçamento falso. Corrigido inserindo o passo3.bis(state-ondas.sh startantes do 1ºbudget.sh check), com guarda anti-duplicação via subcomandowave-status(só inicia se a onda não estiveropen). O comportamento correto doagente-00c-orchestrator.md(que já inicia a onda antes do budget check) não foi alterado. Não silencia o check — breach legítimo dentro de onda aberta continua disparando. - Drift doc↔runtime nos agent files 00c (sug-002).
state-ondas.sh startnão aceita--fase(etapas viaend --add-etapa);spawn-tracker.sh checknão tem flag--max-depth(o teto é a constante interna_ST_MAX=3); o enum de--motivo-terminousabloqueio_humano, nãobloqueio. Os exemplos divergentes emagente-00c-feature-orchestrator.mdcustavam 1 retry por onda.
5.15.0 - 2026-07-05¶
Security¶
- Restrições de tools dos 7 agents agora são REAIS: os agents declaravam
restrições em
allowed-tools:(lista YAML), mas em agents o campo honrado pelo Claude Code étools:(CSV) —allowed-tools:é o campo de SKILL.md/slash-commands. Resultado: TODAS as restrições estavam silenciosamente inertes (o harness listava os 7 agents como "All tools"). Convertido paratools:nos 7; odata-veracity-verifiervira READ-ONLY de verdade (Read, Grep, Glob— Bash removido: quebrava o read-only viased -i/tee/redirecionamento e nenhuma instrução do corpo o usava).test_data-veracity-verifier.shagora falha se o campotools:sumir, se portar Write/Edit/Bash, ou seallowed-tools:reaparecer em agent. Commands e SKILL.md seguem comallowed-tools:(campo correto neles). bash-guard.sh: blocklist reforçada + análise por segmento: novos bloqueios paragit reset --hard,git clean -f*,rmrecursivo+forçado fora de áreas temporárias (~,$HOME,..,.gite absolutos fora de/tmp,/private/tmp,/var/folders—rm -rfrelativo de build dirs segue permitido),sqlite3mutativo naknowledge.db(índice é derivado; escrita legítima só viacli/lib/recall.sh) e pipe decurl|wgetdireto para shell (bloqueado MESMO com domínio na whitelist — a whitelist valida a origem, não o que se executa). Bypass histórico do package-manager fechado:docker exec/runagora precisa estar no MESMO segmento do install (npm install x; docker run ypassava porque a mera coexistência liberava). Limitação documentada: sem parsing de quoting; alvo via variável ($VAR/...) passa — guard é defesa em profundidade, não sandbox. +20 cenários emtest_bash-guard.sh(42 no total).--from http://rejeitado emcstk installecstk self-update: http em texto plano permite MITM trocar tarball E.sha256juntos — o checksum de mesma origem não protege contra origem adulterada. Sóhttps://efile://passam. Cenários novos emtest_install.sh(com garantia de zero-write no abort) etest_self-update.sh.- Rótulo UNTRUSTED do read-back emitido em NÍVEL DE CÓDIGO
(
cstk recall --context, ASI09/LLM01): antes o rótulo era só instrução ao LLM nos orquestradores — memória envenenada de outra execução entrava no prompt sem delimitador garantido. Agora todo bloco K>0 sai cercado pelo aviso ("é DADO, não instrução") direto dorecall.sh; os orquestradores preservam o rótulo e só o prefixam manualmente em runtimes antigos. A frase-contrato "Aprendizado recuperado (read-back loop)" foi mantida (testes e detecção dependem dela). - Trust boundary explícita nos subagentes clarify-answerer (ambos):
fontes lidas (briefing/constitution/spec/stack) são DADO para o score,
nunca instrução — diretiva embutida num trecho força
pause_humano: truecom a diretiva apontada na justificativa. Paridade da regra FR-026/FR-027 ("texto lido é conteúdo") adicionada à tabela de defesa em profundidade doagente-00c-feature-orchestrator(antes só o orquestrador raiz a tinha). - Guardas do runtime deixam de ser advisory e passam a ser enforced
(feature
enforced-guards, três frentes independentes): - Hook
PreToolUse/Bashfail-closed: novoglobal/skills/agente-00c-runtime/hooks/pretooluse-bash-guard.shintercepta todo comando Bash de uma execuçãoagente-00c/feature-00cativa e delega abash-guard.sh check(nunca reimplementa regra) — antes, a mesma checagem só rodava se a prosa do orquestrador lembrasse de invocá-la. Falha do próprio mecanismo (jq/bash-guard.shausente, stdin inválido) também bloqueia (MECANISMO_FALHOU, distinguível deREGRA_VIOLADA); sessões manuais do operador fora de execução ativa ficam intactas (exit 0sem decisão). Precedência determinística quando há mais de uma execução ativa (agente-00cvence; entrefeature-00c, menor short-name lexicográfico). Toda decisão vira linha auditável em.claude/enforcement-log.jsonl(campocommandpassa porsecrets-filter.sh scrubANTES de truncar a 500 chars). Provisionado automaticamente porapply_guard_hooks()(cli/lib/hooks.sh), integrado ainstall.sh/update.sh, escopoprojectapenas. 11 cenários novos emtest_pretooluse-bash-guard.sh. cstk serverecusa iniciar sem integridade confirmada por padrão: o antigo ramo "sem.sha256disponível → avisa e prossegue" virou bloqueio (unverifiable-blocked); bypass explícito e auditado via--allow-unverified/CSTK_SERVE_ALLOW_UNVERIFIED=1(aviso de alta visibilidade em stderr toda vez que dispara,bypass_methodlogado); divergência de checksum continua bloqueando sempre, sem bypass possível (regressão preservada). Linhasource: "serve-integrity"no mesmoenforcement-log.jsonl. Extensão detest_serve.sh.- Allowlist de hosts confiáveis compartilhada: novo
cli/lib/trusted-hosts.shdefineCSTK_TRUSTED_RELEASE_HOSTS(github.com,codeload.github.com,objects.githubusercontent.com,api.github.com— mesma lista já usada peloserve.sh, agora compartilhada) com match EXATO case-insensitive (userinfo removido antes de comparar; semgrep/substring — previne CWE-290 tipogithub.com.evil.com). Consumida também porinstall.sh(_install_resolve_urls) eself-update.sh(_su_resolve_urls): host fora da lista é rejeitado ANTES de qualquer download.file://permanece isento (fluxo de dev). Constante fixa, não overridable via env (alargar a allowlist em runtime silenciaria o mesmo tipo de enfraquecimento que a feature existe para fechar). 13 cenários novos emtest_trusted-hosts.sh+ extensões emtest_install.sh/test_self-update.sh.
Spec completa (spike de propagação do hook a subagentes, threat model,
data model, 10 cenários de quickstart) em
docs/specs/enforced-guards/.
Added¶
state-ondas.sh record-skill --kind skill|gate(defaultskill, higiene da métrica): separa SKILLS reais (invocadas via tool Skill) de GATES determinísticos de script (ex.:validate-tasks-template.sh). A ingestão da knowledge.db passa a EXCLUIRkind=gateda tabelaskillse dowaves.n_skills(entradas legadas semkindseguem contando — compat). Motivo: a métrica estava poluída com gates e até comandos de build/lint (go build,eslint,workout_service...) gravados como "skills". Orquestradores instruídos:--kind gatepara scripts determinísticos; comandos de build/test/lint NUNCA viarecord-skill(pertencem a.tasks[]/.events[]). Cenários novos emtest_state-ondas.sh(3) etest_recall.sh(W8).- Seção "Disciplina de output (anti-estouro)" nos dois orquestradores:
execuções reais foram perdidas por estouro de limite de output em ondas
longas (sinal do
/insights). Regras duras: nunca imprimir artefato inteiro no turno (path + <= 3-5 linhas), exploração ampla via Glob/Grep dirigidos sem dumps, sumário de onda <= 40 linhas, saída de skill/gate registrada como RESUMO na Decisão. docs/fluxo-orquestradores-00c.md: diagramas Mermaid (flowchart) do ciclo completo dos orquestradores — setup do command pai, loop de ondas, sub-fluxo clarify, gates, bloqueios e condições terminais. Extraído das 4 fontes canônicas (commands + orchestrators), sem invenção.
Deprecated¶
- Skill
image-generation: marcada como deprecated (deprecated: true,deprecated_since: 5.15.0,remove_in: 6.0.0). Fora do escopo do toolkit (documentação/SDD): sem wiring com orquestradores ou outras skills, sem uso registrado na knowledge.db e sem substituto planejado. Continua funcionando até a remoção na 6.0.0.
Changed¶
- Boot tax: descriptions enxugadas (o catálogo de skills é carregado no
contexto de TODA sessão):
decision-tree613 → ~190 bytes (deprecated desde a 5.6.0 e ainda pagava a description mais longa do catálogo) emodel-selector587 → ~360 bytes (removida redundância; triggers e contrato suggest-only preservados).planee2e-integration-flowficaram INTACTAS de propósito: foram ajustadas recentemente e um trim sem rodar o harness de trigger-eval arriscaria regressão de disparo. - Housekeeping de specs: 5 specs 100% concluídas movidas para
docs/specs/_archived/(atomic-commit-pr,panel-installer,recall-memory-mirror,recall-worktree-identity,show-tips) + o relatório soltoreview-features-report.md; referências em README e comments de scripts atualizadas para os novos paths.
Fixed¶
- Profile
sdd(default) não instalava 4 skills que os orquestradores invocam:review-features(fase TERMINAL do/agente-00c) e os 3 gates de qualidade obrigatórios (validate-documentation,validate-docs-rendered,owasp-security, invocados após specify/plan/create-tasks). Umcstk installdefault (profilesdd) instalava commands + agents do orquestrador, mas a execução quebrava ao invocar a primeira skill ausente — mesma classe do bug histórico doagente-00c-runtimeórfão. Profilesdd: 12 → 16 skills. Regressão gateada emtest_build-release.sh(greps de presença) e counts atualizados emtest_quickstart-e2e.sh. NOVO cenárioscenario_profile_counts_match_sourcesemtest_doc-counts.shcompara os números da tabela de profiles do README com as fontes reais (profiles.txt.in+ derivação doall) — o README declarava "10 sdd / 9 complementary / 29 all" com 16/12/30 reais e nada falhava.
5.14.1 - 2026-06-23¶
Fixed¶
reconcile-taskscura títulos vazios em.tasks[](state-ondas.sh): ondasexecute-tasklongas que gravavamrecord-taskem lote sem--titulodeixavam entradas comtitle=""(sintoma: N tasks "sem título" com a mesma contagem de testes da suíte da onda, p.ex. 18×39/39). Oreconcile-tasksagora, além do back-fill de tasks ausentes, cura entradas já presentes com título vazio, buscando o título notasks.mdem duas granularidades — heading (### N.M Título) e checkbox (- [x] N.M.K texto), com precedência do heading. A fonte é sempre o backlog (rastreável, nunca inventada — Princípio VI);tests_run/tests_passednão são tocados (sem fonte por task → não fabrica). Só fora de--dry-run; a contagem de stdout (tasks back-filled) é preservada. Comoreview-task§4.6 chamareconcile-tasks, estados afetados se auto-curam no próximo review. Cobertura: 4 cenários novos emtests/test_state-ondas.sh.
5.14.0 - 2026-06-18¶
Added¶
- Princípio VI da constituição — Veracidade de Dados / Zero Fabricação (NON-NEGOTIABLE): nenhum artefato gerado pelo toolkit pode conter dado factual inventado. Assinaturas de request/response (nomes de propriedades, tipos, shape de payload), URLs/endpoints/querystrings e valores concretos (financeiros, status de registro, IDs, datas, resultados de API) só podem ser escritos se vierem de fonte rastreável: código-fonte, OpenAPI/Swagger, doc oficial, ou resposta de uma chamada de fato observada. Sem fonte e sem de onde extrair → bloqueio humano, nunca suposição plausível. Generaliza o aterramento de evidência de segurança (anti-confabulação) dos orquestradores para qualquer dado factual. Constituição bumpada
1.1.0 → 1.2.0(MINOR); Decision Framework itens 1 e 4 incluem VI no conjunto NON-NEGOTIABLE. Verdocs/constitution.md. - Aterramento de dados factuais nos orquestradores autônomos (
agente-00c-orchestrator,agente-00c-feature-orchestrator): novo bloco "Aterramento de DADOS FACTUAIS (anti-fabricação)" que roteia falta-de-fonte parabloqueios.sh register(score 0) + encerramento gracioso da onda (Schedule intent: none; motivo=bloqueio_humano), em vez de inventar. Inclui diretiva de double-check de veracidade ao fecharspecify/plan, delegada ao novo subagentedata-veracity-verifier(com fallback inline quando o spawn está indisponível); item sem fonte vira bloqueio humano. - Subagente
data-veracity-verifier(global/agents/data-veracity-verifier.md): auditor READ-ONLY que recebeartifact_paths+allowed_sourcese classifica cada dado factual concreto (assinaturas request/response, URLs/endpoints/querystrings, valores) comoSOURCED/PROPOSAL/UNSOURCED, devolvendo vereditoclean | has_unsourced+ açãoproceed | human_block. Não corrige nada — só reporta; default cético (na dúvida →UNSOURCED) e auto-aterramento (não pode alegar fonte sem citar a substring literal). Cobertura emtests/test_data-veracity-verifier.sh(8 cenários, incluindo trava de read-only noallowed-toolse fiação nos 2 orquestradores). - Princípio-base obrigatório no gerador de constituição (skill
constitution): toda constituição de projeto gerada passa a incluir, mesmo sem o usuário pedir, um princípio NON-NEGOTIABLE de Veracidade de Dados — Zero Fabricação (com texto-semente), espelhando o Princípio VI deste toolkit.
Changed¶
- Guardrails anti-invenção nas skills produtoras de conteúdo factual:
specify(§3.2): a regra "usar defaults razoáveis" passa a explicitar que defaults valem para políticas de design (retenção, performance, auth) e nunca para dado factual de sistema externo (nomes de campos de payload, assinaturas, endpoints, valores) — sem fonte →[NEEDS CLARIFICATION].plan(§5.2 Contratos de Interface): contrato de interface existente não se inventa — assinaturas/URLs/endpoints devem vir da fonte real; sem fonte → bloqueio humano. Distingue contrato afirmado-como-real de contrato[PROPOSTA — a validar na implementação].- Regra inviolável no
CLAUDE.mddo projeto: nova seção no topo apontando para o Princípio VI e o mecanismo de bloqueio dos orquestradores.
5.13.0 - 2026-06-13¶
Added¶
- Modo atomic-commit opt-in para agente-00c e feature-00c: quando ativado no inicio da execucao (
y/Y/yes/sim; default desabilitado), os orquestradores geram commits automaticos Conventional Commits apos cada etapa de artefato (specify,plan,clarify,checklist,create-tasks) e um commit ranged por grupo de tasksexecute-taskcomoutcome=passna mesma onda. Tasks comoutcome=failsao excluidas. O campo.atomic_commit_enablede persistido nostate.jsone relido em resumes sem re-prompt. No finalize terminal (review-features/review-task), push + PR e disparado viacstk session pr(path confinado —git pushcru permanece bloqueado pelobash-guard.sh). Spec:docs/specs/atomic-commit-pr/. - Helper
commit-mode.shemglobal/skills/agente-00c-runtime/scripts/: subcomandosis-enabled,set-enabled,guard-branch,stage-message,task-message,finalize. Guard de branch default (exit 3 se HEAD = main/master via remote HEAD ou fallback) impede commits/push acidentais na branch default. Cobertura emtests/test_commit-mode.sh(23 cenarios, INV-1..8 + FR-015(b)/(c)). - Flag
--atomic-commit <true|false>nostate-rw.sh init: persiste.atomic_commit_enabledno schema; omitida =>false(retro-compativel). Validacao emstate-validate.sh(aceitatrue,falseou ausente). Cenarios emtests/test_state-rw.sh. - Prompt opt-in nos 4 commands de entrada (
/agente-00c,/feature-00c,/agente-00c-resumee/feature-00c-resume): pergunta com default "no" nos commands de inicio; resumes omitem o prompt e leem o estado dostate.json. - Nota documental em
bash-guard.sh: esclarece quegit pushcontinua bloqueado mesmo no modo atomic; o push aprovado ocorre exclusivamente viacstk session pr(caminho confinado, FR-028 / Constitution §V intactos).
5.12.0 - 2026-06-05¶
Added¶
- State-dirs nascem com
.gitignore(*) semeado na criação: o estado dos orquestradores é runtime/transacional e nunca deve ser versionado — um repo trackeandostate.jsonfoi o gatilho do bug.claude/.claude/corrigido em 5.11.1. Semeadura nos DOIS pontos de criação:state-rw.sh::_sr_ensure_state_dir(init e writes) estate-lock.sh acquire(que cria o state-dir ANTES do init no fluxo do command pai). Best-effort e idempotente:.gitignorepré-existente do operador nunca é sobrescrito; falha de escrita não aborta o fluxo. Cobreagente-00c-state/efeature-00c-state/<short>/(incluindostate-history/,backups/,whitelist.txt). NÃO cobre artefatos na raiz de.claude/(agente-00c-report.md,agente-00c-suggestions.md) — gitignore desses fica a cargo do repo alvo. Repos que JÁ trackeiam state precisam degit rm -r --cachedmanual (gitignore não destrackeia).
5.11.1 - 2026-06-05¶
Fixed¶
cstk session start: diretório espúrio.claude/.claude/aninhado na worktree quando o repo alvo versiona arquivos de.claude/no git. O checkout dogit worktree addmaterializa<wt>/.claude/antes da cópia, ecp -R src dstcom destino existente copia a origem PARA DENTRO dele (semântica POSIX) — criando<wt>/.claude/.claude/com os artefatos runtime (agente-00c-state/,agente-00c-report.md,scheduled_tasks.lock...) fora do alcance da blocklist FR-002. Fix em_session_copy_claude_filtered(cli/lib/session.sh):mkdir -p+ cópia de CONTEÚDO (cp -R "$src/." "$dst"), merge idempotente que nunca aninha, exista ou não o destino. Cenário de regressãoscenario_start_claude_tracked_no_nestingemtests/cstk/test_session.sh(provado falhar no código pré-fix). Runtime instalado requercstk self-updatepara receber o fix.
5.11.0 - 2026-06-05¶
Added¶
- Feature
recall-worktree-identity: identificação canônica de projeto real vs worktree de sessão no knowledge.db (schema v8). Resolve bug v4.7.2 onde ingestão de execuções em worktrees criadas porcstk session startregistrava projeto fantasma na knowledge.db, quebrando anti-eco emcstk recall --exclude-featuree causando retorno de resultados de features diferentes no mesmo projeto.
Componentes entregues:
-
Schema v8 (knowledge.db): coluna
session TEXTadicionada emexecutionsewavesvia migração idempotenteALTER TABLE. FTS (knowledge_fts) intocada (não suporta ALTER). Campos congelados no state.json (canonical_project,session_name) ingeridos conforme layout (agente-00c vs feature-00c). -
Derivação 3 camadas (
recall_derive_canonical): resolve o nome canônico do projeto com fallback robusto:- Camada 1 (congelada):
.execution.canonical_projectdo state.json (via--canonical-projectflag do command pai, preenchida no init se worktree detectada) - Camada 2 (git ao vivo): worktree real —
git -C $PAP rev-parse --git-common-dir, normalizar relativo→absoluto, extrair basename do dirname - Camada 3 (fallback):
basename "$TARGET_PROJECT_PATH"(nome de fallback final)
- Camada 1 (congelada):
-
Bootstrap com detecção de worktree (commands pai):
/feature-00ce/agente-00cagora detectam se rodam numa worktree via sequência POSIX determinística antes destate-rw.sh init. Detecção congelada no state.json para garantir imutabilidade após sessão removida (FR-008). -
Paridade anti-eco: both agent docs (
agente-00c-orchestrator.mdeagente-00c-feature-orchestrator.md) agora derivamEXCLUDE_FEATUREdo campocanonical_projectcom fallback para basename bruto, garantindo consistência de filtragem entre ingestão (recall.sh) e consumo (read-back loop). -
State-rw.sh flags novas:
--canonical-project NAMEe--session-name NAMEopcionais no init; campos ausentes quando flags omitidas (FR-010, retro-compat). -
Cobertura de teste: 7 cenários novos em
tests/cstk/test_recall.sh(roundtrip v8, fallback 3 camadas, anti-eco, --reindex), 4 testes emtest_state-rw.sh(flags novas + validação).
Requisitos entregues: FR-001 até FR-010, SC-001 até SC-006 da feature spec.
Changed¶
-
cli/lib/recall.sh:RECALL_SCHEMA_VERSIONbumped de 7 para 8; campossession,canonical_projectagora ingeridos emexecutionsewaves; derivação deproject(agente-00c layout) efeature(feature-00c layout) centralizada em funçãorecall_derive_canonicalcom fallback 3-camadas robusto;--reindexusa mesma derivação que ingest ao vivo (SC-003/SC-004). -
global/skills/agente-00c-runtime/scripts/state-rw.shestate-validate.sh: flags--canonical-project,--session-nameadicionadas ao init; validação aceita campos como opcionais (retrocompat FR-010); jq merge condicional garante estado minimalista. -
Agent orchestrators:
agente-00c-orchestrator.mdeagente-00c-feature-orchestrator.mdatualizados para derivarEXCLUDE_FEATUREcom fallback canônico, resolvendo paridade anti-eco após congelamento do projeto em state.json (contrato ingest-derivation.md §4).
Fixed¶
- Bug v4.7.2 revisitado: filtragem de anti-eco
--exclude-feature(para impedir retorno de resultados da própria execução ingerida) agora usa coluna SQLprojectderivada por 3 camadas em vez de basename bruto, eliminando falsos-positivos de worktrees removidas cujo nome coincida com o nome da feature de outra execução real.
5.10.2 - 2026-06-04¶
Fixed¶
feature-00c.mdpre-flight (sanitize descricao): o passo 2 do pre-flight invocavasanitize.shsem subcomando (printf … | sanitize.sh), o que cai no branch de uso incorreto do script (subcomando obrigatório, por design) →exit 2com stdout vazio. O orquestrador capturava o resultado vazio em_desce o exit não-zero abortava o pre-flight de/feature-00cantes de tocar o disco. Corrigido parasanitize.sh limit-length --max 500(emite a descrição truncada em stdout, conforme a intenção documentada "truncar"). Era a única invocação bare entre todos os callers (agente-00c.md,agente-00c-resume.mde os orquestradores já passavam subcomando válido).
Changed¶
test_doc-subcommands.sh(lint de invariante): além de validar subcomandos- fantasma, agora também pega a classe-irmã "script de dispatch invocado sem subcomando" (… | <script>.sh)/| <script>.shem fim-de-linha) nos docs de command/agent. Fecha a lacuna que deixou o bug acima passar (nenhum teste exercita o bash dentro dos.mdde command). Meta-self-check cobre o detector.
5.10.1 - 2026-06-04¶
Fixed¶
secrets-filter.sh scrub --env-file(issue #21): o scrub de valores do.envabortava comsed: RE error: repetition-operator operand invalidquando um valor começava por metacaractere de regex (ex.: número E.164 do TwilioTWILIO_WHATSAPP_NUMBER=+5527...). O valor era interpolado numsed -E(ERE), mas o escape só cobria metacaracteres BRE (] \ / $ * . ^ [), deixando+ ? ( ) { } |crus — um valor iniciado por+virava operador de repetição sem operando, o filtro saía com exit 1 e stdout vazio, bloqueando a etapa obrigatória de defesa em profundidade (FR-030) antes de gravar report/suggestions/issue. Corrigido trocando a substituição para BRE (sedsem-E), onde+/?são literais e o escape existente passa a ser suficiente. Cobertura de regressão para valores iniciados em+(E.164) e*.
5.10.0 - 2026-06-03¶
Added¶
- Harness de trigger-eval (
tests/trigger-eval/): mede se adescriptionde cada skill dispara na hora certa — e qual skill é confundida com qual — via juiz LLM que vê só as descriptions. Absorve o loop de disparo doskill-creatorda Anthropic. Seed de 92 queries emglobal/skills/<n>/evals/triggers.jsonl(tiersbase/hard/gen) +negatives.jsonl. Runners (tool Workflow):run,harden(gera→ground-check→julga),sweep(multi-modelo) eab(A/B causal de uma description); coletor POSIX+jqcollect.sh. Periódico / não-CI (tests/run.shsegue sendo o gate determinístico). Anti-confabulação: escolha do juiz fora do catálogo é marcada comoOUT:<x>, nunca aceita como skill real.
Changed¶
plan(description): removido o gate implícito "from a spec" que desviava pedidos de design técnico (arquitetura/contratos/modelo de dados) paraspecifyouadvisorquando nenhuma spec formal era mencionada; reforçado o HOW. Validado por A/B causal (desc antiga vs nova, mesmas queries/modelos): Sonnet 12→14/14, Haiku 13→14/14, zero regressões nos controles. Sweep de robustez (92 queries × 2 modelos): Sonnet 98,9% / Haiku 97,8%.
5.9.0 - 2026-06-03¶
Added¶
- Atribuição de terceiros: novo
THIRD-PARTY-NOTICES.mdreconhecendo o GitHub Spec Kit (MIT), do qual o pipeline SDD e o template de constituição são adaptados, além de inspirações de cortesia (obra/superpowers, convenções do Claude Code) e os padrões de referência (OWASP/MITRE/NIST/IETF/W3C/OpenID/CSA). Seção "Créditos & Atribuições" no README.
Changed¶
build-release.shagora empacotaLICENSEeTHIRD-PARTY-NOTICES.mdno tarball. O artefato distribuía o template de constituição adaptado do spec-kit sem nenhum aviso de copyright (e nunca carregou sequer a própria licença MIT do cstk); o MIT exige preservar o aviso nas porções distribuídas.
5.8.0 - 2026-06-02¶
Adiciona a skill complementar e2e-integration-flow: autoria e execução de
testes E2E de integração full-stack com Playwright. A premissa central é que a
UI é apenas o gatilho, não a prova — cada ação que muda estado ganha uma
asserção na camada de trás (rede/API → banco → fila/RabbitMQ → efeitos
colaterais), via um "contrato de fluxo" (tabela ação→consequência por camada)
montado antes do código. Cobre a matriz de casos (happy path, validações de
campo, bordas, erros, authz, idempotência/async), incluindo a asserção do
espaço negativo (input inválido não pode gerar write nem evento). Anti-flake
por princípio: nada de sleep, só web-first assertions e polling com timeout;
dados isolados + teardown para repetibilidade.
Added¶
global/skills/e2e-integration-flow/SKILL.md— protocolo em 8 passos (contexto/prereqs → contrato de fluxo → matriz de casos → harness → passos UI → verificação backend/async → run+triagem por camada → relatório de cobertura) + golden rules e fronteiras comverify/bugfix/owasp-security.references/playwright-patterns.md— config (trace/retries/projects), reuso destorageState(auth uma vez), locators semânticos, web-first assertions, asserção de rede (positiva e negativa), isolamento de dados, fixtures injetandodb/queue, wiring de CI.references/backend-async-verification.md— asserções diretas no banco + cleanup; verificação de RabbitMQ em 3 estratégias (efeito-colateral do consumer, bind de fila temporária, management API) com o cuidado de bindar o listener antes da ação; helper de polling para consistência eventual; checklist de verificação por passo mutante.scripts/profiles.txt.in:complementary:e2e-integration-flow(entra no profilecomplementarye noall; não afeta osdd).
5.7.0 - 2026-06-01¶
Fecha um drift silencioso na etapa create-tasks do pipeline SDD: o backlog
gerado inline (sub agente que registra a skill mas escreve o conteúdo "de
cabeça") podia omitir o skeleton do template canônico — checkboxes - [ ],
prefixo FASE, legendas de status/criticidade, Matriz de Dependências, Resumo
Quantitativo e seções Escopo Coberto/Excluído. O único gate da etapa
(validate-docs-rendered) só valida render (Mermaid, links, frontmatter),
nunca conformidade estrutural, então o drift passava silencioso até um
humano notar. Reforço de prompt na SKILL ("aplique o template fielmente") já
existia e foi ignorado — por isso a correção é uma checagem determinística
por Bash, imune ao mesmo modo de falha (LLM) que gerou o problema.
Added¶
create-tasks/scripts/validate-tasks-template.sh— gate determinístico de fidelidade ao template. EmiteFINDING|<severity>|<code>|<msg>+RESULT. Severidadecritical(sem headingFASE, sem checkbox, sem tag de criticidade) = drift que quebra downstream (execute-task/ contagem de métricas doreview-task);warning= seção de metadados ausente (legendas, Matriz, Resumo, Escopo Coberto/Excluído). Honraphase_prefixdoconfig.jsonsemjq(POSIX puro) ou via--phase-prefix. Exit0conformante,1drift,2uso/arquivo. Read-only. Cobertura emtests/test_validate-tasks-template.sh(10 cenários)- fixture
tests/fixtures/tasks-md/conformant.md. assert_stdout_not_containsno harness de testes (tests/lib/harness.sh) — assertion negativa que faltava, espelhandoassert_stdout_contains.
Changed¶
- Orquestradores
agente-00c+feature-00c: adicionado o pre-gatetemplate-fidelityna etapacreate-tasks, rodando antes do gatedocs-render(skeleton antes de render).critical→ Decisão + tentativa de Edit re-normalizando aotemplates/tasks.md(preservando todo o conteúdo e o progresso[x]);warning→ Decisão informativa.record-skillcomo nos demais gates. - SKILL
create-tasks: documenta o novo script em "Scripts auxiliares" + gotcha sobre o drift silencioso do backlog gerado inline.
5.6.0 - 2026-05-31¶
Deprecated¶
- Skill
decision-tree: marcada como deprecated (deprecated: true,deprecated_since: 5.6.0,remove_in: 6.0.0). O cstk-panel (cstk serve) passou a visualizar as decisões dostate.jsonde forma mais eficiente — interface web interativa, sempre atualizada, sem gerar arquivos HTML avulsos. A skill continua funcionando até a remoção em v6.0.0; nenhum substituto será portado para dentro do toolkit (a visualização vive no painel). Frontmatter doSKILL.mdrecebeu os campos de depreciação e um banner; README marca a entrada como deprecated.
5.5.0 - 2026-05-30¶
Encerra um bug recorrente (3 ocorrências seguidas, em features distintas) em
que o orquestrador feature-00c/agente-00c retorna sem fechar a onda nem
emitir Schedule intent — deixando a onda aberta, o ponteiro
(current_stage/next_instruction) parado e a knowledge.db sem o
conhecimento da onda. Diagnóstico: são DUAS camadas. (1) O orquestrador (LLM)
trata o retorno da Skill da fase como fim de turno e para antes dos passos
6-13 — comportamento que o "Contrato de conclusão de turno" já tenta evitar
por reforço de prompt e que, empiricamente, reforço de prompt não resolve.
(2) A recuperação determinística estava documentada mas não encodada em
nenhum dos 4 commands pai — vinha sendo feita à mão a cada ocorrência. A
correção move o fechamento para uma rede de segurança idempotente e
obrigatória a cada retorno no PAI.
Added¶
state-ondas.sh reconcile-wave— rede de segurança determinística e idempotente para o caso "onda aberta". Guarda de idempotência viawave-status: se a onda já está fechada/ausente → NO-OP (não double-contaaccumulated_metrics); se aberta → fecha deterministicamente (back-fill de.tasks[]em execute-task →record-skill→endcom motivo derivado → avançacurrent_stage/next_instruction, ou promove.execution.status=concluidana fase terminal). Flag--terminal-phasepara terminalidade dependente de flavor (feature-00c=review-task, agente-00c=review-features). 13 cenários novos emtests/test_state-ondas.sh.state-ondas.sh wave-status— primitivaopen|closed|noneda última onda (.waves[-1].termination_reason), base da guarda de idempotência.
Changed¶
- 4 commands pai chamam
reconcile-waveINCONDICIONALMENTE a cada retorno do orquestrador, antes do ingest naknowledge.db(e, no/agente-00c-resume, ainda com o lock ativo). Quando o orquestrador parou cedo sem emitirSchedule intent:, o pai passa a derivar o agendamento do.execution.statusreal (terminal → não agenda;em_andamento→ agenda a próxima onda) em vez de depender da linha que o orquestrador não emitiu.
Fixed¶
- Ordem ingest-vs-fechamento: o eco de ingest no pai rodava mesmo com a
onda aberta (ingerindo onda incompleta); agora o
reconcile-wavefecha antes. - Over-advance do ponteiro na fase terminal do
feature-00c:pipeline.sh next-stageusa a lista COMPLETA (agente-00c, termina em review-features), o que avançariareview-task → review-featureserroneamente numa feature;--terminal-phase review-taskcorrige.
5.4.0 - 2026-05-30¶
Restaura no feature-00c a paridade de duas capacidades que só o
agente-00c (orquestrador de projeto) exercia: o registro de Sugestões
para skills globais (FR-020) e a retrospectiva proativa por marco (a
cada 25 ondas). Diagnóstico: as sugestões sumiram dos relatórios das features
recentes não por maturidade, mas porque o orquestrador feature-00c nunca
teve o gatilho ativo — só mencionava o mecanismo na tabela de capacidades e
ainda apontava para um subcomando fantasma (suggestions.sh append, que não
existe; o real é register). Mesmo padrão de bug-fantasma da 5.3.0. Empírico:
toda execução feature-00c (inclusive runs de 31 e 38 ondas) fechava com 0
sugestões, enquanto runs agente-00c produziam 2–9.
Added¶
feature-00c: gatilho ativo de Sugestão para skill global (passo10.quado loop + seção "Sugestões para skills globais (FR-020)"): porta o checkpoint que oagente-00cjá tinha, registrando viasuggestions.sh registercom--suggestions-fileem<projeto>/.claude/agente-00c-suggestions.md. A §5 do relatório passa a popular-se em features (validado end-to-end: register → state → §5).feature-00c: retrospectiva proativa por marco (passo10.ter+ seção dedicada): a cada 25 ondas emite bloqueio LEVE propondo revisão dos padrões acumulados e atualiza.next_retrospective_milestone— paridade com oagente-00c.report.sh emit --flavor feature-00c|agente-00c(FR-018): novo subcomando que resolve o caminho do relatório pelo flavor, aplicasecrets-filterINTERNAMENTE e SEMPRE, e grava o arquivo. Constrói a capacidade que os docs dofeature-00c(orquestrador, resume, abort) já invocavam como fantasma — mesma estratégia da 5.3.0 (construir o que a doc descrevia). secrets-filter ausente/inacessível = erro (nunca grava relatório não-filtrado). Cobertura: 8 cenários novos emtests/test_report.sh.tests/test_doc-subcommands.sh(lint de invariante do repo): varre os docs de orquestrador/command e falha se uma referência<helper>.sh <subcomando>apontar para um subcomando inexistente no dispatch do script. Pega a classe "subcomando-fantasma" (append,emit,check-cmd,skill-invoked,increment, flags deinit) em CI, não em runtime.
Fixed¶
- Subcomando fantasma
suggestions.sh appendna doc doagente-00c-feature-orchestrator(tabela de capacidades + seção de issue): corrigido parasuggestions.sh register(o único subcomando de escrita que existe no runtime). Era o motivo de o mecanismo nunca disparar mesmo quando o orquestrador tentava usá-lo. - Mais subcomandos-fantasma no
agente-00c-feature-orchestrator(achados pelo novo lint):bash-guard.sh check-cmd→check;spawn-tracker.sh increment→enter;state-ondas.sh skill-invoked→record-skill(4 ocorrências, incl. uma invocação real no passo de gate). Todos já tinham a forma correta em OUTROS pontos do mesmo doc ou noagente-00c— eram inconsistências que só falhariam em runtime. - Referências a
report.sh emitnofeature-00c(orquestrador, resume, abort) deixam de ser fantasma agora que o subcomando existe; os 2 sites do orquestrador ganham o--state-dirque faltava.
Security¶
- Guard anti-confabulação em escalada de segurança (regra de aterramento de
evidência nos 2 orquestradores + 2 comandos de resume): a evidência citada
para um evento de segurança (prompt-injection/canary/tampering/output hostil)
DEVE ser substring literal de um tool result observado; sem aterramento →
--score 0 --escolha ameaca-nao-verificada(pause), nunca escalar ameaça fabricada. Originou da auditoria de uma execução real (security-hardening- owasp) onde um resume (PAI) confabulou uma string de prompt-injection num output SSH limpo, gravou Decisão score-3 com evidência fabricada e escalou ao operador (dec-122, depois retratada): a trava de score-3 confere que a evidência existe, não que é real. Move o flagra do momento-da-ação para o momento-do-registro. Trava de regressão textual emtests/test_orchestrator-evidence-grounding.sh.
5.3.0 - 2026-05-30¶
Normalização das chaves do state.json (runtime agente-00c/feature-00c) e das
colunas da knowledge.db de português para inglês. Originou de um bugfix: o
/feature-00c documentava um init via one-liner (state-rw.sh init --short-name
… --briefing-* … + drift.sh extract) que NÃO existia nos scripts — as flags
eram fantasma. A correção exigiu construir as capacidades faltantes, o que abriu
a oportunidade de uniformizar o schema inteiro. Não-breaking: pt-BR é aceito
na entrada via aliases; EN é canônico na saída. Remoção do suporte pt-BR = próxima
MAJOR. Mapa congelado em docs/specs/schema-en-migration/migration-map.md.
Added¶
state-rw.sh— canonicalizador de chaves (_sr_canonicalize_file): rename plano pt-BR → EN em toda leitura/escrita dostate.json. O arquivo converge para EN a cada escrita; states pt-BR legados são lidos transparentemente. Subcomando novostate-rw.sh migratecanonicaliza um state in-place (idempotente; backup pt-BR emstate-history/).state-rw.sh init— modo-feature determinístico:--short-name+--briefing-path/sha256+--constitution-path/sha256/version+--key-aspectsemitem o schema de feature completo (short_name,prerequisites,current_stage="specify") numa única chamada atômica. Encerra o recipe multi-passo (init base + N×set) que produzia states inconsistentes — corrige o bug que originou esta release.drift.sh extract --text: extrator real de keywords (determinístico: lowercase + tokenização + stopwords pt/en + dedupe + top-N). Substitui a referência fantasmadrift.sh extract --textodos docs do/feature-00c.
Changed¶
- Chaves do
state.json→ EN em todo o runtime (~30 scripts + orquestradores/commands):execucao→execution,etapa_corrente→current_stage,ondas→waves,decisoes→decisions,bloqueios_humanos→human_blocks,orcamentos→budgets,metricas_acumuladas→accumulated_metrics,sugestoes→suggestions, + todas as folhas (contexto→context,escolha→choice,justificativa→rationale,score_justificativa→justification_score, etc.). drift.sh aspectos→key-aspects(aliasaspectosmantido com aviso de deprecação).cli/lib/recall.sh— schema v7: colunas e tabelas daknowledge.dbnormalizadas para EN (tabelabloqueios→blocks;execucao_id→execution_idem todas; etc. — vermigration-map.md §3.11). Índice é DERIVADO: o bumpRECALL_SCHEMA_VERSION6→7 dropa+recria as tabelas renomeadas no 1º acesso de um DB pré-v7;--reindex/próximo ingest repopula a partir dostate.json(sem perda).cstk recall --typeaceitablock(canônico) ebloqueio(alias deprecado). Ingestão lê chaves EN dostate.jsoncom fallback pt-BR.
Notas¶
- SemVer MINOR: nada quebra para usuários do cstk (aliases pt-BR + EN; DB reconstrói sozinho). Remoção dos aliases = próxima MAJOR.
- Fora de escopo (follow-ups, mesma estratégia de alias): nomes de flag CLI
(A); valores de enum como
em_andamento(B); keys de output de relatóriomodel-routing-report/report(D). - Consumidores da knowledge.db (ex.: cstk-panel) precisam adequar-se aos nomes de coluna EN — painel é repo à parte.
5.2.0 - 2026-05-28¶
Correção de perda de informação na ingestão de decisões do knowledge.db.
Descoberta: ao gravar uma decisão, só a opção escolhida (escolha) era
indexada — todas as outras opções avaliadas (opcoes_consideradas no
state.json) eram descartadas, perdendo o contexto de quais alternativas
foram consideradas e rejeitadas. Schema v6 (aditivo).
Added¶
cli/lib/recall.sh— schema v6: nova colunadecisions.opcoes (TEXT), alimentada por.decisoes[].opcoes_consideradasdostate.json(array JSON serializado viatojson— todas as opções avaliadas, não só a escolhida). Entra também no corpo pesquisável da FTS (type='decision'), então buscar por uma opção não escolhida recupera a decisão.RECALL_SCHEMA_VERSION5 → 6. Migração idempotenteALTER TABLE decisions ADD COLUMN opcoespara DBs v<6 (checada viaPRAGMA table_info, espelhandotasks.titulo);--reindexretro-alimenta o histórico já indexado.
5.1.0 - 2026-05-28¶
Feature recall-suggestions + correção de robustez na ingestão do knowledge.db.
Descoberta ao auditar o índice real: a tabela retros estava vazia em todas as
14 execuções porque nenhum produtor escreve .retros[] — mas o conteúdo
retrospectivo de verdade (diagnóstico + proposta de meta-padrão) já existia em
.sugestoes[] e nunca era indexado. E execuções com data não-canônica sumiam
silenciosamente da tabela executions. Schema v5 (aditivo).
Added¶
cli/lib/recall.sh— schema v5: nova tabelasuggestions (project, feature, wave, execucao_id, source_ts, source_id, skill_afetada, severidade, diagnostico, proposta, referencias, issue_aberta, ingested_at), alimentada por.sugestoes[]dostate.json.diagnostico+propostaformam o corpo pesquisável na FTS unificada (type='suggestion') e passam pelosecrets-filter(FR-006);referenciaséjoin(",")também filtrado.RECALL_SCHEMA_VERSION4 → 5;RECALL_TYPE_ENUMestendido comsuggestion.cstk recall <termo> --type suggestione--reindexretro-alimentam todo o histórico de execuções já indexadas.
Fixed¶
- Linha de execução sumindo silenciosamente em
recall_ingest_state_json: o cálculo de duração viafromdateiso8601lançava emterminada_emdate-only (ex."2026-05-25", gravada por orquestrador antigo), e como o parse vivia dentro do mesmo programajqque monta a linha inteira, o throw derrubava a execução toda (executions=0) sem aviso — enquantowaves,decisionsebloqueiosda mesma execução eram ingeridos normalmente. Agora o parse é isolado emtry … catch "": a execução é preservada e sóduracao_segundosvira NULL. Recupera execuções concluídas que estavam invisíveis no índice (ex.flow-assistant-streaming).
Notes¶
- Aditivo:
CREATE TABLE IF NOT EXISTScriasuggestionsem DBs v<5 sem perda; rodecstk recall --reindexpara popular as sugestões e recuperar execuções que tinham sido derrubadas pela data não-canônica. Zero mudança de surface CLI (apenas um valor novo no enum--type). Cobertura: 4 cenários novos emtests/cstk/test_recall.sh(S1–S4); suíte recall 97/97.
5.0.0 - 2026-05-27¶
BREAKING. O projeto foi renomeado para cstk (repositório
JotJunior/claude-ai-tips → JotJunior/cstk), alinhando repositório, produto e
binário sob o mesmo nome. Removidas as skills marcadas como deprecated desde a
v3.12.0 (remoção originalmente prevista para a v4.0.0). Documentação recalibrada
para descrever o que o toolkit realmente faz.
Removed¶
create-use-case— usespecify(formato SDD). Removidos a skill, o scriptnext-uc-id.sh+ teste, as fixturestests/fixtures/ucs/, a entrada emprofiles.txt.ine as referências no catálogo de tips e emspecify.- 8 skills
dotnet-*— stack .NET descontinuada, sem substituto no toolkit global. Removida a árvorelanguage-related/dotnet/; o profilelanguage-dotnetdeixa de existir (era auto-derivado da pasta). Quem usa .NET deve copiar as skills de uma release ≤ 4.10.0 para<projeto>/.claude/skills/.
Changed¶
- Rename
claude-ai-tips→cstkem URLs, badges, GitHub Pages e scripts de install/release. URLs antigas seguem vivas via redirect do GitHub. - Honestidade na documentação: status do
agente-00catualizado (funcional, porém sem suíte de testes automatizada dos agentes — não mais "esqueleto FASE 1"); autonomia recalibrada (pausa em bloqueios reais, não é "dispare-e- esqueça"); recall descrito como mitigação defense-in-depth contra prompt-injection (não "defesa");owasp-securityreposicionada como revisão guiada por checklist (não auditoria/pentest); removido o número não verificável "71 bugs / 134 sessões" dobugfix.
Notes¶
- Profile
alle contagem caem de 38 → 29 skills. Quem instalou viacstk: rodecstk update;cstk doctordetecta o drift das skills removidas.
4.10.0 - 2026-05-27¶
Feature recall-memory-mirror: o cstk recall agora indexa e busca os
arquivos .md de auto-memoria do Claude Code (~/.claude/projects/<encoded>/memory/),
integrando-os na FTS unificada do knowledge.db. Schema v4.
Added¶
cli/lib/recall.sh— schema v4: nova tabelamemories (project, slug, type, description, body_scrubbed, path, indexed_at)com chave primaria(project, slug).RECALL_SCHEMA_VERSIONbumped de3para4.RECALL_TYPE_ENUMextendido commemory.cstk recall --ingest(aditivo): apos ingerir telemetria dostate.json, indexa os.mdem~/.claude/projects/<encoded>/memory/do projeto alvo. Cada.mdvira uma entrada emmemoriese uma linha emknowledge_fts(type='memory',feature='memory',wave='-'). Body e description passam porsecrets-filter.sh scrub. Linha de status extendida com, N memories.cstk recall --reindex(aditivo): reconstroimemoriesvarrendo~/.claude/projects/*/memory/no disco via reverse-derivation. Invariante C-004: NUNCA le dostate.jsonpara reconstruir memorias.cstk recall --type memory: filtra busca FTS retornando so memorias; ex:cstk recall "setup" --type memory.cstk recall --list-memories [--project P]: lista slug + description de todas as memorias indexadas (sem body), util para auditoria. Formato:<project> / <type> / <slug> — <description>.- Degradacao graciosa: todos os novos caminhos (ingest/reindex/list-memories
de memories) degradam graciosamente quando
sqlite3,jqousecrets-filterestao ausentes — exit 0 com aviso; nunca abortam o fluxo de ingestao.
Notes¶
- A tabela
memoriese puramente derivada (indice); ostate.jsontransacional nao e tocado. Base inteira reconstruivel viacstk recall --reindex. - Projetos com underscore no basename podem apresentar
projectinconsistente entre ingest e reindex (limitacao CQ1 documentada emdata-model.md). --ingestinclui memories so se ostate.jsoncontemprojeto_alvo_path;--reindexinclui todos os projetos com diretoriomemory/no HOME.- Entrega:
recall.she runtime — chega a copia instalada viacstk self-update --from <tarball>(nao viacstk install/update).
4.9.1 - 2026-05-27¶
Corrige um falso positivo no painel (cstk-panel): execuções finalizadas com
sucesso apareciam nas métricas ainda "em andamento" na última fase real (ex.
review-task), porque etapa_corrente nunca era promovida quando
execucao.status virava concluida. A normalização é feita na camada
derivada (ingestão da knowledge.db), mantendo o state.json fonte intacto.
Fixed¶
cstk recall --ingest(tabelaexecutions): quando.execucao.statusé terminal de sucesso (concluida— canônico dostate-validate— ouconcluido, variante histórica), a coluna derivadaetapa_correntepassa a ser"concluido".abortada/em_andamentopreservam a fase real (aborto não é conclusão). Só o valor derivado muda; ostate.jsontransacional fica inalterado.
Notes¶
- Registros já ingeridos mantêm a
etapa_correnteantiga até umcstk recall --reindex(re-lê osstate.jsonpela mesma normalização). A correção é prospectiva para novas ingestões. - Entrega: o
recall.shé runtime — chega à cópia instalada viacstk self-update, nunca porcstk install/update.
4.9.0 - 2026-05-27¶
Rodada de robustez de processo inspirada no benchmark obra/superpowers: descriptions orientadas a gatilho, gates à prova de racionalização e checklists de requisitos com dono e follow-up — para deixarem de ser write-only.
Added¶
- Checklist com dono por item (
{auto}/{humano}): a skillchecklistmarca cada item com seu resolvedor —{auto}(o agente resolve lendo a spec e citando evidência) ou{humano}(julgamento de valor/risco que cabe ao dono do produto). Nova auto-resolução (§3.7) marca os{auto}com[x]+ citação, ou[Gap]quando a spec não satisfaz. - Loop gap → ação: itens abertos ganham destino explícito (§4.4) —
[Ambiguity]/[Conflict]para/clarify,[Gap]para/create-tasks,{humano}para o dono. A skillcreate-taskspassa a consumirchecklists/*.mdda spec e converter[Gap]/[Conflict]abertos em tarefas de requisito — fechando o ciclo sem reordenar o pipeline.
Changed¶
descriptiondas skills = quando usar, não o que a skill faz: removido o resumo de workflow dos descriptions deexecute-task(enumerava os 9 passos),decision-tree(mecanismo interno) eapply-insights(caminho de implementação). Evita que o Claude siga o resumo sem abrir o corpo da skill.- Gates à prova de racionalização:
execute-taskganha gate de evidência (§8.2 — cada[x]exige output literal; o sumário não é prova) e fecha a brecha do "(se aplicável)" em testes (§5). Os orquestradoresagente-00cefeature-00cganham 2ª auto-checagem: fechar a onda não promove.execucao.status— ler ostate.jsonreal, nunca o sumário do subagente.
4.8.0 - 2026-05-27¶
cstk serve volta ao modo de produção de porta única. A partir do
cstk-panel v0.2.0, o servidor
Fastify registra @fastify/static e serve a API e o SPA buildado no mesmo
processo e porta — não é mais necessário o modo dev (Vite + proxy). O comando
passa a rodar npm run build && npm run start e a flag --port volta a
controlar a porta de fato.
Changed¶
cstk serveagora usanpm run build && npm run start(em vez denpm run dev): um único processo Fastify serve API + SPA na mesma porta. Onpm run buildcontinua obrigatório (o tarball é a árvore-fonte; ostartserveapps/web/dist).PORTvolta a ser exportado: o servidor lêprocess.env.PORTe binda a porta resolvida.--portvoltou a funcionar (1024–65535; também lê$PORT) — removido o aviso de "porta ignorada em modo dev".
Requires¶
- cstk-panel >= 0.2.0 (com serving estático via
@fastify/static). Painéis em cache de versões anteriores devem ser atualizados comcstk serve --update(ou--reinstall); do contrário onpm run startantigo sobe apenas a API e devolve JSON 404 em/.
4.7.2 - 2026-05-27¶
Corrige a proveniência do knowledge.db para execuções do agente-00c
(orquestrador de projeto): seus registros eram ingeridos com feature='unknown'
(o agente-00c não grava short_name como o feature-00c). Agora usam o nome do
diretório do projeto (basename de projeto_alvo_path), tornando os registros
identificáveis no índice e no painel. O project já era correto — a correção é
na coluna feature.
Fixed¶
cstk recall --ingest(layoutagente-00c-state/): derivafeaturedo nome do dir do projeto em vez de'unknown'. Semprojeto_alvo_path, degrada para'unknown'(igual aoproject). O layoutfeature-00c-state/<short>/segue inalterado.agente-00c-orchestrator(anti-eco FR-011):--exclude-featuredo read-back passa de"unknown"parabasename(projeto_alvo_path), mantendo a paridade com o valor ingerido (do contrário o orquestrador ecoaria as próprias escritas de volta no read-back de specify/plan).
Notes¶
- Registros já gravados como
feature='unknown'permanecem assim até umcstk recall --reindex(e apenas para osstate.jsonainda presentes em disco). A correção é prospectiva. - Entrega: o
recall.sh(runtime) chega viacstk self-update; oagente-00c-orchestrator(catálogo) viacstk update— rode ambos para manter ingestão e anti-eco consistentes.
4.7.1 - 2026-05-27¶
Corrige cstk serve: o frontend (Vite) abortava com Failed to resolve entry
for package "@cstk-panel/shared-types". O painel e uma arvore-fonte e o web
importa o workspace lib @cstk-panel/shared-types, cujo package.json aponta
main para dist/index.js — que nao existe ate o npm run build. O cstk serve
rodava npm run dev sem buildar, entao o Vite nao resolvia o pacote.
Fixed¶
cstk serveagora rodanpm run buildantes denpm run dev: compila os workspaces (gerapackages/shared-types/dist, etc.) para que o Vite resolva@cstk-panel/shared-types. O build e idempotente e roda a cada start, cobrindo tambem instalacoes feitas sem build. Se o build falhar, o comando sai com erro (sugerindo--reinstall) e nao tenta iniciar o painel.
Contexto: a validacao anterior do modo dev (4.6.1) passou por acaso porque o painel havia sido buildado manualmente durante a investigacao; numa instalacao limpa (
npm installapenas) odist/do shared-types nao existia.
4.7.0 - 2026-05-27¶
Adiciona a flag cstk serve --update: atualiza o painel cstk-panel para a
release mais recente sob demanda, reinstalando apenas se houver versao nova
(senao reusa o cache). O start normal continua offline-safe e instantaneo — a
checagem de rede so ocorre com --update.
Added¶
cstk serve --update: consulta a release mais recente via API do GitHub e compara com.panel-version. Se houver versao nova, reinstala (download +npm install+.panel-versionatualizada); se ja estiver na latest, apenas informa e reusa. A checagem e best-effort: falha de rede/API nao aborta o comando — a versao instalada e mantida e o painel inicia normalmente.- Helper interno
_serve_latest_tag(POSIX, sem jq): extraitag_nameda release mais recente, rejeitando prerelease/draft; falha silenciosa (return 1) em qualquer erro de rede/parse.
Notes¶
--reinstallcontinua reinstalando incondicionalmente (ignora--update).- Em modo dev,
--updatenao altera a porta da UI (servida pelo Vite na 5173).
4.6.2 - 2026-05-27¶
Unifica a fronteira command↔orquestrador para aquisição de lock e
inicialização de estado no agente-00c/feature-00c. Antes, a divisão de
responsabilidades era inconsistente entre as duas famílias e contraditória
internamente: /agente-00c (command) não adquiria o lock (o orquestrador
adquiria no loop), enquanto /feature-00c (command) e seu orquestrador
adquiriam — um double-acquire de um lock não-reentrante (mkdir) somado a um
double-init de state.json. Resultado: ao iniciar uma feature/projeto, o
agente gastava ciclos lendo 3+ arquivos para (mal-)resolver quem detém o lock,
sem um contrato canônico contra o qual decidir.
Fixed¶
- Modelo único de lock/init: o slash command PAI (
/agente-00c|/feature-00cno início;*-resumeentre ondas) adquire o lock antes do spawn e o libera SEMPRE após o orquestrador retornar, e cria ostate.json. O orquestrador (subagente) faz zero chamadas astate-lock.sh acquire/releasee não re-inicializa estado — sempre continua de.proxima_instrucao. Idêntico em primeira-invocação e resume. /agente-00c(command) passou a adquirir o lock (passo 3) e a liberá-lo SEMPRE (novo passo 5.ter) — antes não fazia nenhum dos dois.- Orquestradores (
agente-00c-orchestrator,agente-00c-feature-orchestrator): removidas as chamadas deacquire/release; o loop apenas valida estado +sha256-verifydentro do lock já detido pelo pai. - Double-init neutralizado no
feature-00c-orchestrator: re-inicializar ostate.jsonclobraria a Decisão de wave-select gravada pelo command pai.
Added¶
- Bloco "Fronteira command↔orquestrador (lock + init) — CONTRATO CANÔNICO" presente nos 6 arquivos do pipeline (2 commands de início, 2 de resume, 2 orquestradores), para que nenhum agente precise re-investigar a fronteira.
4.6.1 - 2026-05-27¶
Corrige cstk serve: o painel agora exibe a interface web. Antes, o subcomando
rodava npm run start — que sobe apenas a API (Fastify) — e ainda forcava
PORT=5173 sobre ela, de modo que http://127.0.0.1:5173 devolvia o envelope
JSON {"error":"Not found"} em vez da UI. O painel cstk-panel nao possui
serving estatico em producao (o server nao registra @fastify/static), e o SPA
depende do proxy /api que so existe no modo dev do Vite.
Fixed¶
cstk serveagora lanca o painel vianpm run dev(concurrently): a API Fastify sobe em:3001e o frontend Vite em:5173, com o Vite servindo o SPA e proxiando/api -> :3001. Abrirhttp://127.0.0.1:5173exibe a interface.- Removido o
export PORT: forcar a porta movia a API para fora de:3001e quebrava o proxy do Vite. A porta voltada ao usuario passa a ser a do Vite. --port: continua validado (inteiro 1024-65535) por compatibilidade, mas em modo dev a UI e servida pelo Vite na:5173; um aviso e emitido se!= 5173.
Nota: o modo dev roda um dev server (HMR/watch da fonte). Um serve de producao de porta unica exigiria adicionar
@fastify/staticao server docstk-panel(outro repositorio).
4.6.0 - 2026-05-27¶
Adiciona o subcomando cstk show-tip — mecanismo de dicas contextuais para skills
do toolkit. Em cada onda do orquestrador, uma dica e exibida automaticamente para
a fase corrente (ex: --phase execute-task), mantendo o operador informado sobre
boas praticas sem bloquear o fluxo. O catalogo tips/catalog.md cobre 38 skills
(81 entradas: uso, gotcha, avancado) e e extensivel em < 5 minutos por skill.
Inclui correcao de bug no parser awk que impedia a emissao de entradas alternadas.
Added¶
cstk show-tip [SKILL] [--phase FASE] [--audit] [--catalog PATH]: novo subcomando de exibicao de dicas. Modo exibicao: fail-silent absoluto (FR-006), sempre exit 0. Modo--audit: valida cobertura do catalogo por skill (categorias uso + gotcha obrigatorias, >= 2 entradas), exit 0 ok / exit 1 gaps.tips/catalog.md: catalogo com 81 entradas cobrindo 38 skills (23 globais + 7 Go + 8 .NET). Cada entrada tem frontmatter YAML (skill,category,text)- corpo com exemplos concretos em fence de codigo. Formato parseavel por awk POSIX.
cli/lib/show-tip.sh: implementacao POSIX sh pura, sem deps externas. Parser com maquina de estados awk (OWASP A05: valores de usuario via-v, nunca interpolados). RNG via/dev/urandom+ fallbackdate +%s. Fail-silent em todos os caminhos de erro. Sourced porcli/cstkvia dispatch.tests/cstk/test_show-tip.sh: 17 cenarios cobrindo exibicao (5.2), audit (5.3), seguranca A05 (5.4) e lint/performance (5.5-5.6). Integrado ao runnertests/run.shvia convencaocli/lib/<n>.sh -> tests/cstk/test_<n>.sh.- Integracao nos dois orquestradores:
agente-00c-orchestrator.mdeagente-00c-feature-orchestrator.mdexibem dica fail-silent no inicio de cada onda viaTIP=$(cstk show-tip --phase "$FASE" 2>/dev/null) || TIP="".
Fixed¶
- Parser awk de
_st_parse_catalog: correcao de bug onde a transicaobody -> "---"mudava parastate=outem vez destate=frontmatter, fazendo com que o frontmatter de cada segunda entrada fosse ignorado. O parser agora transitabody -> frontmatterdiretamente, permitindo que todas as entradas sequenciais do catalogo sejam emitidas corretamente (antes: 27 de 81 entries; depois: 81 de 81). Backward-compatible: catalogo sem terminador final continua sem emissao espuria. tips/catalog.md: adicionado terminador---apos a ultima entrada (dotnet-testing gotcha) para que ela seja emitida pelo parser corrigido. Sem o terminador, a ultima entrada do catalogo era sempre perdida.
4.5.0 - 2026-05-26¶
Adiciona o subcomando cstk serve — interface web local do cstk panel.
Na primeira execução, baixa automaticamente a release mais recente do
JotJunior/cstk-panel e instala em
~/.local/share/cstk/panel; execuções subsequentes reutilizam o cache (sem
download). Encerramento gracioso com grace period de 5s (SIGTERM → SIGKILL).
POSIX sh puro; SSRF allowlist para github.com e objects.githubusercontent.com.
Added¶
cli/lib/serve.sh: biblioteca POSIX sh que implementa o fluxo completo docstk serve— parse de flags (--port,--host,--reinstall,--help), validação de porta (1024–65535), prereq check decurl/npm, SSRF allowlist (github.com,codeload.github.com,objects.githubusercontent.com,api.github.com), lazy-install via GitHub Releases API, integridade best-effort (.sha256),npm install, foreground start comtrap SIGTERM/SIGINT, grace period 5s + SIGKILL.cli/cstk(dispatch): novocase serve)que sourcacli/lib/serve.she chamaserve_main "$@".tests/cstk/test_serve.sh(29 cenários): cobre flags/porta/host, prereq check, SSRF allowlist, lazy-install, tarball corrompido,npm installfalho, saída espontânea do filho, zeroeval, SIGTERM + SIGKILL (grace period), entre outros. Todos os stubs decurl/npmsão locais (sem rede real).tests/cstk/fixtures/serve/panel-fixture.tar.gz: fixture de tarball mínimo (package.json+.panel-version) para testes de download sem rede.
Changed¶
README.md: nova seção Painel Web (cstk serve) documentando uso, opções, variáveis de ambiente e notas de segurança.cli/README.md: seção de subcomandos atualizada para incluirserve.
Tests¶
tests/cstk/test_serve.sh: 29 cenários PASS, cobertura via--check-coveragesem órfãos.
4.4.0 - 2026-05-26¶
Fecha um buraco de perda de dados na trilha de tasks: uma feature com 21 tasks
gravava apenas 2 no state.json/knowledge.db. A causa raiz não estava na
ingestão (recall.sh espelha .tasks[] fielmente e não lê tasks.md),
mas em como .tasks[] era escrito — um snippet jq hand-rolled na prosa
dos orquestradores (§5.d.ter), append não-idempotente que só rodava se o
LLM lembrasse de executá-lo a cada task. Quando o orquestrador comprimia a fase
execute-task em poucas ondas e pulava o append, as tasks sumiam em silêncio.
A correção introduz um caminho de escrita auditado e idempotente
(record-task) e, sobretudo, uma rede de segurança determinística
(reconcile-tasks) que deriva .tasks[] do tasks.md — o artefato que de fato
contém todas as tasks via checkboxes — em vez de depender da disciplina do LLM.
Mudança aditiva e retro-compatível (catálogo + runtime helper).
Added¶
global/skills/agente-00c-runtime/scripts/state-ondas.shganha dois subcomandos:record-task(upsert idempotente de uma entrada em.tasks[]portask_id; caminho atômico auditado com backup emstate-history/+sha256;--if-absentnão sobrescreve entrada real) ereconcile-tasks --tasks-md <path>(backstop determinístico: parseia otasks.md, identifica toda task concluída — heading### N.Mcom TODAS as subtarefas-checkbox[x]— e back-filla viarecord-task --if-absentqualquer uma ausente de.tasks[]; tasks pendentes/bloqueadas/parciais ficam de fora para não fabricarpass/fail;--dry-runlista os faltantes). Camposorigem/recorded_atsão aditivos — a ingestão seleciona só os 8 campos do contrato e ignora o resto.global/skills/review-task/SKILL.md§4.6: gate de completude.tasks[] ↔ tasks.md. Rodareconcile-tasks --dry-run(detecta divergência), depois apply (sana, idempotente), e reporta o findingtask-outcome-nao-gravadoquando o caminho ao vivo falhou. Read-only no passo 1, idempotente no passo 2 — seguro a cada review.
Changed¶
global/agents/agente-00c-orchestrator.mdeagente-00c-feature-orchestrator.md(§5.d.ter): o snippetjqhand-rolled (get→. + [$e]→set) que escrevia.tasks[]foi substituído por uma chamada astate-ondas.sh record-task— idempotente portask_id(sem duplicatas mesmo se chamado repetidamente) e auditado. Cada bloco passa a documentar a rede de segurançareconcile-taskscomo o backstop que garante completude. Comportamento backward-compatible.
Tests¶
tests/test_state-ondas.sh(+18 cenários):record-task(append, upsert idempotente,--if-absentsem clobber, acúmulo, sem onda em andamento, validações deoutcome/testes_passados ≤ rodados/array de arquivos/flags obrigatórias) ereconcile-tasks(dry-run lista concluídas ausentes, ignora pendentes/bloqueadas, extração de título sem a tag de criticidade, não clobbera entrada real, idempotência,tasks.mdausente, flags obrigatórias). Cobre o pitfallawk FNR==NRcom primeiro arquivo vazio (.tasks[]sem entradas) — corrigido com comparação porFILENAME.
4.3.4 - 2026-05-26¶
Corrige drift de contrato nos briefs do cstk-panel: o event_type da tabela
events era documentado como conjunto fechado de 4 valores
(lock_contention, validation_failed, wave_retry, schedule_wait),
omitindo recall_consulted (emitido pelo read-back loop em specify/plan desde
a v3.18.0). A ingestão em recall.sh trata event_type como texto livre,
sem allowlist, então o painel — construído sobre o contrato fechado — não
reconhecia recall_consulted e o exibia rotulado como schedule_wait. Fix
restrito à documentação de contrato (docs/cstk-panel/*.md); a fonte de verdade
(state.json) e a knowledge.db sempre armazenaram o valor fielmente.
Fixed¶
docs/cstk-panel/backend-brief.md,docs/cstk-panel/frontend-brief.md: contrato deevent_typedeixa de declarar "conjunto fechado de 4" e passa a documentá-lo como texto livre com conjunto conhecido de 5 (+recall_consulted). O contrato doEventIconagora exige fallback para tipos desconhecidos (ícone genérico + rótulo = valor cru recebido), nunca recategorizando para um tipo conhecido. Fix recurrence-proof: como a ingestão não aplica allowlist, um 6º tipo futuro re-disparava o mesmo bug. Ação de deploy fica no repo docstk-panel(remover qualquer ramodefault → schedule_waitnoEventIcon).
4.3.3 - 2026-05-26¶
Mitiga, na origem, o defeito que motivou a rede de segurança da v4.3.2: o
orquestrador (subagente) tratava o retorno de uma Skill(...) da fase como
fim de turno e parava cedo, abandonando o fechamento da onda, a ingestão na
knowledge.db e a emissão do Schedule intent. A v4.3.2 garantiu que a
ingestão acontecesse mesmo assim (camada determinística no comando-pai); esta
versão ataca a causa raiz no prompt dos orquestradores (camada que reduz a
frequência). Mudança aditiva, restrita ao catálogo (global/agents/*.md) —
propaga via cstk update. Fix de prompt é probabilístico e NÃO substitui a
rede de segurança da v4.3.2; as duas camadas coexistem.
Fixed¶
global/agents/agente-00c-orchestrator.md,agente-00c-feature-orchestrator.md: adicionada a seção "Contrato de conclusão de turno" antes do Loop principal, mais anotação no passo 5 (onde a Skill é invocada) e bullet anti-padrão. O contrato reframa o retorno de QUALQUERSkill(...)como o MEIO da onda (nunca o fim), define a linhaSchedule intent: ...como o único token válido de fim de turno e prescreve uma auto-checagem ("a última linha que emiti éSchedule intent:?") antes de devolver controle ao comando-pai. Reduz a recorrência da parada precoce que deixava a onda sem fechar e aknowledge.dbsem ingestão.
Added¶
tests/test_orchestrator-turn-completion.sh: trava de regressão (7 cenários) que assegura a presença dos marcadores do contrato ("Contrato de conclusão de turno", "MEIO da onda", auto-checagem, reforço no passo 5) nos dois orquestradores. Registrada como interna emtests/run.sh(existence-guarded, não mapeia 1:1 a um script).
4.3.2 - 2026-05-26¶
Correção de robustez na memória de conhecimento cross-feature (knowledge.db).
A ingestão pós-onda vivia num único lugar — o passo 10.bis do loop do
orquestrador, dentro do subagente. Quando o orquestrador retornava sem
completar o loop (parando cedo, antes de fechar a onda e emitir o Schedule
intent), o comando-pai recuperava o bookkeeping da onda mas não re-ingeria, e
a knowledge.db ficava vazia mesmo com o state.json sendo atualizado
normalmente. Esta versão adiciona uma rede de segurança de ingestão nos quatro
comandos-pai. Mudança aditiva e retrocompatível, restrita ao catálogo
(global/commands/*.md) — propaga via cstk update. Para backfill de uma
execução já rodada: cstk recall --ingest --state-dir <state-dir>.
Fixed¶
global/commands/feature-00c.md(§5.bis),feature-00c-resume.md(§4.bis),agente-00c.md(§5.bis),agente-00c-resume.md(§8.bis): cada comando-pai agora executacstk recall --ingestcomo rede de segurança logo após tratar oSchedule intent, garantindo que o conhecimento da onda chegue àknowledge.dbmesmo quando o orquestrador retorna sem alcançar o passo10.bis. A chamada é idempotente (upsert por chave natural — re-ingestão após o10.bisé inofensiva), read-only sobre ostate.jsone degrada para no-op em qualquer falha (cstk fora do PATH,sqlite3/jqausentes); nunca bloqueia o fechamento ou o agendamento da onda. Defesa-em-profundidade sobre o10.bisexistente — não altera a causa raiz (orquestrador parar cedo).
4.3.1 - 2026-05-26¶
Correção de contrato da skill review-task. Ela é um relatório de status
READ-ONLY, mas a implementação ainda carregava a capacidade de escrever
arquivos e, ocasionalmente, criava um arquivo de relatório — fricção recorrente
nos dados de uso do /insights (o usuário precisava interromper para corrigir).
Esta versão alinha a implementação ao contrato sempre pretendido. Sem impacto
para quem usa a skill como relatório: o comportamento removido nunca foi
intencional.
Fixed¶
global/skills/review-task/SKILL.md: removidoEditdeallowed-tools, de modo que a skill não tem mais capacidade de escrever ou criar arquivos (a criação de arquivo de relatório era comportamento não-intencional). Marcar tarefa como concluída emtasks.mdpermanece responsabilidade do/execute-task.
Changed¶
review-task/SKILL.md: adicionado invariante explícito de contrato de saída logo após a introdução — a skill emite o status na conversa (stdout) e nunca cria nem escreve arquivo de relatório, persistindo apenas quando o usuário pedir explicitamente.
4.3.0 - 2026-05-26¶
A skill apply-insights passa a consumir os dados do /insights nativo como
fonte PRIMÁRIA, em vez de depender de um resumo curado à mão (que ficava
desatualizado e podia ser de outro projeto). Mudança aditiva e retro-compatível
(degrada para o .md curado e depois para best-practices genéricas).
Added¶
global/skills/apply-insights/scripts/digest-facets.sh: agrega os facets per-sessão do/insightsnativo (~/.claude/usage-data/facets/*.json) num digest markdown data-driven — distribuição degoal_categorieseoutcome,friction_countsranqueado (sinal-chave para recomendações),claude_helpfulness, satisfação e amostras defriction_detailpor tipo de fricção. Flags--facets-dir,--samples N(default 3) e--top N(default 15, corta a cauda longa de alta cardinalidade comogoal_categories).find -exec cat + | jq -sevita ARG_MAX. Degradação graciosa (semjq, diretório ausente, sem*.jsonoujqfalhando → exit 0 com stdout vazio).
Changed¶
apply-insights/SKILL.md: Step 1 reescrito com cadeia de fontes facets digest →~/.claude/insights/usage-insights.mdcurado → genérico, sempre preferindo o digest (atual, do projeto corrente) e informando ao usuário qual fonte foi usada.descriptione gotchas atualizados.
Tests¶
tests/test_digest-facets.sh(14 cenários): agregação, ranking descendente de fricção, cap--topda cauda longa, amostras defriction_detail, caso sem fricção, degradação (dir ausente/vazio,jqausente via PATH shadow) e validação de argumentos (--samples/--topinválidos, arg desconhecido,--help).
4.2.0 - 2026-05-25¶
Enriquecimento da camada B do índice de conhecimento (knowledge.db) para
melhor observabilidade no futuro cstk-panel. Mudanças aditivas e
retro-compatíveis: o índice é derivado e reconstruível via
cstk recall --reindex; states e índices antigos seguem funcionando.
Added¶
- Coluna
tasks.titulo(schema v3): a tabelataskspassa a guardar o título descritivo de cada task (do heading emtasks.md). Os orquestradores (agente-00cefeature-00c) gravam.tasks[].tituloao registrar o outcome da task; a ingestão grava a coluna passando o valor porsecrets-filter.sh(FR-017 — é o único campo de texto livre da camada B). Migração idempotente viaALTER TABLE tasks ADD COLUMN titulo TEXTemrecall_apply_schema: índices v2 ganham a coluna sem precisar de--reindex; DBs novos já nascem com ela. Retro-compat:.tasks[].tituloausente →"". - Evento
recall_consulted+ métrica de consultas ao histórico: os orquestradores gravam um eventorecall_consultedem.eventos[]a cada consulta do read-back loop (cstk recall --context) no início despecify/plan— inclusive quando nada é retornado (hits=0), caso que a Decisãoread-back PRE-DECISAOnão cobria (só registrada comK>0, FR-017). A métrica "quantas vezes o histórico foi consultado pelo orquestrador" =COUNT(*) FROM events WHERE event_type='recall_consulted'; adescricaocarregaetapa=… hits=Npara separar consultas produtivas das vazias. Sem mudança de schema (a ingestão deeventsaceita o tipo por convenção, sem allowlist). Best-effort: nunca gateia/aborta/atrasa a onda.
Changed¶
RECALL_SCHEMA_VERSION2 → 3 (apenas pela colunatitulo; o eventorecall_consultednão altera schema).
Tests¶
tests/cstk/test_recall.sh: cobertura detitulo(scrub do segredo + retro-compat""), cenáriom13da migração ALTER v2→v3 (coluna adicionada, linhas pré-existentes preservadas, idempotente) eb23da métricarecall_consulted(total + split produtivas/vazias). Asserts deschema_versionatualizados para3.
4.1.1 - 2026-05-25¶
Correções na camada de memória cross-feature (cstk recall). Afetam apenas
cli/lib/recall.sh — o índice (~/.claude/cstk/knowledge.db) é derivado e
reconstruível via cstk recall --reindex. Sem mudança de schema.
Fixed¶
- Feature gravada como
unknownno índice quandostate.jsonnão temshort_name: a ingestão derivava o nome da feature apenas de.short_name. States legados sem o campo (gravados antes de oinitversioná-lo) caíam no fallback"unknown". Agora a resolução: (1) tolera.execucao.short_namealém de.short_name; (2) quando ausente, deriva o short-name do diretório-pai no layoutfeature-00c-state/<short-name>/(checagem por componente — robusta para caminhos relativos e absolutos). O layoutagente-00c-state/continuaunknownpor design (o orquestrador de projeto não gravashort_name— anti-eco FR-011). --reindexpodia ESVAZIAR o índice (perda de dados): ofindde descoberta de states, ao varrer uma raiz ampla (ex.:$HOMEdefault), sai com status ≠0 ao tocar diretórios sem permissão — mesmo tendo impresso matches válidos. O idiomafind ... || _rx_states=""descartava esses matches; como o reindex apaga o DB antes de repopular, o índice terminava vazio. Trocado por|| :, que preserva o stdout já capturado pela command-substitution.
Tests¶
tests/cstk/test_recall.sh:scenario_16(resolução de feature comshort_nameausente — fallback por diretório,.execucao.short_name, caminho relativo, eagente-00c-state→unknown) escenario_17(reindex preserva matches quandofindsai ≠0).
4.1.0 - 2026-05-24¶
Melhorias de tooling de desenvolvimento (não afetam o tarball de release nem
o usuário instalado — apenas tests/, .github/ e .shellcheckrc). O tarball
de catálogo é idêntico em conteúdo ao da v4.0.0; esta release é um marco de
repo (sincroniza CHANGELOG/tag) e gate de CI.
Added¶
tests/run.sh --fast/--slow: split da suite por velocidade.--fastpula a allowlist de tests lentos (_is_slow_test, derivada de medição — 11 tests > ~5s somando ~177s de ~260s) e roda em ~1/3 do tempo;--slowroda só os lentos. Mutuamente exclusivos; compõem com PATTERN e--list/--stats.tests/run.sh --stats: agrega contagem de scenarios por arquivo (desc) + total. Respeita PATTERN e o filtro de velocidade.tests/test_run-modes.sh: cobertura dos novos modos (registrado como teste interno em_is_internal_test).- CI shellcheck advisory (
.github/workflows/shellcheck.yml): lint estático dos.shem PR + push main, não-gateante (continue-on-error). Config de ruído sistêmico em.shellcheckrc(disable SC1091/SC2016/SC2148).
4.0.0 - 2026-05-24¶
BREAKING — feature model-routing-por-onda. O model-routing dos
orquestradores autônomos (agente-00c/feature-00c) deixa de ser
audit-only: o modelo escolhido agora É APLICADO à execução. Isto
revoga a cláusula FR-017 da feature original agente-00c-model-routing
(v3.15.0), cuja premissa de que "o harness não aceita model no spawn,
logo a escolha é apenas auditoria" ficou obsoleta — o harness atual
aceita model no spawn de subagente (precedência sobre o frontmatter).
O gatilho do routing deixa de ser o caminho raro do spawn de clarify e
passa a ser toda onda do pipeline.
Por que MAJOR: muda o contrato de comportamento do orquestrador
(antes: sugere e audita, nunca aplica; depois: aplica por onda). Para
ativar o comportamento novo é preciso build + install da fonte
(global/...) — passo manual do operador; o tarball publicado é que
carrega o efeito. Camada de telemetria/auditoria permanece
retro-compatível (execuções antigas sem Decisão por-onda continuam
legíveis pelo agregador).
Changed (BREAKING)¶
- Mecanismo PRIMÁRIO — mapa fase→modelo por onda (FR-014): novo
model-routing.sh wave-select --state-dir <SD>resolve a fase (via--etapaou.etapa_corrente) e retorna o modelo a aplicar na onda, com base no mapa versionado e determinísticoglobal/skills/agente-00c-runtime/references/phase-model-map.txt(POSIX-puro, semjq). Recorte default "3 faixas balanceado":plan/analyze/constitution→opus;specify/clarify/checklist/create-tasks/briefing→sonnet;execute-task→sonnet (piso refinável);validate-docs/review-task→haiku; fase não listada →manter-atual(FR-020 — nunca erro, evolução tolerada). - Aplicação no spawn de clarify (US2, FR-003): o passo 8 da sequência
pré-spawn passa
model=<escolha>à tool Agent quando acionável (escolha∈ {haiku,sonnet,opus} escore >= 2); em fallback/manter-atual/score<2omodelé omitido e o subagente herda omodel:do frontmatter. O par Decisão⟷spawn permanece 1-para-1 (Invariante I1): a aplicação não cria 2a Decisão. - Documentação revogando o audit-only (FR-017): banner de
supersessão na spec arquivada
docs/specs/_archived/agente-00c-model-routing/spec.md(Status + FR-017 + Princípio V + Out-of-Scope anotados); seção model-routing doCLAUDE.mdreescrita (aplicação por onda + tabela fase→modelo + ordem de precedência); blocos pré-spawn dos dois agent files (agente-00c-orchestrator.md,agente-00c-feature-orchestrator.md) corrigidos para refletir aplicação (eliminadas as contradições internas com a nota FASE 5);review-task/SKILL.mdajustado.
Added¶
model-selectorcomo camada de REFINO (FR-001/FR-019, US4): roda só emexecute-taskcom--task-text, sobre o piso do mapa (sonnet), podendo elevar→opus (tarefa profunda) ou rebaixar→haiku (tarefa trivial). Catálogo de sinais (global/skills/model-selector/references/sinais.md) expandido além do MVP com vocabulário de fase/complexidade, coberto por corpus de teste (tests/fixtures/model-selector-corpus/corpus.tsv).- Precedência de resolução do modelo da onda:
override manual (FR-016) > escalada mid-onda→opus (FR-015) > refino model-selector > mapa fase→modelo. Override do operador via Decisão manual pré-onda lida pelo resume; escalada mid-onda via.escalada_modelo_pendente=truegravado pela onda anterior (sinaliza subestimação). - Idempotência por onda (FR-008):
wave-selectecoa o modelo já aplicado e não registra 2a Decisão quando já existeDecisaoDeRoteamentoPorOndapara a onda corrente (seguro em resume). - Auditoria sugerido-vs-aplicado (US3, FR-012/SC-006):
model-routing-report.sh aggregateganha 2a seção "Seleção por onda — sugerido vs aplicado" (distribuição do modelo aplicado, por origem mapa/refino/override/fallback, taxas de fallback e override, contagem de divergências sugerido≠aplicado comrotuladas/sem rotulo).sem rotuloDEVE ser 0 (review-taskescala findingmodel-routing-divergencia-sem-rotulo). - Integração nos commands (FASE 3):
agente-00c/feature-00c+ respectivos*-resumeaplicam owave-selectno início de cada onda e leem override manual pré-onda. - Cobertura de teste:
tests/test_model-routing.sh,tests/test_model-routing-report.sh,tests/test_command-spawn-model-routing.sh,tests/test_orchestrator-spawn-model-apply.sh,tests/test_state-decisions-reconcile.sh,tests/cstk/test_model_selector_corpus.sh, fixtures de state com routing por onda (mixed + unlabeled-divergence).
3.19.1 - 2026-05-24¶
Correções de coerência pós-3.19.0, sem mudança de comportamento do produto
(documentação + tooling de testes). Não altera o conteúdo funcional do tarball.
Fixed¶
- CHANGELOG — footer-links da série 3.x: o rodapé de links de versão só
cobria
1.0.0/1.1.0/2.0.0; toda a série 3.x (28 versões, incluindo a própria3.19.0) estava sem link. Bloco regenerado a partir dos headings (formatoreleases/tag/vX.Y.Z, ordem descendente) — agora 31 headings = 31 links, consistente com a convenção Keep a Changelog. tests/run.sh --check-coverage— falsos órfãos: o check saía com exit 1 por 3 órfãos-de-script (_log.sh,_state-dir.sh,classify.sh) + 27 órfãos-de-test que, na verdade, possuem cobertura — apenas sob tests de nome descritivo que não casa a convenção 1:1test_<base>.sh(tests granulares demodel-selectore tests de aspecto comoruntime-log-redaction,secrets-filter-backup,skills-cache-protocol,update-extra-kinds,state-dir-parametrization). Adicionada allowlist coerente nos dois lados (_is_internal_testpara tests +_is_covered_by_named_testpara scripts), cada isenção exigindo que o cobridor exista em disco (anti-ponto-cego: se o script/test sumir, volta a ser órfão real). Resultado:./tests/run.sh→ORPHANS: 0(sem falso WARN) e--check-coverage→ exit 0. Suíte completa 1043/0/0, sem regressão.
3.19.0 - 2026-05-24¶
Expande a ingestão da memória de conhecimento (cstk recall) para derivar
métricas de dashboard a partir do state.json transacional, sem nunca
tocá-lo (somente leitura) e sem quebrar a propriedade de índice derivado
(tudo reconstruível via cstk recall --reindex). O índice
(~/.claude/cstk/knowledge.db) sobe de schema v1 → v2 de forma aditiva e
retro-compatível (CREATE TABLE IF NOT EXISTS): nenhuma das 4 tabelas
textuais existentes (decisions/bloqueios/retros/skills) muda de
semântica, e bases v1 instaladas migram em silêncio na primeira ingestão. Esta
feature prepara o terreno para um futuro cstk-panel (dashboard read-only,
fora de escopo): este repositório passa a ser a fonte da verdade das
métricas que o painel consumirá. Camada estritamente aditiva, best-effort,
read-only — nenhum breaking change nos modos existentes
(search/--ingest/--reindex/--context).
Added¶
- Camada A — métricas derivadas em
cli/lib/recall.sh: 3 novas tabelas ingeridas a partir de.execucao,.ondas[],.metricas_acumuladas,.orcamentose.historico_movimento_circulardostate.json: executions— uma linha por execução (proveniência project/feature/id, status, motivo de término filtrado, duração derivada;NULLquandoem_andamento).waves— uma linha por onda (ciclo de vida,tool_calls,wallclock_seconds, motivo de término).alert_signals— uma linha por sinal de alerta (circular, budget breach), idempotente e tolerante a negativos. Métricas adicionais (latência humana de bloqueios, clarify-rate, mix de roteamento de modelos) ficam deriváveis a partir das tabelas — o mix de modelos permanece delegado ao agregadormodel-routing-report.sh.- Camada B — instrumentação em
cli/lib/recall.sh+ nos dois orquestradores (global/agents/agente-00c-feature-orchestrator.mdeagente-00c-orchestrator.md): 2 novas tabelas alimentadas por campos aditivos dostate.json: tasks— outcome por task (outcomepass|fail, testes rodados/passados,lint_ok,arquivos_tocados), chave natural(project, feature, execucao_id, task_id).events— eventos do ciclo de execução. Campos.tasks[]/.eventos[]gravados pelo mesmo caminho de runtime auditado dos demais writes — nenhum mecanismo de escrita novo (contract layer-b §5).schema_versiondo índice 1 → 2 (registrado emschema_meta); migração aditiva e idempotente.
Notes¶
- Índice puramente derivado (FR-001/FR-002): a ingestão lê o
state.jsonsomente em modo leitura (jq -r+wc -c); auditoria empírica confirma zero write-back aostate.jsone confinamento desqlite3exclusivamente emcli/lib/recall.sh(FR-004). Base inteira reconstruível via--reindex. - Degradação graciosa (FR-003): ausência de
sqlite3/jqnunca aborta a ingestão nem a onda — sai com status 0 emitindo aviso. - Idempotência (FR-008): toda escrita de entidade nova é idempotente por chave natural; re-ingerir a mesma execução não altera o índice.
- Segredos (FR-006): todo texto livre persistido passa pelo filtro de
segredos antes do
INSERT. - Spec:
docs/specs/knowledge-db-metrics/; contratos emcontracts/recall-ingest-schema.mdecontracts/layer-b-instrumentation.md.
3.18.0 - 2026-05-23¶
Fecha o read-back loop da memória de conhecimento cross-feature: até
v3.17.0 os orquestradores apenas ESCREVIAM no índice (cstk recall --ingest);
agora também LEEM de volta. Um novo modo cstk recall --context consulta o
índice (FTS5/bm25) com os termos da feature corrente e devolve um bloco
markdown enxuto pronto para injeção em prompt; os orquestradores agente-00c/
feature-00c o invocam num passo PRE-DECISAO no início das fases specify e
plan, injetando aprendizado de execuções passadas antes de decidir. Camada
estritamente aditiva, best-effort, read-only — nenhum breaking change nos modos
existentes (search/--ingest/--reindex).
Added¶
- Modo
cstk recall --context "<termos>"emcli/lib/recall.sh(recall_mode_context): retorna um ContextBlock markdown (> Aprendizado recuperado (read-back loop) — K achados...+ uma linha por achado com proveniênciaproject/feature/wave (ts): body). Flags:--limit N(default 4),--exclude-feature NAME(anti-eco no SQL),--max-bytes N(default 2000, corte por achado inteiro),--type/--project/--db(iguais ao modo busca). Composição OR entre termos (novo helperfts_query_escape_or, reusafts_phrase_escape) — o modo busca permanece AND-implícito. - Passo PRE-DECISAO (read-back loop) nos dois orquestradores
(
global/agents/agente-00c-feature-orchestrator.mdeagente-00c-orchestrator.md): dispara somente emspecify+plan, deriva termos deaspectos_chave_iniciais(≤8, fallbackprojeto_alvo_descricao), injeta o bloco com rótulo UNTRUSTED / não-autoritativo (defesa prompt-injection ASI09/LLM01) e registra Decisão auditável quando K>0 (sem persistir o body bruto recuperado).
Security¶
- Conteúdo recuperado pelo modo
--contextjá foi scrubbed na ingestão (secrets-filter.sh) — o consumo não re-scrub (seguro por construção). NUL rejeitado em qualquer input; anti-eco aplicado no SQL viasql_escape(sem bypass por valor manipulado); injeção SQL/FTS tratada como literal.
Notes¶
cstk recall --contexté read-only e best-effort: toda degradação (semsqlite3, índice ausente/corrompido, zero achados, query degenerada) resulta em no-op silencioso (stdout vazio, exit 0) — nunca gateia uma onda. O teto de tempo (US3-3) é satisfeito pelo.timeout 5000do SQLite + a natureza best-effort, semtimeoutwrapper dedicado (POSIX sh puro).- Cobertura: 22 cenários novos em
tests/cstk/test_recall.sh(modo--contextfaz parte derecall.sh, sem arquivo de teste órfão), rodados sob HOME real e HOME falso.
3.17.0 - 2026-05-23¶
Adiciona a camada aditiva de memória de conhecimento cross-feature: um índice
SQLite global (~/.claude/cstk/knowledge.db, FTS5) alimentado por um hook
best-effort no fim de cada onda dos orquestradores agente-00c/feature-00c,
e o novo comando cstk recall para busca cross-projeto/feature com
proveniência. O índice é puramente derivado — o state.json transacional
permanece a fonte de verdade, intacto, fora do caminho crítico. Sem breaking
changes.
Added¶
- Comando
cstk recallemcli/lib/recall.sh(POSIX sh +jq+sqlite3), com três modos: - busca (default):
cstk recall <query> [--project P] [--type T] [--limit N] [--db PATH]— full-text via FTS5/bm25 sobre decisões, bloqueios, retro-execuções e skills invocadas, ordenado por relevância e exibindo proveniência (projeto / feature / onda / data).--typeaceitadecision|bloqueio|retro|skill;--limitexige inteiro positivo (default 20). - ingestão (
--ingest --state-dir DIR): extrai os registros de umstate.jsone faz upsert idempotente no índice (filtrado porsecrets-filterantes da escrita). É o hook chamado no fim de onda. - reconstrução (
--reindex [--states-root DIR]): reconstrói o índice a partir dosstate.json/state-historyexistentes, tornando a base totalmente descartável e regenerável. - Hook de fim de onda documentado em ambos os orquestradores
(
agente-00c-orchestratoreagente-00c-feature-orchestrator): após o backup filtrado da onda, invocacstk recall --ingestem modo best-effort. - Segurança de entrada em
recall.sh: escaping em duas camadas (literais SQL via duplicação de aspas simples + tokens FTS5 via duplicação de aspas duplas), validação de--limitcomo inteiro, e rejeição/strip de bytes NUL. - Degradação graciosa: a ausência de
sqlite3oujqnunca aborta uma onda — o hook e orecallsaem com status 0 emitindo um aviso. O índice é isolado em~/.claude/cstk/, separado do estado transacional por projeto. - Cobertura: 20 cenários em
tests/cstk/test_recall.sh(quickstart 1-14, detector/strip de NUL, degradação semsqlite3/jq, índice corrompido, reindex, adversariais e concorrência),shellcheck -s shlimpo. Spec emdocs/specs/cstk-knowledge-db/.
3.16.0 - 2026-05-23¶
Adiciona a skill decision-tree, que gera um relatório HTML interativo em
forma de árvore de decisão a partir do state.json de uma execução
agente-00c/feature-00c. Inclui correção de conformidade (Princípio I e III
da constitution) e habilita a skill no profile complementary. Sem breaking
changes.
Added¶
- Skill
decision-treeemglobal/skills/decision-tree/: o script POSIXrender-decision-tree.sh(subcomandorender --state PATH [--output FILE] [--title STR]) extrai.decisoes[]viajqe injeta num template HTML autocontido (SVG + painel de detalhe + zoom, abre offline sem CDN). O tronco verde liga cronologicamente aescolhade cada Decisão à seguinte, dedec-001até um nó de conclusão. Invariantes IDT-1 (read-only), IDT-2 (determinístico byte-a-byte), IDT-3 (POSIX puro), IDT-4 (render no cliente). Cobertura: 18 cenários emtests/test_render-decision-tree.sh,shellcheck -s shlimpo. complementary:decision-treeemscripts/profiles.txt.in: a skill agora é instalada porcstk install --profile complementary(e por--profile all). Antes só aparecia no profile auto-geradoall.- Spec retroativa em
docs/specs/decision-tree/(spec.md+tasks.md): ratifica o contrato já implementado para conformidade com o Princípio I (SDD recursivo) da constitution.
Fixed¶
- Seção
## Gotchasausente emglobal/skills/decision-tree/SKILL.md(violava o Princípio III — "um SKILL.md sem Gotchas é incompleto" — e o quality gategrep -L '## Gotchas'). Adicionadas armadilhas reais:jqmandatório sem fallback, escape obrigatório de</,escolhafora das opções, proibição de timestamp no payload (IDT-2) e de CDN externo. model-selectorórfã de profile: a skill (v3.14.0), consumida pelos orquestradores no passo 1 do model-routing, só estava no profile auto-geradoall.cstk install(defaultsdd) instalava os orquestradores mas deixava o fluxo de model-routing sem a skill que ele invoca. Adicionada asdd:model-selectorecomplementary:model-selectoremscripts/profiles.txt.in(mesma razão deagente-00c-runtime).
3.15.0 - 2026-05-23¶
Entrega da feature agente-00c-model-routing via pipeline SDD
autonoma /feature-00c em 21 ondas com 42+ decisoes auditaveis.
Integra a skill standalone model-selector (v3.14.0) aos
orquestradores autonomos agente-00c e feature-00c no spawn de
subagentes via tool Agent (clarify-asker + clarify-answerer),
registrando Decisao auditavel + entrada em
.ondas[N].skills_invoked[] por spawn. Sem breaking changes.
Added¶
- Helper POSIX
model-routing.shemglobal/skills/agente-00c-runtime/scripts/: 3 subcomandos (template,invoke,idempotent-check) implementando invariantes INV-1..INV-6 do contract.templateemite payload determinista para input domodel-selector;invokeorquestra classify+register+skill-invoked em uma transacao atomica via state-lock;idempotent-checkrejeita re-spawn com mesmo input (mesmodecisao-id+ mesmo input-hash). Cobertura: 94 cenarios shell emtests/test_model-routing.sh,shellcheck -s shlimpo. - Reconciliador
state-decisions-reconcile.shemglobal/skills/agente-00c-runtime/scripts/: 2 subcomandos (detect,repair). Resolve half-records (decisao sem entrada emskills_invoked[]ou vice-versa) detectados em retomadas pos-crash.--dry-runlista divergencias sem mutar;--applyreescreve mantendo append-only via merge auditavel. Cobertura: 11 cenarios emtests/test_state-decisions-reconcile.sh. - Agregador
model-routing-report.sh aggregateemglobal/skills/agente-00c-runtime/scripts/: consome state.json e emite tabela markdown (total de roteamentos, distribuicao por modelohaiku|sonnet|opus|manter-atual, taxa de fallback, half-records pendentes — deve ser 0). Consumido peloreview-taskpara auditoria de cobertura de model-routing. Cobertura: 17 cenarios emtests/test_model-routing-report.sh. - Integracao em
agente-00c-orchestrator.md§5.e.bis: nova secao "Roteamento de modelos pre-spawn" com sequencia 8-step e invariantes I1 (toda decisao gera skill_invoked match), I2 (toda retomada checa half-records), I3 (idempotencia por input-hash). Analogo emagente-00c-feature-orchestrator.md. - Auditoria em
review-task/SKILL.md§4.5: nova subsecao "Model-routing coverage" — review-task agora chamamodel-routing-report.sh aggregatee reporta saude do roteamento (cobertura de spawns, taxa de fallback, half-records). - Spec SDD completa em
docs/specs/agente-00c-model-routing/: spec.md (20 FRs), plan.md, research.md, data-model.md, quickstart.md, tasks.md (~100 tarefas em 7 fases), contracts/ (model-routing-helper.mdcom 6 invariantes,orchestrator-integration.md), checklists/requirements.md (50 items, 4 load-bearing CHK032/CHK047/CHK048/CHK050).
Fixed¶
- Performance: watcher subshell leak (descoberto durante execucao da feature): scripts internos do agente-00c-runtime spawnavam subshells de watcher em loop sem cleanup, causando ~16.8x overhead em ondas longas. Corrigido com trap EXIT explicito + PID tracking. Impacto: ondas de execute-task longas (>10min) agora finalizam ~17x mais rapido.
Changed¶
review-task/SKILL.mdganhou §4.5 (model-routing audit). Demais secoes inalteradas — comportamento backwards-compatible quando state.json nao temskills_invoked[]com entries do model-selector.
3.14.0 - 2026-05-22¶
Tres entregas principais: (1) skill model-selector completa via
pipeline SDD autonoma, (2) Fases 1+2 da feature artifact-cache
(primitiva state-cache.sh + protocolo de leitura nas 4 skills SDD
principais), (3) otimizacoes de tokens/boot via trim de descriptions
em skills, commands e custom agents. Sem breaking changes.
Added¶
- Skill
model-selector(PR #17): sugestor de modelo (haiku/sonnet/opus) por heuristica POSIX pura.scripts/classify.sh(560+ linhas) classifica o input do operador em rasa/media/profunda e emite output markdown em 4 secoes fixas, com fallbackmanter-atualquando indeterminado (input <3 tokens ou empate de pesos).scripts/report.sh(118 linhas) agrega varias classificacoes via branch jq happy-path + fallback awk byte-identical (FR-010a — carve-out de optional-deps). Catalogo de sinais extensivel sem patch emreferences/sinais.md(15 verbos MVP, peso=1). Rotulos sempre abstratos — nunca versao concreta de modelo. 22 testes shell (~127 cenarios PASS),shellcheck -s shlimpo,SKILL.md<200 linhas. Entregue via pipeline SDD autonoma/feature-00cem 23 ondas com 100 decisoes auditaveis. - Protocolo de leitura cache em skills SDD (Fase 2 de
artifact-cache) (PR #16):
specify,clarify,planeexecute-taskagora consultamstate-cache.sh readantes de ler briefing/constitution do disco, com fallback transparente. Reduz ~5-10k tokens/onda em pipelines longos doagente-00c/feature-00c. Hash-validation TOCTOU-safe via_hash.sh; skills standalone (sem state.json) preservam comportamento original. - Primitiva
state-cache.sh+_hash.sh(Fase 1 de artifact-cache) (PR #15): novo helper POSIX emglobal/skills/agente-00c-runtime/scripts/state-cache.shcom 6 subcomandos (init,read,write,invalidate,status,gc) operando sobre namespaceartifact_cacheemstate.json. Extensaostate-validateaceita o novo schema. Helper sourceable_hash.shcentraliza calculo de SHA-256 com fallbacksha256sum/shasum/openssl/awk.
Added (drafts SDD — sem implementacao)¶
- Feature SDD
agente-00c-artifact-cachedrafts iniciais emdocs/specs/agente-00c-artifact-cache/: spec.md— feature spec completa com 4 User Stories (P1/P1/P2/P2), 17 Functional Requirements (FR-CACHE-001..017), Edge Cases, Constitutional Alignment, 5 Success Criteria, Out of Scope, e 5 Open Questions para/clarify.plan.md— plano tecnico provisorio com Constitution Check, Data Model (state.json novo schema), API Contracts da primitiva novastate-cache.sh(6 subcomandos), Research (5 decisoes), Project Structure, Phase plan, Risks.tasks.md— 20 tarefas em 5 fases (Clarify → Primitiva+schema → Skills → Orquestrador+report → Integracao+release), matriz de dependencias, coverage matrix Requirements×Tasks.- Proposito: reduzir ~5-10k tokens/onda em pipelines longos do
agente-00c via cache opcional de briefing.md + constitution.md
em
state.json, com hash-validation TOCTOU-safe e fallback preservado para skills standalone. - Implementacao real fica deferida apos
/clarifyresolver as 5 Open Questions.
Changed¶
- Slash commands + custom agents descriptions: trim YAML
description:em todos os 6 slash commands (global/commands/) e 6 custom agents (global/agents/). Reducao de ~5.245 chars para ~2.569 chars (~669 tokens economizados por boot, -51%). Triggers e discriminadores chave preservados (clarify-asker vs answerer, orchestrator vs feature-orchestrator, etc). Detalhes operacionais e flags permanecem no body de cada arquivo (so carrega quando o comando/agente e efetivamente invocado). Continuacao da otimizacao iniciada em PR #8 (skills); combinada, total ~2k tokens/boot. PR #9. - Skill descriptions: trim YAML
description:em todas as 21 skills deglobal/skills/(de ~10k chars / ~2.560 tok para ~4.6k chars / ~1.150 tok no contexto eager-loaded). Reducao de 54% nos descriptions, ~1.350 tokens economizados por boot. Triggers (frases em aspas) preservados — routing inalterado. Detalhe sobre frameworks, listas longas e clausulas "NAO use para X" extensas migrado para o body doSKILL.md(so carrega quando a skill e invocada). Otimizacao para reduzir custo por onda em pipelines longos (agente-00c,feature-00c). PR #8.
3.13.0 - 2026-05-20¶
Feature-00C — variante do agente-00C focada em uma feature
individual dentro de projeto que JA tem briefing.md +
docs/constitution.md ratificados. Reusa integralmente o runtime
POSIX do agente-00c via parametrizacao retrocompativel (zero
mudancas em comportamento do /agente-00c). Bump MINOR — nenhuma
breaking change.
Added¶
- 3 slash commands:
/feature-00c "<descricao>" [<short-name>](invocacao),/feature-00c-resume <short-name>(retomada com hash validation TOCTOU-safe),/feature-00c-abort <short-name>(aborto manual com SIGTERM + grace period 60s). - 3 agentes custom:
agente-00c-feature-orchestrator(pipeline 7-fases: specify → clarify → plan → checklist → create-tasks → execute-task → review-task),feature-00c-clarify-asker,feature-00c-clarify-answerer(algoritmo de score 0..3 identico ao 00c, mas 3a fonte = spec_corrente em vez de stack_sugerida). - Pre-flight
feature-00c-preflight.sh(FR-010A): valida hashes briefing + constitution registrados em state.json contra arquivos em disco; distingue MAJOR drift (bloqueio compulsorio) de MINOR/PATCH (aviso opcional). Output JSON estruturado. - Filtro de secrets estendido (FR-029 §extensao + FR-036):
secrets-filter.sh for-backupgera backups por onda com hash auto-registrado (state_sha256_self) sobre conteudo filtrado;_log.shaplica filtro em stderr/stdout via helper sourceable com fallback[NO-FILTER]graceful. - §Quality Gates complementares no
agente-00c-feature-orchestrator.md(alinhamento com PR #6 / v3.12.0): integravalidate-documentation(apos specify+plan),owasp-security(apos plan, findings critical/high = BloqueioHumano OBRIGATORIO) evalidate-docs-rendered(apos create-tasks) como gates pos-artefato auditaveis. gate-findingegate_skippedcomokindvalidos de Decisao (data-model.md§Decisao)./review-taskaudita features com2 skips sem justificativa como
quality-gate-bypass.- Helper sourceable
_state-dir.sh: resolve diretorio de estado via precedencia--state-dir arg > AGENTE_00C_STATE_DIR env > erro. Inclui_sd_flavor_to_report_namepara nomes canonicos por flavor (agente-00c | feature-00c). - Roundtrip empirico de secrets documentado em
docs/specs/feature-00c/validation-runs/roundtrip-secrets-2026-05-20.md— 7 checks PASSED empiricamente (contrato de privacidade da feature-00c validado).
Changed¶
- README.md: nova subsecao "Feature-00C — Variante de escopo de feature individual" sob a secao Agente-00C, documentando os 3 comandos novos + coexistencia com agente-00c.
global/skills/agente-00c-runtime/SKILL.md: description atualizada mencionando os DOIS orquestradores que consomem o runtime; 3 secoes novas + 4 Gotchas cobrindo as adicoes.- 21 scripts POSIX do agente-00c-runtime: refactor de
parametrizacao confirmado como majoritariamente DESNECESSARIO
(auditoria empirica em
global/skills/agente-00c-runtime/scripts/_audit-paths.md: 18/21 ja aceitavam--state-dirdesde v1.0).
Tests¶
- +33 cenarios POSIX na suite global (de 651 → 672 PASS):
tests/test_state-dir-parametrization.sh(12 cenarios)tests/test_feature-00c-preflight.sh(7 cenarios)tests/test_secrets-filter-backup.sh(8 cenarios)tests/test_runtime-log-redaction.sh(6 cenarios)- Template de cenarios manuais em
docs/specs/feature-00c/validation-runs/quickstart-2026-05-20.md(12 cenarios incluindo roundtrip empirico + gate-finding).
Backward compatibility¶
- Zero breaking changes.
/agente-00ccontinua funcionando bit-a-bit identico. - Refactor de runtime e 100% retrocompativel — comportamento default preservado sem env var.
- Suite POSIX completa: 672 PASS / 0 FAIL / 0 ERROR / ~140s.
Detalhamento¶
docs/specs/feature-00c/: 37 FRs, 14
SCs, 11 user stories, plan + research (7 Decisions Phase 0), data-
model (8 entidades), 2 contracts (cli-invocation + report-format),
2 checklists (requirements 35 items, security 40 items), quickstart
(12 cenarios), validation-runs (coverage + quickstart-template +
roundtrip empirico).
3.12.0 - 2026-05-20¶
Auditoria estrategica de skills "complementares" do toolkit. Skills sem referencia em nenhum orquestrador ou skill orquestradora eram codigo morto — discoverable so via trigger phrase manual, e raramente acionadas na pratica. Esta release toma decisao explicita skill-por-skill: incentivar (integrando aos orquestradores), depreciar (com remocao agendada), ou remover (quando project-specific demais para o toolkit).
Added¶
- Principio formal de escopo do toolkit (README §Contribuindo):
skills publicadas em
global/skills/oulanguage-related/<stack>/skills/NAO devem nomear clientes/projetos especificos. Skills com forte acoplamento a um projeto pertencem ao proprio projeto, em<projeto>/.claude/skills/. Caso historico:create-report. - Quality Gates SDD no orchestrator (
agente-00c-orchestrator.mdsecao 5.f): 3 skills antes orfas (validate-documentation,validate-docs-rendered,owasp-security) viraram gates nao-bloqueantes pos-artefato no pipeline: - apos
specify→validate-documentationem spec.md - apos
plan→validate-documentationem plan.md +owasp-security(findings critical/high obrigam BloqueioHumano) - apos
create-tasks→validate-docs-renderedno feature-dir
Skip de gate e auditavel: requer Decisao com justificativa, e
/review-task flaga features com >2 skips sem motivo solido como
quality-gate-bypass.
- Delegacao para skills Go em execute-task e review-task:
6 skills go-* antes orfas viraram atalhos explicitos quando stack
detectado for Go (execute-task §4.2.1 e review-task "Atalhos de
auditoria por stack"): go-add-entity, go-add-consumer,
go-add-migration, go-add-test, go-review-service, go-review-pr.
Deprecated¶
- Skill
create-use-case: substituida porspecify(formato SDD com user stories, success criteria e integracao com pipeline orquestrado). Frontmatter recebedeprecated: true,deprecated_since: 3.12.0,remove_in: 4.0.0. UC classico nao tem mais espaco no fluxo atual. - 8 skills
dotnet-*:dotnet-create-entity,dotnet-create-feature,dotnet-create-project,dotnet-create-test,dotnet-hexagonal-architecture,dotnet-infrastructure,dotnet-review-code,dotnet-testing. Stack .NET descontinuada pelo mantenedor; sem substituto no toolkit global. Remocao agendada para v4.0.0 — usuarios que ainda usam .NET devem copiar para<projeto>/.claude/skills/antes da remocao.
Removed¶
- Skill
create-report(language-related/go/skills/create-report/): era altamente acoplada ao sistema GOB (nomes de servico hardcodedgob-report-service/gob-go-commons, exchange RabbitMQgob.reports, caminhos ETCD do GOB, vocabulario macônicolodge/federal/state_orient, cabecalho fixo "Grande Oriente do Brasil" no PDF). Material project-specific pertence ao<projeto>/.claude/skills/, nao ao toolkit global. Caso historico que motivou o principio formal acima.
Changed¶
- README: arvore de estrutura marca
create-use-casee diretoriolanguage-related/dotnet/como deprecated; tabela "Skills para .NET" recebe aviso de depreciacao; tabela "Skills para Go" reflete a delegacao via orquestradores; secao Contribuindo ganha o principio formal de escopo + regra #8 ("Generalize, ou pertence ao projeto").
Why this release matters¶
Skills orfas (sem incentivo nos orquestradores) viram codigo morto silencioso: ocupam espaco no install, complicam descoberta, mas raramente sao acionadas. A auditoria desta release decidiu o destino de cada uma das 24 skills "complementares" do toolkit:
- 13 ACTIVE (ja integradas — sem mudanca)
- 9 incentivadas via orquestradores (3 gates SDD + 6 go-* via execute-task/review-task)
- 4 mantidas standalone (
bugfix,advisor,image-generation,apply-insights— uso por trigger manual cobre o caso) - 9 deprecated (8 dotnet-* + create-use-case)
- 1 removida (
create-report)
3.11.0 - 2026-05-19¶
Enforcement runtime do protocolo pre-flight constitution-conflict
(orchestrator.md §5.b). O hardening v3.8.0 documentou em texto que o
orquestrador deve emitir BloqueioHumano antes de invocar
Skill(constitution) quando pipeline.sh constitution-conflict
retorna exit=2, mas nao havia trava no runtime — dec-004 do projeto
github-pages-cstk-manual provou empiricamente que o agente pode
detectar exit=2 corretamente, listar as 3 opcoes canonicas, e ainda
assim decidir sozinho em Auto Mode (--score 2) e invocar a skill
sem aguardar resposta humana. Esta release fecha os dois caminhos de
bypass no runtime, sem mudar comportamento legitimo.
Added¶
- Trava em
state-decisions.sh register: quando--opcoescontem as 3 strings canonicas do BloqueioHumano pre-flight (atualizar-global-via-bump-SemVer,criar-feature-delta-com-sync-impact-report,abortar-feature-sem-principios-proprios), exige--score 0. Score maior reproduz dec-004 e e rejeitado com exit 1 + mensagem detalhada apontando para a sequencia correta (registrar score 0 →bloqueios.sh register→ aguardar humano →pipeline.sh require-blockade-resolved→ invocar skill). pipeline.sh require-blockade-resolved --state-dir SD --etapa STAGE: novo subcomando que valida cadeia decisao→bloqueio→resposta humana antes da invocacao da skill. Para--etapa constitution:- exit 0 se bloqueio respondido com
atualizar-global-via-bump-SemVeroucriar-feature-delta-com-sync-impact-report; - exit 1 com diagnostico em stderr (
status: missing-preflight-decision/missing-blockade/blockade-pending/blockade-resolved-abort/blockade-invalid-response) caso contrario; - outras etapas retornam
status: not-enforcedexit 0 (extensivel para futuros protocolos).
Changed¶
global/agents/agente-00c-orchestrator.md§5.b: instrucao OBRIGATORIA para rodarpipeline.sh require-blockade-resolvedantes de cadaSkill(constitution). Inclui descricao dos exit codes + referencia historica ao bypass dec-004 que motivou o enforcement.
Tests¶
- 5 novos cenarios em
tests/test_state-decisions.sh(22 total) cobrindo: rejeicao com 3 opcoes canonicas + score=2; aceitacao com score=0; ordem das opcoes irrelevante; backward-compat para decisoes posteriores (tipo ratificacao) com etapa=constitution mas opcoes diferentes; subconjunto parcial das canonicas nao dispara trava. - 8 novos cenarios em
tests/test_pipeline.sh(35 total) cobrindo: etapa nao-enforcada retorna 0; ausencia de decisao pre-flight falha; decisao sem bloqueio FK falha; bloqueio aguardando falha; respondido com criar-delta passa; respondido com atualizar-global passa; respondido com abortar falha; resposta nao-canonica falha. - Suite completa: 639 PASS / 0 FAIL / 0 ORPHANS.
3.10.0 - 2026-05-19¶
Upgrade do cstk session start: nova flag --claude que, apos criar
a worktree isolada, entra no diretorio e dispara o Claude Code via
exec claude. Atalho para o fluxo mais comum (cstk session start X
&& cd ../<repo>-X && claude) em um unico comando.
Added¶
cstk session start <name> --claude: apos setup da sessao (worktree + branch +.claude/filtrado), fazcdpara o path da sessao e substitui o processo cstk porclaude(TTY herdado diretamente, sem shell intermediario). Combinavel com--reset,--reusee--force. Quandoclaudenao esta no PATH, retorna exit 1 com hint manual (cd <path> && claude) — a sessao ja foi criada antes do launch, entao a falha e parcial e reversivel.
Tests¶
- 3 novos scenarios em
tests/cstk/test_session.sh(60 total na suite session, 626 no toolkit completo): scenario_start_claude_flag_launches_claude_binary: stub declaudeconfirma que o CWD do exec e o path da sessao.scenario_start_claude_flag_missing_binary_exit_1: PATH isolado semclauderetorna exit 1; sessao foi criada antes da falha.scenario_start_claude_flag_in_help_text: help documenta a flag.
3.9.1 - 2026-05-19¶
Hotfix do release v3.9.0 — pipeline release.yml falhou em CI Ubuntu
por 2 testes ambient-specific. Sem mudanca de comportamento de feature.
Fixed¶
_session_prordem de validacao: spec FR-009 declara ordem(a) sessao, (b) commits, (c) gh. Implementacao inicial tinha gh check antes de commits check, fazendoscenario_pr_no_commits_exit_13retornar 12 (unauth) em vez de 13 (sem commits) em ambientes ondegh auth statusfalha (CI Ubuntu sem credenciais). Validacao local agora tem precedencia sobre dep externa, alinhado a spec.- Teste
scenario_pr_gh_not_installed_exit_11: PATH=/usr/bin:/bin incluia gh no CI Ubuntu (/usr/bin/gh). Refatorado para criar diretorioisolated-bincom symlinks apenas para essentials (git/sh/sed/etc), garantidamente sem gh — robusto entre macOS (brew em /opt/homebrew) e Ubuntu (apt em /usr/bin).
3.9.0 - 2026-05-19¶
Subcomando cstk session — sessoes paralelas isoladas via git worktree,
resolvendo colisao de working tree, branch HEAD e
.claude/agente-00c-state/ quando o usuario abre multiplas features
simultaneas no mesmo repositorio. 4 verbos (start/list/end/pr),
zero dependencias alem de git + gh (dep opcional confinada em
cli/lib/session.sh sob amendment 1.1.0 da Constitution).
Added¶
cstk session start <name> [--reset|--reuse] [--force]: cria worktree em<parent>/<repo>-<name>/com branch resolvida segundo 5 regras (nova / rastreando origin / reutilizar local / recriar com --reset / forcar com --reuse). Copia.claude/filtrado excluindo 8 artefatos runtime/per-env (agente-00c-state/, agente-00c-archive/, insights/, settings.local.json, agente-00c-whitelist, agente-00c-report.md, agente-00c-suggestions.md, .agente-00c-state.lock).--resetcom commits nao-mergeados emite prompt interativo (bypassavel com--force).cstk session list [--json]: tabela comNAME BRANCH IDLE STATUS PATH; marcadores combinaveisCURRENT,*,STALE. Modo JSON emite array camelCase (name/branch/path/idleDays/dirty/stale/current) sem rodape. Ordenacao por idle ASC. Rodape "tip: rode 'git worktree prune'..." se houver STALE.cstk session end <name> [--force]: remove worktree + branch local com guards. Prompt interativo se ha mudancas nao commitadas, commits nao pushados ou PR aberto no GitHub. Detecta self-end (rodando de dentro da worktree-alvo → exit 14).ghopcional — ausente/unauth pula PR check com warning e prossegue.cstk session pr <name> [--draft] [--title T] [--body B] [--reviewer USER]: push + abre PR viagh pr create. Idempotente: se PR ja existe (OPEN/MERGED), retorna URL existente sem criar duplicata. Detecta default branch viagit symbolic-ref refs/remotes/origin/HEAD(fallbackmain). Falha parcial (push OK + gh create falhou) emite stderr orientativo com comandos de recovery.- Boot-check
git >= 2.36: necessario para campoprunableemgit worktree list --porcelain. Versao inferior → exit 15 com mensagem de upgrade. - 15 exit codes especificos: 5 (nome invalido), 6 (sessao ja
existe), 7 (path ocupado), 8 (branch mergeada), 9 (sessao nao
encontrada), 10 (cancelado), 11 (gh ausente), 12 (gh unauth), 13
(sem commits), 14 (self-end), 15 (git antigo). Todos documentados
em
contracts/cli-session.mde exercitados por cenarios automatizados. - 57 cenarios de teste em
tests/cstk/test_session.shcobrindo os 4 subcomandos + helpers + dispatch + E2E + lint meta. 2 cenarios de PR marcados como MANUAL (exigem rede + repo remoto GitHub).
Changed¶
cli/cstkdispatcher: adicionadasessionem 3 lugares (linha 159 case help, linha 196 dispatch principal, linha 141 secao COMANDOS do help geral).README.md: nova secao "Sessoes paralelas" com exemplos e referencias para spec + contracts.CLAUDE.md: secao curta "Sessoes paralelas (cstk session)" apontando para a spec.
3.8.0 - 2026-05-19¶
Hardening do agente-00C contra dois bypasses encontrados em
exec-2026-05-18-iniciacao-membro-rolledback: (1) constitution raiz
ignorada com feature-delta silencioso (dec-004) e (2) tasks.md gerado
in-process sem invocar a skill create-tasks (dec-014). O fix endurece
pipeline.sh detect-completion, adiciona novo subcomando
constitution-conflict e introduz audit trail de invocacao de skills
via state-ondas.sh record-skill.
Added¶
pipeline.sh constitution-conflict: novo subcomando que detecta 4 estados entredocs/constitution.mdraiz e feature constitution (none-exists / pre-skill-alert / conflict / coordinated). Exit 2 obriga o orquestrador a emitir BloqueioHumano com 3 opcoes (atualizar global via bump SemVer / criar feature-delta com Sync Impact Report / abortar) antes de invocar a skillconstitution. Exit 1 sinaliza feature constitution silenciosa semPredecessor:no header.state-ondas.sh record-skill: subcomando que registra invocacao formal de skill via tool Skill em.ondas[-1].skills_invoked = [...]. Idempotente para mesma combinacao (skill + decisao_id). Permite quereview-task(e auditorias) identifiquem o anti-padrao "etapa marcada completa mas skill canonica nunca foi invocada"..ondas[N].skills_invoked: []: novo campo no schema dostate.json, inicializado emstate-ondas.sh start. Backward compatible — states pre-existentes nao quebram.- Regras 5.a/5.b/5.c/5.d/5.e no
agente-00c-orchestrator.md: invocacao via tool Skill OBRIGATORIA parabriefing,constitution,create-tasks. Constitution exige pre-flight comconstitution-conflictantes de chamar a skill. Cada etapa SDD chamarecord-skillapos a invocacao bem-sucedida. - 19 novos cenarios de teste: 13 em
test_pipeline.sh(validacao briefing/tasks + 4 cenarios constitution-conflict + 2 cenarios de detect-completion constitution) e 7 emtest_state-ondas.sh(record-skill: append, idempotencia, multi-skill, sem decisao_id, sem onda, validacao de flags, init com skills_invoked vazio).
Changed¶
pipeline.sh detect-completion --stage briefingagora valida estrutura minima do template (header# (Project )?Briefing+ >=4 secoes nucleares: Visao/Usuarios/Escopo/Prioridades/Restricoes/ Stack/Qualidade/Futuro). Antes aceitava qualquer arquivo presente. Razao: defesa contra briefings rasos gerados in-process.pipeline.sh detect-completion --stage create-tasksagora valida estrutura do template da skillcreate-tasks: cabecalho# Tarefasou# Tasks, presenca de## FASE N, legendas[C]/[A]/[M](NAO aceitaP0/P1/P2/P3),## Matriz de Dependencias,## Resumo Quantitativo,## Escopo Cobertoe## Escopo Excluido. Antes so checava existencia do arquivo.pipeline.sh detect-completion --stage constitutionquando raiz e feature constitution coexistem: agora exige header comPredecessor:ou referencia adocs/constitution.mdnas primeiras 30 linhas. Sem essa coordenacao explicita, retorna exit 1 com mensagem orientando o operador.
Fixed¶
- Bypass de skills SDD (dec-004 + dec-014 da execucao-fonte): o
orquestrador podia gerar
constitution.md(feature-delta) etasks.mddireto via Write/Edit, sem invocar a skill canonica e sem detect-completion sinalizar problema. O artefato resultante drifa do template oficial — no caso real,tasks.mdsaiu sem Matriz de Dependencias / Resumo / Escopo, e a feature constitution criou 8 principios proprios sem coordenacao com a global v1.0.0. Os 3 gates novos (constitution-conflict + validacao estrutural + skills_invoked tracking) fecham esse furo em camadas: pre-flight bloqueia, validacao rejeita artefato fora-do-padrao, audit trail expoe etapa marcada completa sem skill invocada.
3.7.0 - 2026-05-16¶
Enriquecimento significativo da skill owasp-security com atualizacoes
posteriores a Janeiro/2026, incorporando 9 novas listas/standards e 6
mencoes de cobertura complementar. Reestruturada em SKILL.md (entry
point operacional) + 5 arquivos de referencia profunda em
references/, mantendo carregamento de contexto enxuto sem perder
profundidade.
Added¶
- OWASP LLM Top 10:2025: nova secao irma a Agentic 2026 cobrindo riscos a nivel-modelo (LLM01 Prompt Injection, ..., LLM07 System Prompt Leakage, LLM08 Vector/Embedding Weaknesses, LLM10 Unbounded Consumption). Detalha indirect prompt injection (+32% Nov-2025 a Feb-2026 per Google), poisoning de RAG e inversao de embeddings.
- OWASP API Security Top 10:2023: secao completa com API1 BOLA, API3 BOPLA (mass assignment + excessive exposure), API6 Sensitive Business Flow Abuse, API7 SSRF (incluindo metadata-service guards) e API10 Unsafe Third-Party Consumption. Inclui patterns Python para cada risco.
- OWASP CI/CD Top 10: CICD-SEC-1..10 com deep dive em PPE (Direct, Indirect, Public), modern credential hygiene (OIDC federation, ESO, dynamic creds via Vault) e SLSA/Sigstore para integridade de artefato.
- NIST SP 800-63B-4 (Final 31-Jul-2025): substitui aluso vaga por regras concretas — passwords 15 chars no AAL2, SHALL NOT impor composition rules, SHALL NOT requerer rotacao periodica, SHALL checar contra breached-password lists, SHALL NOT usar KBA recovery. Nova Section 5.3 Session Monitoring com reauth 12h/30min e step-up auth.
- WebAuthn / Passkeys: nova subsecao substituindo "MFA generico". Cobre WebAuthn L3 Working Draft (Jan-2025), passkeys como AAL2 syncable authenticators, server-side requirements e armadilhas (origin check, sign-count monotonicity, cross-origin iframes).
- OAuth 2.1 + FAPI 2.0: cobertura de OAuth 2.1 (PKCE mandatory, implicit/password grants removidos), DPoP (RFC 9449) sender- constraining, PAR (RFC 9126), JAR (RFC 9101) e FAPI 2.0 Security Profile Final (19-Feb-2025) para APIs high-stakes.
- MCP Authorization Spec (Jun-2025): expansao do ASI04 cobrindo RFC 8707 Resource Indicators, DPoP em MCP, ataque "confused deputy" em proxy servers e sanitizacao de tool descriptions. Checklist especifico para review de servidores MCP.
- Post-Quantum Cryptography: nova secao cobrindo FIPS 203 ML-KEM, 204 ML-DSA, 205 SLH-DSA (publicadas 13-Ago-2024). Estrategia HNDL (Harvest-Now-Decrypt-Later), crypto agility, hybrid TLS (X25519+ML-KEM-768), timeline NIST IR 8547 e CNSA 2.0 (mandatory US-gov 2030-01-02).
- Secrets Management 2026: OIDC federation (GitHub Actions ↔ AWS STS), Workload Identity, External Secrets Operator, dynamic database credentials via Vault, SOPS/Sealed Secrets para GitOps, gitleaks/trufflehog em pre-commit + push protection.
- CWE Top 25:2025 (CISA/MITRE, Dez-2025): tabela com top 25 + mapeamento para OWASP Top 10:2025. Destaques: CWE-862 Missing Authorization subiu 5 posicoes, CWE-79 XSS retomou #1.
- Modern prompt injection patterns: indirect injection no wild (+32% trimestre), many-shot jailbreaking (exploits >128k context), tool-empowered jailbreaks (chains que individualmente parecem benignas). Cita pesquisa do Google e Anthropic.
- MAESTRO threat modeling: framework do Cloud Security Alliance (Fev-2025) estendendo STRIDE com camada AI-agent-specific. 7 layers de modelagem: foundation model, data, agent framework, tools, multi-agent orchestration, application logic, user/UI.
- OWASP Mobile Top 10:2024 + MASVS 2.1: cobertura M1-M10 com exemplos plataforma-especificos (Keychain iOS, EncryptedSharedPrefs Android, cert pinning OkHttp com backup pin).
- OWASP Kubernetes Top 10 + Docker Top 10: K01-K10 com Pod
Security Standards (
restricted), NetworkPolicy default deny, OPA/Kyverno admission policies, Falco runtime, distroless base images. - EU AI Act mapping: regulation 2024/1689 com risk tiers (unacceptable/high-risk/limited/minimal/GPAI), obrigacoes vigentes desde 2-Ago-2025, multas ate EUR35M ou 7% turnover. Overlap com OWASP LLM Top 10 e Agentic 2026.
Changed¶
SKILL.mdreorganizado: cabecalhodescriptionexpandido para incluir 12+ novos triggers (passkey, FAPI, post-quantum, MCP security, prompt injection). Adicionada secao "Deep references" no topo apontando parareferences/*.md. Checklists de Auth, Data Protection e Agentic AI reescritos para refletir 2026 best practices (passkeys-first, OIDC federation, MCP OAuth 2.1). Gotchas atualizados com 5 regras novas (NIST 800-63B-4 no-rotation, passkey-first, MCP OAuth 2.1+RFC 8707+DPoP, PQC inventory now, LLM+Agentic complementares).OWASP-2025-2026-Report.mdexpandido: TOC reorganizado em 11 secoes (era 5). ASVS V2.1.1 atualizado de "12 chars" para "12+ (NIST 800-63B-4 raises to 15 for AAL2)". 6 novas secoes inseridas: API Security Top 10:2023, CI/CD Top 10, LLM Top 10:2025, NIST SP 800-63B-4 highlights, Post-Quantum Cryptography, CWE Top 25:2025. Sources reorganizadas por categoria (OWASP / Auth / Crypto / AI / Regulatory / Standards). Data atualizada para Maio/2026.README.mdlinha de descricao da skill: expandida para listar todas as 12 listas/standards cobertas (era apenas 3).
Files¶
global/skills/owasp-security/SKILL.md— 680 linhas (+110 vs 3.6.0)global/skills/owasp-security/OWASP-2025-2026-Report.md— 1061 linhas (+269 vs 3.6.0)global/skills/owasp-security/references/llm-agentic.md— NOVO, 273 linhasglobal/skills/owasp-security/references/api-cicd.md— NOVO, 275 linhasglobal/skills/owasp-security/references/auth-modern.md— NOVO, 277 linhasglobal/skills/owasp-security/references/crypto-modern.md— NOVO, 198 linhasglobal/skills/owasp-security/references/extras.md— NOVO, 223 linhas
3.6.0 - 2026-05-15¶
Evolucao pos-execucao do agente-00c — 14 recomendacoes priorizadas
derivadas da primeira execucao real (60 ondas, 224 decisoes,
exec-2026-05-11T19-59-58Z). Backlog completo em
docs/specs/agente-00c-evolucao/tasks.md; analise-fonte em
docs/01-briefing-discovery/agente-00c-analise-licoes-aprendidas.md.
Added¶
- FASE 1 P0 — Validacao empirica obrigatoria para
score=3:state-decisions.sh register --score 3agora EXIGE--evidencia(>=20 chars com comando empirico + fragmento literal do output). Sem evidencia, exit 1 com violacao de Principio I. Razao: 3 decisoes historicasscore=3afirmaram premissa tecnica falsa sem rodar tsc/test/grep. Adiciona Etapa 0 "Validacao Empirica de Premissas" noexecute-task/SKILL.mde §Score-de-decisao no orchestrator. - FASE 1 P0 — Drift detector refatorado: matcher bidirecional
via tokens (
mcp-jiracasa comintegracao-bidirecional-mcp-jira), 3 camadas de aspectos (iniciais/tecnicos/operacionais), janela movel de 12 ondas (warn>=5 untouched, abort>=8) substitui o gatilho antigo de "5 consecutivas". Novos subcomandosdrift.sh mark-touched --aspecto Xedrift.sh debug [--onda ID]. Init aceita--tecnicos,--operacionaise--force. - FASE 1 P0 — Secrets-filter allow-list: novo arquivo
.secrets-filter-ignore(baseline com SAML_ISSUER, OIDC_ISSUER, COOKIE_DOMAIN, PUBLIC_, VITE_, etc); suporte a wildcard de sufixo; auto-descoberta de override por projeto-alvo (<env-dir>/.claude/agente-00c-state/secrets-filter-ignore); heuristica slug-com-separador para identificadores publicos curtos. Razao: identificadores publicos por design (sug-005, sug-049) eram redatados, removendo paths legiveis do report. - FASE 2 P1 — Pre-flight de bootstrap no briefing: nova secao
em
briefing/SKILL.mdinstruindo geracao descripts/bootstrap-deps.shpara stacks multi-workspace (npm workspaces, Go modules, Cargo). Amortiza N bloqueiosnpm installcirurgicos em batch unico antes de/agente-00c. Documentado tambem emagente-00c.md(checklist pre-execucao com heuristica de gap). - FASE 2 P1 — Sincronizacao bidirecional
tasks.md↔ codigo: protocolo de 3 pontos (pre-execucao, decisao→sub-FASE, hook pos-onda) emcreate-tasks/SKILL.md; Etapa 9.3 nova emexecute-task/SKILL.md; hook pos-detect-completion no orchestrator emitindo Decisao informativa quando diff vs checkbox diverge. Subsecao "Paridade de tipos compartilhados" (sug-028). - FASE 2 P1 — Mapeamento etapa → aspecto-chave automatizado:
novo subcomando
state-rw.sh infer-aspectos [--projeto-alvo-path PATH]que aplica matcher fuzzy bidirecional (mesma logica do drift.sh) contragit diff --name-only HEAD~1..HEADpara inferir aspectos tocados pela onda. Orchestrator chama no hook pos-detect-completion + persiste em.ondas[-1].aspectos_chave_tocados. Tabela de fallback etapa → aspecto-tipico documentada. - FASE 3 P2 — Convencoes de Borda no plan: nova ETAPA 5.4 em
plan/SKILL.mdexigindo tabelaCamada | Case style | Validacao | Fonte da verdadepara features com 2+ camadas. Roundtrip E2E obrigatorio noquickstart.md(chamada real, nao mock) para features com borda backend↔frontend. Novo pass G "Convencoes de Borda" emanalyze/SKILL.md. - FASE 3 P2 — Decisoes de Infraestrutura Auditaveis no specify:
checklist de 6 itens (scheduling, key rotation, refresh policy,
mutex multi-pod, backup/restore, idempotencia) virando FRs
FR-NN-INFRA-Xexplicitos.clarify/SKILL.mdganhou categoria INFRA + reordenou prioridade (INFRA acima de UX). - FASE 3 P2 — Init de aspectos no briefing: orchestrator §"Init
de aspectos-chave (primeira onda apenas)" chama
drift.sh initcom 3 camadas apos briefing concluido./agente-00c-resumeaceita--init-aspectos,--init-aspectos-tecnicos,--init-aspectos-operacionaispara execucoes legadas (relaxa idempotencia via--force). - FASE 4 P3 — Marco-aware retro a cada 25 ondas: hook no passo
10 do orchestrator emite bloqueio leve perguntando ao operador se
deseja retro proativa em multiplos de 25 ondas. Atualiza
.proximo_marco_retrospectivano estado. - FASE 4 P3 — Schedule intent literal vs sentinel: tabela do
passo 11 do orchestrator ganhou coluna "Slash command pai".
Pipelines de
/agente-00c-resumeusampromptliteral (/agente-00c-resume --projeto-alvo-path <PAP>), nao sentinel<<autonomous-loop-dynamic>>(que so funciona quando/loope o pai). - FASE 4 P3 — Perfil
--runbookno validate-documentation: validacao de frontmatter (title: RB-\d{3}:, severidade, tempo-estimado, pre-requisitos), 6 secoes obrigatorias (incluindo Rollback quando severidade=critica), check de placeholders residuais (TODO/XXX/FIXME) e cross-refs validos. - FASE 4 P3 — Dry-run de Agent tool em clarify (orchestrator
§5.a): antes do spawn de clarify-asker, verifica disponibilidade
da tool Agent; se ausente, registra Decisao EXPLICITA de downgrade
in-process (evita silent-fallback documentado em dec-006).
clarify/SKILL.mdganhou secao "Modos de invocacao" referenciando o orchestrator. - FASE 4 P3 — Sistema canonico de tracking: nova secao no topo
do orchestrator instruindo a IGNORAR system-reminders sobre
TaskCreate/TaskUpdate. Razao (sug-029): 8+ reminders em uma so onda historica;state.json+state-decisions.shsao o sistema canonico (auditavel via 5 campos + score). Investigacao sobre hook do harness emdocs/specs/agente-00c-evolucao/notas-harness-hook.md(conclusao: nao viavel hoje).
Changed¶
- BREAKING (interno) —
drift.sh checkmuda semantica: antes contava ondas CONSECUTIVAS sem aspecto (5 = abort); agora conta untouched em JANELA MOVEL das ultimas 12 ondas (5..7 = warn, >=8 = abort). Backbone tecnico intercalado (FASE 4.x) nao dispara mais abort. Stdout docheckagora e numero de untouched na janela, nao consecutivas. Tests atualizados (21 cenarios, 21/21 verdes). Overrides via env:DRIFT_WINDOW_SIZE,DRIFT_WARN_THRESHOLD,DRIFT_ABORT_THRESHOLD. - BREAKING (interno) — schema do state.json: adicionados
campos opcionais
.aspectos_chave_tecnicos,.aspectos_chave_operacionais,.proximo_marco_retrospectiva, e.decisoes[].evidencia. Backward-compatible para read; writers antigos que nao emitirem esses campos continuam funcionando. - BREAKING (interno) —
state-decisions.sh registerrejeitascore=3sem--evidencia: chamadas anteriores que emitiamscore=3sem evidencia agora falham com exit 1. Para preservar comportamento antigo, baixar parascore=2(que permanece valido sem evidencia).
Fixed¶
- Drift detector deixava de detectar aspectos quando o aspecto era
string longa contendo o token presente no texto (
integracao- bidirecional-mcp-jiravs texto "mcp-jira ok"). Matcher bidirecional via tokens resolve. SAML_ISSUER,COOKIE_DOMAIN,OIDC_ISSUER(publicos por design) eram redatados como secrets, removendo paths legiveis do report.
Testing¶
./tests/run.shfull suite: 548 PASS / 0 FAIL / 0 ERROR / 0 ORPHANS apos a evolucao (+15 cenarios novos cobrindo evidencia score=3, drift fuzzy/camadas/janela/mark-touched/debug, secrets-filter allow-list/slug, e infer-aspectos).
3.5.3 - 2026-05-12¶
Fixed¶
cstk updatenao sincronizavacommands/eagents/: a funcaoupdate_mainemcli/lib/update.shso iterava o manifest de skills. Commands e agents (infraestrutura global do toolkit, distribuida pelo install via_install_apply_extra_kinds) ficavam congelados em drift permanente apos a primeira instalacao. Sintoma reportado: orchestrator do agente-00C continuava emitindo "ScheduleWakeup nao disponivel neste harness" mesmo aposcstk update, porque o fix do commit 56b3959 (orchestrator retornaSchedule intentem vez de invocarScheduleWakeup) nunca alcancava o disco do usuario.
Fix: novo _update_apply_extra_kinds espelha o do install, com
semantica de update completa:
- Idempotencia: release == manifest -> zero writes (mtime preservado)
- Edit local: respeita --force (sobrescreve) e --keep (silencia);
sem flag, conta em skipped_edits e propaga exit 4
- Third-party (.md fora do manifest dedicado por kind): preservado
por default; --force sobrescreve — caminho de recuperacao para
instalacoes historicas em que o manifest dedicado por kind nunca
foi criado
- Manifest de skills vazio nao impede mais processar commands/agents
- Summary reporta linhas commands: ... e agents: ... com seis
counters (installed/updated/uptodate/kept/skipped/preserved)
Help text de cstk update --help atualizado para refletir o escopo.
Cobertura: 9 cenarios novos em tests/cstk/test_update-extra-kinds.sh
(idempotencia, atualizacao real, third-party com/sem --force,
edit local com --force/--keep/exit 4, dry-run zero writes,
compat com tarball historico sem commands/agents). 12 cenarios
existentes em test_update.sh continuam verdes.
- agente-00c-orchestrator emitia
Schedule intent: nonemesmo com statusem_andamento: a nota explicativa do prompt comecava com "POR QUE NAO HA ScheduleWakeup AQUI" e descrevia o problema em tom negativo ("qualquer ScheduleWakeup invocado aqui firmaria — se firmasse — para um contexto ja extinto"). O LLM, executando como sub-agent, parafraseava essa explicacao e raciocinava "schedule nao funciona aqui, motivo=ScheduleWakeup_indisponivel" — emitindoSchedule intent: none; motivo=ScheduleWakeup_indisponivelmesmo quando deveria emitirdelaySeconds=.... O slash command pai reproduzia a frase invalida ("Proxima onda agendada: nenhuma — ScheduleWakeup indisponivel; retomar via /agente-00c-resume"), efetivamente desabilitando schedule automatico.
Fix em global/agents/agente-00c-orchestrator.md:
- Nota de topo reescrita em tom positivo: "Schedule SEMPRE funciona.
Voce decide os parametros, o pai executa." Lista explicita de
antipadroes ("NUNCA emita Schedule intent: none com motivo
ScheduleWakeup indisponivel ou similar").
- Passo 11 reescrito: tabela de decisao expandida com coluna
"Bloqueios pendentes" e marca OBRIGATORIO para o caso
em_andamento + 0 bloqueios. Reforco final: "NUNCA emita
Schedule intent: none com motivo ScheduleWakeup_*".
3.5.2 - 2026-05-12¶
Fixed¶
cstk 00c: Ctrl+C nao abortava prompts limpo (#2):trap '_00c_release_lock' EXIT INT TERMrodava o cleanup mas nao chamavaexit. POSIX consume o sinal apos o trap;read -rno loop de validacao retornava empty e o while prosseguia pedindo input — operador ficava preso no prompt e Ctrl+\ (SIGQUIT) era o unico escape, orfanando o lock per-path.
Fix: split em duas traps. EXIT chama _00c_release_lock (cleanup);
INT/TERM chamam exit 130/exit 143, que disparam o EXIT trap
em sequencia. Operador sai com exit code POSIX correto e lock
liberado.
Regressao coberta via self-signal kill -INT $$ em
scenario_issue_2_sigint_propaga_exit_130 (SIGINT real em background
jobs nao eh testavel em POSIX sh por causa do SIG_IGN inherit).
- agente-00c: pipeline.sh detect-completion nao reconhecia paths do
/initialize-docs(#3):detect-completionso olhava em--feature-dir(docs/specs/<feature>/), mas as skillsbriefingeconstitutionsalvam em paths project-level da hierarquia numerada: briefing ->docs/01-briefing-discovery/briefing.md, constitution ->docs/constitution.md. Orchestrator nunca detectava conclusao dessas etapas; double-write workaround duplicava o artefato em dois locais (suggestionsug-001da smoke v3.5.0).
Fix: novo flag opcional --projeto-alvo-path PAP em
detect-completion. Para briefing/constitution, paths do
/initialize-docs sao aceitos como fallback alem do feature-dir.
Orchestrator (Loop principal item 6) passa o PAP em todas as
chamadas. Skills briefing/constitution permanecem inalteradas
— caminho canonical delas continua nos paths numerados (decisao
consciente: artefatos project-level separados de feature-level).
3.5.1 - 2026-05-12¶
Fixed¶
/agente-00cfalhava em install default por falta da skillagente-00c-runtime: a runtime (infra interna que provêstate-rw.sh,path-guard.sh,whitelist-validate.shetc. ao orchestrator) so constava no profileall—cstk installdefault (profilesdd) instalava comandos e agentes do 00C mas deixava a runtime de fora. Resultado:/agente-00cfalhava na primeira chamada Bash do orchestrator com referencia a script ausente.
Tres camadas de fix:
scripts/profiles.txt.in:agente-00c-runtimeagora pertence asddEcomplementary(alem doallja existente). Qualquer install default carrega a runtime junto.cli/lib/00c-bootstrap.sh::_00c_check_deps: pre-flight docstk 00cestende para command + runtime executavel + orchestrator. Antes so checava o.mddo command — instalacao parcial passava silenciosa e quebrava so dentro de uma onda.global/agents/agente-00c-orchestrator.md: nova secao "Pre-flight da execucao" antes do loop de onda, com Bash check programatico destate-rw.sh/state-lock.sh/path-guard.sh(+x). Substitui a interpretacao em natural-language que estava produzindo diagnosticos hallucinados.
Regression test em tests/cstk/test_build-release.sh garante que o
profile sdd inclui agente-00c-runtime permanentemente.
- Orchestrator (sub-agent) nao pode invocar
ScheduleWakeupde forma sobrevivente: o thread do sub-agent termina ao retornar o sumario para o slash command pai. Qualquer wakeup agendado pelo orchestrator firmaria — se firmasse — para contexto ja extinto. O resultado era o erro recorrenteProxima onda agendada: nenhuma (ScheduleWakeup indisponivel — operador retoma via agente-00c-resume).
Refactor para o padrao decide-aqui-executa-la:
global/agents/agente-00c-orchestrator.md:ScheduleWakeupremovido deallowed-tools. Step 11 reescrito — orchestrator agora DECIDEdelaySeconds+reasone grava o ISO planejado em.ondas[-1].proxima_onda_agendada_para. Step 13 (sumario) formaliza linhaSchedule intent: delaySeconds=N; reason="..."; prompt="..."(ouSchedule intent: none; motivo=<X>) que o pai parseia.global/commands/agente-00c.mdeglobal/commands/agente-00c-resume.md:ScheduleWakeupadicionado aoallowed-tools. Novo step "Schedule da proxima onda" parseia a linha do sumario do orchestrator e invocaScheduleWakeupno thread do pai. Em caso de falha, limpa.ondas[-1].proxima_onda_agendada_paraviastate-rw.sh set.
Comportamento externo: /agente-00c e /agente-00c-resume agora
realmente agendam a proxima onda quando o status e em_andamento sem
bloqueios. O sumario ao operador mostra ISO real do wakeup, nao
intencao do sub-agent.
3.5.0 - 2026-05-09¶
Added¶
-
Subcomando
cstk 00c <path>— bootstrap interativo do agente-00C (FASE 12 docstk-cli): atalho recomendado para iniciar uma sessao do agente-00C. Cria diretorio do projeto-alvo, valida path, coleta parametros via prompts (descricao, stack JSON, whitelist de URLs) e invocaclaudeja com/agente-00c '<args>'auto-submetido como primeiro turno. Elimina friccao demkdir/cd+ memorizar a sintaxe da slash command. -
Validacao defensiva (FR-016b): rejeita path traversal
.., rejeita 14 zonas de sistema (/,/etc,/usr,/var,/bin,/sbin,/boot,/proc,/sys,~/.ssh,~/.gnupg,~/.aws,~/.config/claude+ canonicas e resolvidas no macOS); resolve symlinks viarealpath -m(fallback POSIXcd -Ppara BSD).<path>exato em$HOMErejeitado, mas paths INSIDE$HOMEsao permitidos. - TTY-only (FR-016a): subcomando recusa execucao em pipe/CI;
[ -t 0 ] && [ -t 1 ]. Stderr pode ser redirecionado. - Dir nao-vazio = recusa direta sem prompt (FR-016b): finalidade
e atalho para projeto NOVO; mensagem aponta
/agente-00c-resumepara retomada. - Lock per-path (FR-016h, novo):
mkdir <path>/.cstk-00c.lock/atomico antes de qualquer prompt; release viatrap EXIT INT TERM- release explicito antes do
exec claude. Previne race entre duas instancias simultaneas no mesmo<path>.
- release explicito antes do
- Dep checks (FR-016d): claude CLI no PATH;
jqno PATH (teste funcional viajq --version);~/.claude/commands/agente-00c.mdinstalado — ausencia dispara prompt[Y/n]para auto-install viacstk installem foreground (respeita lockfile global de FR-015). Falha do nested install propaga exit code + razao. - Sanitizacao (FR-016g): descricao escapada para shell single-quotes
(
'->'\''); stack JSON compactada viajq -c; whitelist persistida em<path>/.agente-00c-whitelist.txt(chmod 600) e referenciada via path absoluto em--whitelist(evita argv overflow). - Validacao de URL na whitelist: espelha
agente-00c-runtime/scripts/whitelist-validate.shrejeitando patterns overly-broad (**puro,*://*,https://*sem dominio, host vazio, sem scheme http(s), wildcard fora do prefixo*.dominio.tld). - Dry-run preview obrigatorio (FR-016e): mostra path final,
descricao, stack, whitelist count + path, e linha exata da
/agente-00cque sera invocada. Confirmacao final[Y/n](default Y); flag--yespula apenas o prompt final + auto-install. - Spawn auto-submit (FR-016f):
exec claude "$slash_command"passa a slash command como argv[1]; claude processa como primeiro turno automatico (sem exigir Enter adicional do operador).
Implementacao em cli/lib/00c-bootstrap.sh (~480 linhas POSIX puro)
com 16 helpers privados _00c_* + entry point publico
bootstrap_00c_main. Special-case no dispatcher porque POSIX
nao permite funcao com nome iniciando em digito (00c_main invalido).
Cobertura de testes: 18 cenarios em tests/cstk/test_00c-bootstrap.sh
com mocks de claude (registra argv) e cstk install (controlavel).
Cenarios cobrem path validation, TTY, deps ausentes, prompts (descricao
9/501 chars, com $, com unicode, JSON malformado, URL overly-broad),
lock pre-existente, dry-run + cancel, happy path com argv correto,
apostrofo escapado, JSON com aspas duplas internas. Suite total:
505 PASS / 0 FAIL.
Changed¶
-
Carve-out 1.1.0 atualizada:
jqagora obrigatorio emcli/lib/00c-bootstrap.sh(era opcional em outros comandos do cstk). Justificativa: validacao de stack JSON (FR-016c) + dep transitiva doagente-00c-runtimeque ocstk 00cinvoca via/agente-00c— falha cedo em FR-016d e melhor UX que erro tardio dentro da sessao doclaude. -
cstkdispatcher ecstk --helpatualizados com nova entrada00c <path>listando o subcomando entre os comandos validos. -
README.md secao Agente-00C documenta
cstk 00c <path>como o caminho preferido para iniciar sessoes do agente-00C, com nota apontando/agente-00c-resumepara retomada de execucoes existentes.
3.4.0 - 2026-05-09¶
Changed¶
/agente-00cfaz warm-up de permissoes em batch ANTES de spawnar o orquestrador (post-FASE 9 feedback): nova passo 0 invoca todas as 10 skills da pipeline + 3 agentes custom + ScheduleWakeup + Bash helpers + Read/Write em sequencia. Cada invocacao dispara o prompt nativo de permissao do Claude Code uma vez, com o operador presente. Apos confirmacao, o orquestrador roda autonomamente sem interrupcoes (resolve o problema de fluxo travado quando permissoes "lazy" pediam aprovacao em ondas posteriores onde o operador nao estava disponivel)./agente-00c-resumee/agente-00c-abortNAO refazem warm-up (resume = continuacao, abort = operacao curta com operador presente). Orquestrador ganhou secao "Warm-up de permissoes (pre-condicao)" documentando o contrato e instruindo deteccao de permissao pendente no meio de uma onda como BloqueioHumano.
Added¶
-
Validacao end-to-end (parcial) e licoes da implementacao do agente-00C (FASE 9):
-
scripts/quickstart-shell-sim.sh: simula via Bash os 10 cenarios do quickstart compondo as primitivas dos 14 scripts doagente-00c-runtime. NAO invoca o agente Claude — exercita apenas composicao shell-level. Resultado: 10/10 PASS em ~5s. Detecta regressao quando um script deixa de compor com outros (gate complementar atests/run.shque testa cada script isoladamente). -
docs/specs/_archived/agente-00c/validation-runs/(novo diretorio): registro de execucoes do agente-00C. README com template + tipos (shell-simulation vs end-to-end-real). Primeiro registro:2026-05-06-end-to-end-shell-simulation.md(10/10 PASS, SCs validaveis em shell-level: SC-001, SC-002, SC-007, SC-008). -
docs/specs/_archived/agente-00c/lessons-from-implementation.md: 5 licoes concretas da implementacao das 8 fases — bug jq em pipe (drift.sh), dupla resolucao de symlinks no macOS (path-guard.sh), "skills internas" como padrao (agente-00c-runtime), cobertura forçada como ROI alto (3 bugs descobertos), estratificacao 3-camadas (commands/agents/scripts). Cada licao com proposta concreta de FR para skill especifica + avaliacao contra constitution do toolkit (nenhuma requer amendment).
Subtarefas da FASE 9 atendidas autonomamente: 9.1.1-9.1.11 (10 cenarios shell-simulated + relatorio), 9.2.1-9.2.3 (bump MINOR determinado, CHANGELOG/README atualizados), 9.4.1-9.4.3 (licoes da implementacao + propostas FR + avaliacao constitution).
Subtarefas pendentes (exigem operador): 9.2.4 (cstk doctor pos-release
v3.4.0), 9.3.* (primeira execucao real do agente em projeto-alvo —
exige 1-3h wallclock + curadoria de relatorio), 9.4.4 (abertura real
de issues no toolkit — exige autorizacao + execucao com gh), 9.4.5
(atualizar threat-model com threats observados em runtime real).
-
Relatorio e integracao com toolkit do agente-00C (FASE 8): 28 subtarefas implementadas em 3 novos scripts cobrindo geracao de relatorio com 6 secoes auditaveis, registro de Sugestoes para skills globais e abertura automatica de Issue no toolkit GitHub.
-
report.sh(FR-011 + SC-001 + FR-012): subcomandosgenerateevalidate.generaterenderiza 6 secoes obrigatorias (Resumo Executivo com tabela de 15 campos + paragrafo, Linha do Tempo com tabela de ondas, Decisoes agrupadas por agente + lista detalhada, Bloqueios Humanos divididos em pendentes/respondidos/ sem, Sugestoes em 3 niveis de severidade, Licoes Aprendidas cravado como placeholder em parcial e preenchivel via--licoes-aprendidas+--final) + Apendice A com 5 paths.validatecheca as 6 secoes viagrep -qFe reporta faltantes. Caller deve aplicarsecrets-filter.sh scrubem pipe (FR-030). -
suggestions.sh(FR-020): subcomandosregister,list,count,next-id,mark-issue,render-md. Sugestoes vivem em DOIS lugares —state.json .sugestoes[](ground truth JSON)- agente-00c-suggestions.md (export human-readable regerado a
cada register/mark-issue). 3 severidades validadas:
informativa, aviso, impeditiva. Diagnostico exige >=50 chars
para forçar detalhamento acionavel.
mark-issueatualiza.issue_aberta+ incrementametricas_acumuladas.issues_toolkit_abertas.
- agente-00c-suggestions.md (export human-readable regerado a
cada register/mark-issue). 3 severidades validadas:
informativa, aviso, impeditiva. Diagnostico exige >=50 chars
para forçar detalhamento acionavel.
-
issue.sh(FR-021): subcomandoscreate,check-duplicate,hash. Excecao escopada ao Principio V — apenasgh issue create --repo JotJunior/cstk. Hash de 8 chars do diagnostico normalizado (lowercase + collapse whitespace + sha256- cut) para dedup via
gh issue list --search. Template docontracts/issue-template.mdaplicado via heredoc (Skill afetada, Diagnostico, Reproducao com decisoes recentes, Por que e impeditivo, Proposta de correcao, Anexos). Defense in depth:secrets-filter.sh scrubaplicado 2x (no build do body + antes dogh create). Labelsagente-00c,bug,skill-globalcriadas automaticamente se ausentes (gh label create --force). Falha degh create(sem internet, rate limit) propaga exit 1; corpo truncado em ~4000 chars com pointer ao relatorio local.--dry-runimprime template completo sem chamargh.
- cut) para dedup via
Agente orquestrador atualizado (passo 12 do Loop principal) com
template operacional completo: pipe de report.sh generate |
secrets-filter.sh scrub > <report.md> + report.sh validate,
fluxo de Sugestao (impeditiva => issue.sh create), retentativa
+ bloqueio humano em falha persistente.
27 cenarios de teste novos em
tests/test_{report,suggestions,issue}.sh. test_issue.sh cobre
apenas dry-run + hash (chamadas reais a gh evitadas para nao
gerar issues em produçao — validacao end-to-end na FASE 9.1.6).
-
Continuacao cross-sessao do agente-00C (FASE 7): 20 subtarefas cobrindo
ScheduleWakeuppara ondas curtas,/agente-00c-resume, fallback/scheduleRoutines para pausas longas, e/agente-00c-abort. Sem novos scripts — todas as primitivas necessarias ja existem nas FASES 2-6 (state-rw, state-validate, state-lock, bloqueios, sanitize, secrets-filter, state-ondas). -
global/agents/agente-00c-orchestrator.md— passo 11 expandido:ScheduleWakeupinvocado APENAS para ondas nao-terminais sem bloqueios pendentes; tabela de calibracao dedelaySecondsrespeitando cache Anthropic (5min TTL): 60-270s para continuacao normal, 1200-1800s apos threshold proxy. Sentinela<<autonomous-loop-dynamic>>documentada. Reason no formatoagente-00c onda <NNN+1> apos <motivo>. Passo 13 cravou formato do sumario retornado ao operador. -
global/agents/agente-00c-orchestrator.md— nova secao "Pausas longas e fallback/scheduleRoutines": template completo de routine/schedule criar "..." cron="..." prompt="/agente-00c-resume --projeto-alvo-path <PAP>"; orientacao para incluir no relatorio parcial quandoaguardando_humano+ sinais de inatividade; explicito "NAO criar routine automaticamente" (operador escolhe cron especifico). -
global/commands/agente-00c-resume.md— substituido o esqueleto da FASE 1 por fluxo operacional de 8 passos: parse de args, lock acquire, validate + sha256-verify, branch por status (terminal / em_andamento / aguardando_humano), apply de--resposta-bloqueiocom sanitizacao viasanitize.sh limit-length --max 2000, spawn do orquestrador com prompt indicando "CONTINUACAO de execucao existente" +retomada_motivo, lock release + sumario. -
global/commands/agente-00c-abort.md— substituido o esqueleto por fluxo operacional de 8 passos: parse, validacao com fail-soft para schema invalido (abort PROCEDE — pode ser o motivo do abort), idempotencia explicita (status terminal = no-op), atualizacao viastate-rw.sh set(backup automatico), stub minimal de relatorio comsecrets-filter.sh scrubaplicado, commit local viastate-ondas.sh git-commit(fail-soft se nao e repo git, NUNCA push), sumario com hash do commit. -
README.md— limitacao "Schedule mínimo de 5 min via /loop" atualizada para refletir clamp [60, 3600s] doScheduleWakeup+ fallback/scheduleRoutines. -
Seguranca do agente-00C (FASE 6 — todas as 9 sub-features sao [C]): 56 subtarefas implementadas em 5 scripts focados no
agente-00c-runtime, cobrindo 8 FRs criticos (FR-017, FR-018, FR-024, FR-025, FR-026, FR-027, FR-028, FR-029, FR-030, FR-031) e 5 threats (T1, T2, T3, T4, T5). -
path-guard.sh(FR-024 + FR-017): subcomandosvalidate-target,check-write,resolve. Resolve symlinks viarealpath/readlink -fcom fallback portavel para paths inexistentes. Lista de zonas proibidas cobre 20+ paths incluindo formas canonica (/etc) e resolvida no macOS (/private/etc); explicitamente NAO bloqueia/var/folders(mktemp). Resolve TAMBEM cada zona antes de comparar (defesa T2 contra symlinks adversariais que apontam para zona proibida via~). -
bash-guard.sh(FR-018 + FR-028 + SC-008): subcomandoscheck-blocklist,check-whitelist,check. Blocklist: sudo, package managers (npm/pnpm/yarn/pip/gem/brew/go install/cargo install) sem prefixodocker exec/run,git push(qualquer remote), kubectl mutativo, terraform apply/destroy, aws cli mutativo, gcloud deploy, docker push, docker-compose push, helm install/upgrade/uninstall. Whitelist: detecta network calls (curl/wget/gh api,issue,pr,repo,browse/git fetch,pull,clone), extrai URL (incluindo via--repo OWNER/NAMEpara gh) e checa contra whitelist; converte glob simples (**->.*,*->[^/]*) em regex. Excecao escopada:gh issue create --repo JotJunior/cstkbypass (FR-021). -
secrets-filter.sh(FR-030): subcomandosscrub,check. Filtros em ordem (especificos primeiro para preservar tipo): AWS keys (AKIA[A-Z0-9]{16,}), Bearer tokens, basic auth em URLs, tokens com palavra-chave proxima (token/key/secret/password/pwd/auth/ api_key/access_key precedendo valor 20+ chars), valores de chaves do.env(carregado via--env-file, valores < 8 chars ignorados).[REDACTED],[REDACTED-AWS-KEY]e[REDACTED-ENV]distinguem tipo. Hashes git e UUIDs sem palavra-chave proxima NAO sao filtrados (anti-falso-positivo). -
sanitize.sh(FR-025): subcomandoslimit-length,check-length,escape-commit-msg,escape-issue-body,escape-path. Defaults cobremdescricao_curta(max 500 chars).escape-commit-msgremove newlines/tabs/dollars/backticks/quotes + limita 100 chars.escape-issue-bodypreserva newlines (markdown), remove$(...)e backticks.escape-pathremove path traversal..+ chars nao-[A-Za-z0-9._-]+ limita 64 chars. -
whitelist-validate.sh(FR-031): subcomandoscheck,list. Rejeita patterns "overly broad":**puro sem dominio,*://*(scheme com glob),https://*sem dominio, host vazio, sem scheme, wildcard fora do padrao prefixo*.dominio.tld. Diagnostico inclui numero da linha + motivo + conteudo.
Agente orquestrador (global/agents/agente-00c-orchestrator.md)
atualizado com tabela de primitivas estendida (5 novos scripts) +
secao "Defesa em profundidade" reescrita listando os 7 mecanismos
(bash-guard, path-guard, sanitize, secrets-filter, whitelist-validate,
sha256-verify, goal alignment) com instrucoes operacionais explicitas
para o LLM (quando invocar, qual subcomando, semantica de exit code).
62 cenarios de teste novos em
tests/test_{path-guard,bash-guard,secrets-filter,sanitize,whitelist-validate}.sh.
Inclui casos adversariais: symlink que aponta para ~/.ssh, comando
Bash com sudo/git push/docker push/kubectl apply, payload com
AWS key/Bearer/basic auth/.env values, whitelist com **/*://*/etc.
-
Autonomia controlada do agente-00C (FASE 5): 5 novos scripts em
global/skills/agente-00c-runtime/scripts/cobrem os 5 mecanismos de aborto graceful que mantem o orquestrador dentro do orcamento e do escopo declarado (Principio IV — Autonomia Limitada com Aborto). -
budget.sh: proxies de orcamento de sessao (FR-009, sem signal nativo de tokens). 3 dimensoes: tool_calls da onda (default 80), wallclock (default 5400s = 90min) e tamanho de state.json (default 1MB).checkexit 1 quando QUALQUER threshold dispara, com TSVTIPO\tCURRENT\tTHRESHOLDem stdout. Wallclock usa fallback portavel BSD/GNU paradate -dvsdate -j -f. State size viastat -f %z(BSD) /stat -c %s(GNU) /wc -c(fallback). -
cycles.sh: limite de ciclos por etapa (FR-014.a —loop_em_etapa).tickincrementa contador;--progress-madezera (orquestrador decide quando 1 dos 4 indicadores de FR-014 aconteceu).resetexplicito ao avancar de etapa (separacao de responsabilidades — nao infere mudanca via.etapa_corrente). Exit 3 em > 5 ciclos. -
circular.sh: deteccao de movimento circular (FR-014.b).pusharmazena{problema_hash, solucao_hash, timestamp}em buffer FIFO de capacidade 6. Normalizacao: lowercase + nao-alfanumerico->space + 20 primeiras palavras.detectexit 3 quando mesmo problema_hash aparece >=3 vezes (cobre o padrao "P=A,S=X / P=B,S=Y / P=A,S=Z / P=B,S=Y / P=A,S=X" do exemplo da spec). -
drift.sh: drift detection / goal alignment (FR-027, threat T1).initgrava 3..7 aspectos-chave (cravado pos-primeira-onda — recusa sobrescrever).checkitera ondas do final para o inicio, conta consecutivas sem decisao mencionando aspecto (case-insensitive substring nos campos contexto/escolha/justificativa de cada decisao). Warn em 3 ondas (stderr, exit 0); abort em 5 (exit 3, motivodesvio_de_finalidade). -
retro.sh: limite de retro-execucoes (FR-006).checkvalidaconsumed < max(default 2).consumeexit 3 SEM mutar estado se incremento excederia max (defesa em profundidade — testado com snapshot before/after). Orquestrador converte 3a tentativa em BloqueioHumano viabloqueios.sh register.
37 cenarios de teste em tests/test_{budget,cycles,circular,drift,retro}.sh.
Agente orquestrador (global/agents/agente-00c-orchestrator.md)
atualizado: tabela de primitivas inclui os 5 novos scripts; passos 7
e 8 do Loop principal de uma onda referenciam cada gatilho de aborto
com semantica explicita (motivo, exit code, acao do orquestrador).
-
Padrao clarify de dois atores (agente-00C FASE 4): implementacao do mecanismo de "Pause-or-Decide" (Principio II da feature), com mediacao orquestrada entre clarify-asker (gera 1-5 perguntas via skill clarify) e clarify-answerer (decide via heuristica de score 0..3).
-
global/agents/agente-00c-clarify-asker.md: prompt operacional completo. Inputs (spec_path,briefing_path,etapa_corrente,decisoes_anteriores,quantidade_max_perguntas); fluxo (Read + Skill clarify + filtro de redundantes); formato JSON cravado comQ1..QN+default_sugeridoopcional; saida vazia{ "perguntas": [] }quando nao ha clarificacao pendente. Tools restritas a Skill+Read (sem Agent — bisneto nao recursiona). -
global/agents/agente-00c-clarify-answerer.md: heuristica de score documentada (3 fontes: briefing, constitutions toolkit+feature, stack-sugerida). Tabela de decisao (>=2 decide, ==1 decide so se outras violarem constitution, ==0 pause-humano). Tie-breaker em 4 niveis. Formato JSON compause_humano: boolecontexto_para_humanoquando aplicavel. Tools restritas a Read+Bash (Bash apenas paradate). -
global/agents/agente-00c-orchestrator.md: passo 5 do Loop principal expandido com fluxo de mediacao em 7 sub-passos (a-g): pre-flight via spawn-tracker, spawn asker, spawn answerer (irmaos), aplicar respostas validas como Decisao via state-decisions.sh, converter score 0 em BloqueioHumano via bloqueios.sh, fim de onda gracioso quando ha pendentes. -
Novo script
global/skills/agente-00c-runtime/scripts/bloqueios.sh: ciclo de vida de BloqueioHumano (FR-015, FR-016). 6 subcomandos:register(gerablock-NNNsequencial; valida FK para Decisao existente; validapergunta >= 20 chars; atualiza.execucao.status = "aguardando_humano"e.metricas_acumuladas.bloqueios_humanos_total);respond(marcarespondido+ gravaresposta_humana+respondido_em; volta.execucao.status = "em_andamento"SO quando todos os bloqueios pendentes foram respondidos);list(TSV com filtro opcional por status);count(com--pending-only);next-id;get(JSON do bloqueio).
14 cenarios de teste em tests/test_bloqueios.sh cobrem o lifecycle
completo (register -> respond), FK violation, validacao de pergunta
curta, status transitions com bloqueios multiplos, idempotencia.
-
Orquestrador raiz do agente-00C (FASE 3): 4 novos scripts em
global/skills/agente-00c-runtime/scripts/cobrem state machine, decisoes auditaveis, tracking de subagentes e ciclo de vida de ondas. -
pipeline.sh: 5 subcomandos.stagesimprime as 10 etapas canonicas (briefing → constitution → specify → clarify → plan → checklist → create-tasks → execute-task → review-task → review-features).next-stage/prev-stagepara avanco linear ou retro-execucao.detect-completionmapeia 7 etapas para artefatos esperados emdocs/specs/<feature>/.skill-conflictdetecta skill em local (<projeto>/.claude/skills/) + global (~/.claude/skills/) com 4 status (conflict/only-local/only-global/ not-found); regra: local vence. state-decisions.sh: registro auditavel (Principio I — Auditabilidade Total).registervalida 5 campos obrigatorios (contexto>=20, opcoes_consideradas>=1, escolha, justificativa>=20, agente); falha = exit 1 comviolacao Principio I. Idsdec-NNNsequenciais; linka aonda_idcorrente;--score0..3 para decisoes do clarify-answerer (FR-015). Atualizametricas_acumuladas.decisoes_total. Subcomandoscount,list,next-idpara introspeccao.spawn-tracker.sh: enforce FR-013 (max 3 niveis).entervalida(current+1) <= 3ANTES de qualquer escrita; falha = exit 3 SEM modificar estado. Atualizaprofundidade_max_atingidaesubagentes_spawned.leavedecrementa (idempotente em min 1).checkexposto para validacao read-only. Defesa em profundidade: agentesagente-00c-clarify-askereclarify-answererNAO declaram tool Agent.state-ondas.sh: ciclo de vida de Ondas.startcria novaonda-NNN- reseta tool_calls/inicio_onda_corrente.
endvalida 1 dos 5 motivos validos (etapa_concluida_avancando, threshold_proxy_atingido, bloqueio_humano, aborto, concluido), calcula wallclock (fallback portavel GNUdate -d-> BSDdate -j -f) e atualiza metricas_acumuladas.tool-call-tickpara incrementar contador (backup so a cada 10 ticks p/ nao explodir state-history/).git-commit --motivo MOTIVOfaz commit local no projeto-alvo (chore(agente-00c): <onda-id> - <motivo>); NUNCAgit push(Principio V — Blast Radius Confinado).
- reseta tool_calls/inicio_onda_corrente.
46 cenarios de teste em tests/test_{pipeline,state-decisions,spawn-tracker,state-ondas}.sh.
Agente orquestrador (global/agents/agente-00c-orchestrator.md)
atualizado com instrucoes operacionais detalhadas (13 passos do loop
principal de uma onda) referenciando estas primitivas.
-
Skill interna
agente-00c-runtime(agente-00C FASE 2): biblioteca POSIX consumida pelos agentes custom do agente-00C. NAO e user-invocavel — empacota helpers de estado, validacao e lock para a pipeline. Distribuida viacstk install(catalog/skills/) e instalada em~/.claude/skills/agente-00c-runtime/. Conteudo: -
scripts/state-rw.sh: subcomandosinit,read,write,get,set,sha256-update,sha256-verify,path-check. Implementa schema state.json v1.0.0, backups automaticos por onda emstate-history/, integridade SHA-256 (FR-029), atomic write via mktemp+mv, write-probe para detectar permissao negada, captura de I/O errors (disco cheio). scripts/state-validate.sh: validador FR-008 read-only com 10 checagens (schema_version, 14 campos obrigatorios, 4 invariantes numericas, status x terminada_em, 5 campos de Decisao, integridade de FK BloqueioHumano -> Decisao, whitelist nao-vazia). Sem auto-correcao (Principio III).scripts/state-lock.sh: subcomandosacquire,release,check,check-execution-busy. Lock viamkdiratomico em<state-dir>/.lock/; locks independentes por projeto-alvo (permite execucoes simultaneas em projetos distintos). TOCTOU residual (CHK072) documentado.
Dependencia: jq (carve-out 1.1.0 da constitution para JSON
estruturado). 36 cenarios de teste em tests/test_state-{rw,validate,lock}.sh.
cstk installdistribuicommands/eagents/(agente-00C FASE 1.2): o tarball de release agora incluicatalog/commands/ecatalog/agents/(espelhos deglobal/commands/eglobal/agents/), e ocstk installcopia esses.mdsoltos para~/.claude/commands/e~/.claude/agents/(respectivamente./.claude/commands/e./.claude/agents/em--scope project). Cada kind tem seu proprio manifest dedicado (<dest>/.cstk-manifest) com schema identico ao de skills.
Comportamento: instalacao sempre processa TODOS os .md (sem filtro de
profile — sao infraestrutura, nao skills); re-install vira "updated";
arquivo pre-existente sem entry no manifest e PRESERVADO como third-party
(FR-007). Tarballs historicos sem catalog/commands/ ou
catalog/agents/ continuam validos — ambos os campos sao opcionais.
-
cstk doctorvarre os 3 kinds (skills, commands, agents): drift em commands/agents (EDITED, MISSING, ORPHAN) e reportado com prefixo de kind (ex:[EDITED] commands/agente-00c); skills continuam exibidas sem prefixo (compatibilidade backward).--fixremove entries MISSING do manifest correto por kind. -
Esqueleto do agente-00C em
global/commands/(3 slash commands:/agente-00c,/agente-00c-abort,/agente-00c-resume) eglobal/agents/(3 agentes custom: orchestrator, clarify-asker, clarify-answerer). Esqueleto apenas — implementacao operacional ocorre ao longo das Fases 2-9 do backlog emdocs/specs/_archived/agente-00c/tasks.md.
Changed¶
manifest_default_pathaceita argumento opcionalkind(defaultskills— backward compatible). Uso:manifest_default_path global commands.hash.shexportahash_file <arquivo>(wrapper sobresha256_file) para cobrir artefatos single-file (commands/agents).hash_dirinalterado.
3.3.0 - 2026-05-05¶
Added¶
- Skill
review-features: relatorio comparativo de TODAS as features do projeto (cross-feature), complementar areview-task(que olha UMA feature). Saida: tabela com nome, descricao, % concluida, criticidade pendente e sugestao de acao por feature (ARQUIVAR/ABANDONAR/PRIORIZAR/CONTINUAR/INDEFINIDO).
Heuristica deterministica:
- ARQUIVAR: feature 100% concluida
- ABANDONAR: 0% concluida e sem modificacao ha mais de 90 dias
- PRIORIZAR: tem subtasks [C] pendentes e menos de 50% concluida
- CONTINUAR: caso geral em andamento
- INDEFINIDO: tasks.md vazio
Acompanha script POSIX scripts/aggregate.sh (saida markdown ou
JSON-lines via --json) com 16 cenarios de teste em
tests/test_aggregate.sh. A skill e read-only — sugestao e recomendacao,
nunca executa arquivar/deletar sem confirmacao do usuario.
3.2.3 - 2026-04-27¶
Changed¶
cstk install --helpagora lista os profiles disponiveis (sdd,complementary,all) com o conteudo de cada um e marcasddcomo default. Antes, o usuario via apenas "Default: sdd" e nao tinha como descobrir que existiam outros profiles nem o que cada um continha — a unica fonte erascripts/profiles.txt.inno repo, fora do alcance de quem instalou via tarball.
Reportado por usuario: apos cstk install (default sdd), faltavam
skills complementares (advisor, bugfix, owasp-security, etc.) e nao
havia pista no help de como instala-las. Solucao: profile
complementary instala as 9 skills de uso pontual; profile all
instala tudo. Exemplos no help cobrem os 3 profiles + cherry-pick.
Test atualizado: scenario_install_help_exit_zero verifica que os
tres nomes de profile aparecem na saida.
3.2.2 - 2026-04-27¶
Fixed¶
cstk installecstk updatesem--fromagora consultam a API GitHub para descobrir a ultima release, em vez de abortar com "vem na FASE 3.2 (bootstrap)" — mensagem misleading que sobreviveu a entrega da FASE 3.2 (que entregou apenas o bootstrap standalone, nao a resolucao no comandocstk install).
Comportamento novo:
- --from URL (explicit) → usa a URL fornecida
- $CSTK_RELEASE_URL (env) → usa a URL do env
- (novo) sem nada acima → GitHub API /releases/latest
Honra $CSTK_REPO para forks (default JotJunior/cstk).
Mesmo padrao ja em uso por cstk self-update desde FASE 5.
Reportado por usuario: cstk install apos bootstrap retornava
"[error] install: --from URL ausente e \$CSTK_RELEASE_URL nao setado"
— quebrava o fluxo "instalar via one-liner depois cstk install"
documentado no README.
Test atualizado: scenario_install_sem_from_e_sem_env_consulta_api
usa CSTK_REPO=invalid/nonexistent para forcar 404 da API e validar
que o erro reportado e "falha ao consultar" (em vez de mensagem
antiga sobre CSTK_RELEASE_URL nao setado).
3.2.1 - 2026-04-27¶
Fixed¶
- Bootstrap one-liner (
cli/install.sh) ecstk self-updatebaixavam URL com 404. A construcao da URL do tarball usava o tag completo (cstk-v3.2.0.tar.gz), masscripts/build-release.shstrip o prefixovao gerar o asset (cstk-3.2.0.tar.gz). Match falhava com 404.
Fix: ambos cli/install.sh e cli/lib/self-update.sh agora computam
TAG_BARE=${TAG#v} e usam essa variante ao construir o filename do
asset, mantendo o tag original (com v) no path do release. Comporta-
mento alinhado com build-release.sh.
Impacto: releases/latest/download/install.sh em v3.2.0 esta
quebrado — usuarios precisam usar v3.2.1 (que fixa o asset URL ao
baixar). v3.2.0 nao foi removida; tag continua presente para
rastreabilidade do incidente.
Descoberto por usuario reportando curl: (22) ... 404 ao executar o
one-liner publicado no README.
3.2.0 - 2026-04-26¶
Added¶
cstkCLI (POSIX shell) — toolkit de instalação, atualização e auditoria de skills. Substitui ocp -rmanual documentado emCLAUDE.mdpor um fluxo rastreável: manifest por escopo (versão +source_sha256+ ISO timestamp), lock concorrente viamkdir, verificação SHA-256 obrigatória em todo download (FR-010a), preservação de skills de terceiros (FR-007), políticas explícitas de conflito em update (--force/--keep, exit 4 quando edit local detectado sem flag — FR-008).
Comandos: install, update, self-update, list, doctor.
Profiles: sdd (default — pipeline SDD com 10 skills),
complementary (9 skills independentes), all (todos os 35 skills),
language-go, language-dotnet. Cherry-pick por nome também
suportado; modo interativo via --interactive (seletor numerado em
TTY).
Escopos: --scope global (~/.claude/skills/, default) e
--scope project (./.claude/skills/). Hooks de language-* são
instalados APENAS em escopo de projeto (FR-009c) com merge automático
de settings.json quando jq disponível, ou paste-block instrucional
quando ausente (FR-009d).
Self-update atômico (FR-006): par bin + lib tratado como unidade
indivisível via stage-and-rename coordenado + boot-check de versão
embutida vs versão da lib. Nunca toca o manifest de skills (FR-006a;
verificável: mtime do .cstk-manifest preservado).
Pipeline de release em .github/workflows/release.yml —
triggered por push tag v*, valida testes (tests/run.sh + cstk
suite), gera tarball determinístico via scripts/build-release.sh
e publica via gh release create com cstk-X.Y.Z.tar.gz,
.sha256 e install.sh (asset standalone para o one-liner
curl <url> | sh).
Observabilidade: cstk list (TSV/pretty) + cstk doctor
(4 estados de drift: OK, EDITED, MISSING, ORPHAN — SC-007).
Determinismo do tarball (scripts/build-release.sh): mtime
normalizado, gzip -n, ordenação LC_ALL=C sort, detecção
GNU-vs-BSD tar para paths portáveis. Verificado: 2 builds
consecutivos produzem o mesmo SHA-256.
Cobertura de testes: 242 cenários (tests/run.sh global), zero
falhas. Gap real único (Scenario 13 SC-003 byte-a-byte) coberto por
tests/cstk/test_quickstart-e2e.sh.
Spec completa em docs/specs/cstk-cli/;
documentação user-facing em README.md §Instalação.
Governance¶
- Constitution 1.0.0 → 1.1.0 (MINOR amendment): nova subseção "Optional
dependencies with graceful fallback" sob Princípio II disciplinando deps
não-POSIX em três condições cumulativas (uso opcional com fallback
verificável, confinamento em único arquivo, declaração explícita na feature).
Nota complementar no Decision Framework item 4 reconhece subseções de
carve-out como mecanismo válido quando precedidas por amendment MINOR.
Não afrouxa Princípio II — Bash-isms seguem proibidos,
ripgrep/fd/batspermanecem banidos mesmo como opcionais, deps obrigatórias continuam vetadas. Primeiro caso concreto sob a nova regra:jqopcional emcli/lib/hooks.shda featurecstk-cli. Verdocs/specs/constitution-amend-optional-deps/para histórico completo de raciocínio.
3.1.1 - 2026-04-20¶
Versão PATCH — correção de bug latente em validate.sh análogo ao
histórico de metrics.sh (commit ead1b68).
Fixed¶
validate.shdeixa de poluir stderr cominteger expression expected. As linhas 244–245 continham o mesmo padrão defeituosogrep -c ... || printf '0'que quebroumetrics.sh: em no-match,grep -cimprime"0"e sai com exit 1, disparando o fallback que concatena outro"0"— resultado"0\n0"quebra as comparações aritméticas subsequentes. Fix aplica o padrão seguroVAR=$(grep -c ...) || VAR=0.- Bug latente adicional revelado: a aritmética corrompida fazia com
que os três
ifdo bloco "Próximos Passos" (Corrigir N ERRO(s),N AVISO(s),Nenhuma ação necessária) falhassem silenciosamente em docs válidos. Com o fix, a mensagem de sucesso- Nenhuma acao necessaria. Documentacao renderiza corretamente.volta a aparecer quando aplicável. - Tabela Resumo do stdout deixa de renderizar
| X | 0\n0 |em duas linhas quando algum contador é zero — agora sempre em linha única| X | 0 |.
Added¶
tests/test_validate.sh :: scenario_stderr_limpo_em_docs_validos: regressão dedicada que captura stderr ao rodarvalidate.shcontrafixtures/docs-site/valid/e falha se contiver"integer expression expected"ou"[: ". Protege contra o retorno do bug histórico.- Assertion adicional em
scenario_docs_validos: trava como invariant a linha "Nenhuma acao necessaria" que agora aparece em docs válidos. - Feature SDD completa em
docs/specs/fix-validate-stderr-noise/: spec + plan + research + quickstart + tasks + checklists/requirements (29 subtarefas, 100% concluídas).
Contract preserved¶
- Exit codes de
validate.shinalterados (0 em sucesso, 1 em ERROs). - Estrutura do stdout (seções, colunas, severidades) inalterada.
- Apenas valores numéricos corrigidos onde estavam corrompidos, e
stderr limpo. Nenhum teste existente em
test_validate.shquebrou.
3.1.0 - 2026-04-20¶
Versão MINOR — adição de suíte automatizada de testes para os scripts
POSIX distribuídos em global/skills/**/scripts/.
Added¶
-
Suite automatizada de testes em
tests/cobrindo os 5 scripts shell do toolkit (metrics.sh,next-task-id.sh,next-uc-id.sh,scaffold.sh,validate.sh). Entry point únicotests/run.shexecuta 44 scenarios em 3–4 segundos e reporta status trichotômico PASS / FAIL / ERROR no formato TAP. -
Harness POSIX puro em
tests/lib/harness.shcom gestão isolada pormktemp -d+trap EXIT/INT/TERM, e os helpersassert_exit,assert_stdout_contains,assert_stderr_contains,assert_stdout_match,assert_no_side_effect,fixtureerun_all_scenarios. Zero Bash-isms; zero dependências além das ferramentas POSIX canônicas. -
Regressão dedicada do bug histórico de
metrics.sh(scenario_regressao_bug_grep_c_sem_matches) protegendo contra o retorno do padrão defeituosogrep -c ... || printf '0'que concatenava"0\n0"e quebrava expressões aritméticas. Validado revertendo o fix temporariamente durante a entrega: a suíte detectou 3 FAILs incluindo o dedicado. -
Modos do runner:
--list(lista scenarios sem executar),--check-coverage(detecta scripts sem teste e testes sem script; exit 1 em órfão), filtragem porPATTERNposicional,--help. -
Governança de cobertura (FR-009 da spec): no modo normal, órfãos aparecem como warning (
ORPHANS: N+ bloco# WARN:) sem bloquear; no modo--check-coverage, órfãos fazem exit 1. Convenção estritatests/test_<nome>.shpara cadaglobal/skills/<skill>/scripts/<nome>.sh. -
tests/README.mdcom quickstart, arquitetura, formato TAP, exit codes, contrato do harness (tabelas de helpers) e guia para adicionar teste ao script novo. -
Spec completa em
docs/specs/shell-scripts-tests/:spec.md+plan.md+research.md+data-model.md+contracts/runner-cli.md quickstart.md+checklists/requirements.md+tasks.md. Feature entregue em 5 fases, 113 subtarefas, 100% concluídas.
Known issue (fora do escopo desta release)¶
validate.sh(linhas 273–284) contém o mesmo padrãogrep -c || printf '0'do bug histórico demetrics.sh. Afeta apenas stderr (não exit code nem stdout). Registrado emdocs/specs/shell-scripts-tests/tasks.md§FASE 2. Candidato para nova feature em ciclo SDD separado.
3.0.0 - 2026-04-20¶
Versão MAJOR devido a remoção de asset distribuído (contrato de instalação
muda — usuários que faziam cp -r global/insights/ precisam migrar).
Removed (BREAKING)¶
- Diretório
global/insights/removido do repositório. O arquivousage-insights.mdque vivia ali era uma curadoria específica de sessões de um usuário (Go + TypeScript + PostgreSQL multi-serviço), não um playbook genérico. Distribuí-lo como parte do toolkit confundia quem clonava: o conteúdo era tratado como autoritativo quando era apenas o snapshot de um contexto.
Como fica agora:
- A skill
apply-insightscontinua funcionando — ela sempre leu de~/.claude/insights/usage-insights.md(espaço do usuário), nunca deglobal/insights/diretamente. - Se o arquivo
~/.claude/insights/usage-insights.mdexistir, a skill o usa. Caso contrário, cai em best-practices genéricas (comportamento já documentado no SKILL.md). - O modelo recomendado agora: gerar o arquivo via a slash command nativa
/insightsdo Claude Code (que analisa suas sessões reais) ou curá-lo manualmente. Cada usuário mantém o seu próprio.
Impacto para consumidores:
- O comando
cp -r global/insights/ ~/.claude/insights/(documentado no README) não existe mais — o diretório-fonte foi removido. - Quem já tinha copiado o arquivo para
~/.claude/insights/mantém a cópia local intocada. - README atualizado: seção "Insights de Uso" reescrita para refletir o modelo por-usuário; diagrama de estrutura e bloco de instalação limpos.
- CLAUDE.md atualizado: seção "Renomeando uma skill" não referencia mais
global/insights/.
Migration¶
- Se você dependia do arquivo distribuído:
# O arquivo pode continuar no seu ~/.claude/insights/ se você já o copiou
ls ~/.claude/insights/usage-insights.md
# Caso contrário, gere o seu via o /insights nativo do Claude Code,
# ou mantenha um playbook curado manualmente neste caminho
- Se você referenciava
global/insights/em scripts ou docs próprios, remover a referência — o caminho não resolve mais.
2.0.0 - 2026-04-19¶
Versão MAJOR devido a rename de skill user-visível (identificador de invocação é contrato público).
Changed (BREAKING)¶
- Skill
insightsrenomeada paraapply-insights— o Claude Code tem uma slash command nativa/insights(analisa suas sessões de uso) que colidia no namespace de autocomplete com a nossa skill homônima. As duas coexistiam sem uma sobrescrever a outra, mas a ambiguidade gerava atrito: - usuários precisavam selecionar a correta a cada invocação
- documentação que referenciasse
/insightsficava ambígua - hooks que tentassem invocar por string tinham comportamento indefinido
Rename para apply-insights deixa claro que a função é prescritiva
(aplicar um playbook ao projeto) — distinta da nativa, que é
introspectiva (analisar sessões). A description da skill agora explicita
essa diferença para o modelo.
Impacto para consumidores:
- Invocações via /insights agora rodam a skill nativa do Claude Code
- Para a função antiga, usar /apply-insights
- Arquivos CLAUDE.md / documentação que referenciavam /insights precisam
ser atualizados
Migration¶
- Se o seu projeto tem instalação local:
.claude/skills/insights/→.claude/skills/apply-insights/ - Atualizar triggers em CLAUDE.md, memórias, hooks, scripts
- Nova invocação:
/apply-insights(ou qualquer dos triggers em português como "aplicar insights", "aplicar playbook", "melhorar claude.md")
1.1.0 - 2026-04-19¶
Refatoração ampla das 18 skills globais aplicando os princípios do artigo "Skills no Claude Code: O Guia Definitivo" e adicionando 1 nova skill. Todas as mudanças são backward-compatible na invocação pelo nome — skills continuam respondendo aos mesmos triggers e argumentos.
Added¶
-
Nova skill
validate-docs-rendered(categoria "Verificação de Produto" do artigo) — valida que a documentação Markdown realmente renderiza corretamente: diagramas Mermaid parseáveis, links internos sem 404, frontmatter YAML consistente, tabelas bem formadas, code blocks com linguagem declarada. Script POSIXscripts/validate.shroda 5 checagens com exit code para uso em CI/hooks. -
Seções
Gotchasem todas as 18 skills preexistentes — documentando armadilhas recorrentes e erros típicos. Segue a recomendação do artigo de que "o conteúdo mais valioso de uma skill é a seção de gotchas". -
Scripts POSIX reutilizáveis em 4 skills:
initialize-docs/scripts/scaffold.sh— cria estrutura 01-09 com READMEs template, idempotente, suporta--dry-run,--force,--dir=PATHcreate-use-case/scripts/next-uc-id.sh— calcula próximoUC-{DOMINIO}-NNNdisponível; suporta--listpara auditar domínios existentescreate-tasks/scripts/next-task-id.sh— calcula próximo ID hierárquico (1.3,1.2.4) com regex ancorado para evitar falsos positivos-
review-task/scripts/metrics.sh— extrai métricas de progresso do tasks.md em formato tabular + JSON -
Arquitetura de skill-como-pasta com subdiretórios para progressive disclosure em 8 skills (specify, plan, create-tasks, create-use-case, briefing, checklist, constitution, analyze):
templates/— templates preenchíveis (feature-spec, plan, tasks, briefing, constitution, data-model, contracts, quickstart, research, use-case)examples/— exemplos concretos (specify temspec-good.mdespec-bad.mdcom anti-patterns comentados)-
references/— documentação de apoio (catálogos de items por domínio para checklist; consistency-checks para analyze; discovery-guide detalhado para briefing) -
Composição explícita do pipeline SDD — cada skill do pipeline agora documenta em seções
## Pré-requisitose## Próximos passosquais artefatos consome e qual skill é o passo lógico seguinte. Torna a sequência briefing → constitution → specify → clarify → plan → checklist → create-tasks → analyze → execute-task → review-task navegável sem tooling formal de dependências. -
config.jsonem 3 skills para configuração por projeto: create-use-case/config.json— mapa de domínios customizados, output_dir, formato de ID, mínimos de qualidadecreate-tasks/config.json— níveis de criticidade, paths de output (spec_derived vs standalone), prefixo de fase, granularidadeinitialize-docs/config.json— estrutura de diretórios customizável,keep_in_root,file_routingpor padrão
Quando config.json está ausente, as skills usam defaults documentados.
Quando presente, o projeto adapta as convenções sem bifurcar a skill.
Changed¶
-
Reescrita do campo
descriptionde todas as 18 skills no formato de trigger conditions ("Use quando o usuário X, Y ou Z. Também quando mencionar A, B, C. NÃO use quando W.") em vez de resumo. Isso melhora descoberta — o modelo precisa decidir quando invocar a skill, não apenas o que ela faz. Particularmente relevante com Opus 4.7, que interpreta descrições de forma mais literal. -
Agnosticização completa das skills — removidas referências específicas a projetos, stacks e convenções de qualquer cliente/codebase. Skills agora tratam stack (Go/Python/React/etc.), domínios de negócio (AUTH/CAD/PED) e paths internos (
services/{service}/...) como exemplos ilustrativos marcados, não como assunções. Cada skill funciona em qualquer projeto. -
bugfixreescrita para ser stack-agnostic — os 8 passos do protocolo (Step 0..7) agora usam terminologia genérica de camadas ("server / backend", "client / frontend", "cross-boundary") em vez de listas específicas de Go/React. Comandos de build/test/lint apresentados em tabela por stack. -
execute-taskreescrita para ser stack-agnostic — Etapa 7 (Lint) é agora uma tabela com comandos típicos por stack (Go, Node, Rust, Python, Java, .NET) em vez de assumirgo build ./.... -
create-use-case: domínios deixam de ser enum fixo — a lista antiga (AUTH, CAD, PED, FIN, FAT, LOG, MON, INAD, REC, PROP, CONT, DOM) virou exemplo; a skill consultaconfig.jsonou UCs existentes antes de perguntar ao usuário. -
Templates extraídos do SKILL.md para arquivos separados — reduzem o custo de contexto no momento da invocação: o modelo carrega o template só quando preenche, não toda vez que decide se invoca a skill.
Moved¶
global/skills/create-use-case/template-uc.md→global/skills/create-use-case/templates/use-case.md(alinhamento com a convençãotemplates/das demais skills)
Documentation¶
- README.md atualizado com:
- Seção "Anatomia de uma skill" documentando a arquitetura (SKILL.md + templates/examples/references/scripts/config.json)
- Esclarecimento de que domínios (AUTH/CAD/PED/etc.) são configuráveis por projeto, não uma lista universal
- Seção "Contribuindo" revisada com guidelines para novas skills (trigger-condition descriptions, gotchas, progressive disclosure)
- Link para este CHANGELOG
Estatísticas desta versão¶
- 18 skills preexistentes atualizadas
- 1 skill nova (
validate-docs-rendered) - 19 arquivos novos de templates/references/examples
- 5 scripts POSIX (4 nas skills existentes + 1 na skill nova)
- 3 arquivos
config.json - 5 commits incrementais (uma fase por commit)
1.0.0 - 2026-04-18¶
Primeira versão publicada do toolkit.
Added¶
- 18 skills globais cobrindo pipeline SDD completo (briefing, constitution, specify, clarify, plan, checklist, create-tasks, analyze, execute-task, review-task) e skills complementares (advisor, bugfix, create-use-case, image-generation, initialize-docs, insights, owasp-security, validate-documentation)
- Skills específicas para Go (commit, create-report, go-add-entity, go-add-migration, go-add-test, go-add-consumer, go-review-pr, go-review-service) e hooks de validação
- Skills específicas para .NET (create-entity, create-feature, create-project, create-test, hexagonal-architecture, infrastructure, review-code, testing)
- Arquivo
global/insights/usage-insights.mdcom padrões extraídos de 134 sessões reais de uso - README documentando estrutura, pipeline SDD sugerido e convenções de nomenclatura