Skip to content

fix(task): standardize blocked precondition receipts - #654

Merged
wesleysimplicio merged 1 commit into
mainfrom
issue/122-governed-fix
Aug 8, 2026
Merged

fix(task): standardize blocked precondition receipts#654
wesleysimplicio merged 1 commit into
mainfrom
issue/122-governed-fix

Conversation

@wesleysimplicio

Copy link
Copy Markdown
Owner

Pull Request

Resumo

Padroniza recibos fail-closed de precondições bloqueadas do task --dry-run-task --json, incluindo schemas versionados, roteamento acionável e diagnósticos somente em stderr. O mesmo contrato agora cobre artefatos Mapper ausentes/stale, handoff/contexto, seleção de target e bloqueios de provider/execution mode.

Task relacionada

Tipo de mudança

  • fix — bug fix
  • feat — nova feature
  • refactor — refactor sem mudança comportamental
  • perf — melhoria de performance
  • docs — documentação
  • test — só testes
  • chore — build/CI/tooling
  • breaking — quebra contrato

Definition of Done

  • Acceptance criteria da issue exercitados com recibos reais de CLI
  • Ruff nos arquivos alterados
  • Testes focados do módulo de recibo: 55 passed
  • Coverage branch-aware do módulo alterado: 95.94%
  • Evidência observa stdout JSON, stderr diagnóstico, exit code e fail-closed
  • Sem TODO/FIXME novos
  • Sem secrets/credenciais hardcoded
  • Conventional commit
  • Documentação e changelog atualizados
  • Gate completo do repositório — ver limitações de baseline abaixo
  • E2E Playwright — N/A, starter/harness não alterado
  • Version bump — N/A, publicação não solicitada
  • ADR — N/A, sem decisão arquitetural nova

Pergunta de invariante

  • Resposta: Sim. A coleção blocked_preconditions é normalizada uma única vez por _task_result; os diagnósticos consomem exatamente as entradas já normalizadas, preservando a mesma granularidade, ordem e roteamento.

Evidências

  • py -3.14 -m ruff check simplicio/commands/task.py simplicio/pipeline.py simplicio/pipeline_task_result.py tests/python/test_task_json_contract.py tests/python/test_pipeline_task_result_module_coverage_gap.pyAll checks passed!
  • py -3.14 -m ruff format --check ...5 files already formatted
  • py -3.14 -m pytest tests/python/test_pipeline_task_result.py tests/python/test_pipeline_task_result_module_coverage_gap.py --cov=simplicio.pipeline_task_result --cov-branch --cov-fail-under=85 -q55 passed, 95.94%
  • Suite focada dos fluxos [P1][Diagnostics] dev-cli dry-run-task should emit structured blocked-precondition receipts #122 e testes do módulo → 44 passed
  • Verificação adversarial por subprocesso real:
    • artefatos/handoff ausentes: exit 1, um JSON em stdout, model_invoked=false, reasons artifacts_missing/no_handoff_targets, dois diagnósticos em stderr;
    • target fora da raiz: exit 1, next_surface=task_target, reason target_outside_root;
    • parent inválido: exit 1 e quatro precondições estruturadas, sem aplicação.
  • Microbenchmark da normalização: 100.000 operações em 47,616 ms (476,2 ns/op; 2.100.121 ops/s).
  • simplicio contracts smoke --json --repo . → todos os checks obrigatórios passaram.

Limitações de baseline observadas

  • pytest -q completo não produziu resultado final antes do timeout de 604,1 s; os processos pertencentes a esse basetemp foram encerrados.
  • Contracts: 28 passed, 12 skipped, 1 falha preexistente em test_task_json_contract_over_real_mapper_fixture por MAPPER_CONTEXT_IDENTITY_REQUIRED.
  • Ruff global encontra 29 ocorrências preexistentes em skills/simplicio-prism/scripts/generate_capability_inventory.py; format global lista 7 arquivos não alterados.
  • Mypy global/targeted atravessa import e encontra 3 erros preexistentes em simplicio/mapper.py:423-425 (union-attr).

Matriz AC → receipt

{"schema":"simplicio.dev-cli.evidence-ledger/v1","claims":{"structured_schema":{"status":"measured","evidence":"55 focused tests; 95.94% branch-aware coverage"},"fail_closed":{"status":"measured","evidence":"three real CLI blocked scenarios; exit 1; applied false; model_invoked false"},"diagnostics":{"status":"measured","evidence":"single JSON stdout plus BLOCKED diagnostics on stderr"},"documentation":{"status":"measured","evidence":"docs/blocked-preconditions.md and CHANGELOG.md updated"}},"watcher":{"revalidated":true}}

Cenários E2E cobertos

  • Caminho bloqueado esperado
  • Casos de erro: target fora da raiz e parent inválido
  • Edge cases relevantes
  • Estados de auth — N/A
  • Variantes de viewport — N/A

Breaking changes

N/A. O contrato é aditivo e versionado.

Notas de deploy

N/A.

@wesleysimplicio
wesleysimplicio merged commit ac9b0c5 into main Aug 8, 2026
@wesleysimplicio
wesleysimplicio deleted the issue/122-governed-fix branch August 8, 2026 15:09
@github-project-automation github-project-automation Bot moved this from Backlog to Done in Simplicio - Dev CLI Aug 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[P1][Diagnostics] dev-cli dry-run-task should emit structured blocked-precondition receipts

1 participant