
Success Guided Spec
- 1 installs
- Updated March 29, 2026
- erickcremona/topsaudetests
Author Playwright specs by reusing patterns from previously passing tests recorded in a success_base.json registry.
About
Suggests similar previously-passing Playwright specs from a success_base.json registry so new specs reuse validated patterns. A developer uses it when writing or adjusting API/UI/SAC test specs to reduce rework.
- A reporter auto-records passing test code into success_base.json
- PowerShell suggest script queries for similar specs by keywords
Success Guided Spec by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,750 of 2,153 Testing & QA skills by installs in the Skillselion catalog
- Data as of Jul 8, 2026 (Skillselion catalog sync)
npx skills add https://github.com/erickcremona/topsaudetests --skill success-guided-specAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| Last updated | March 29, 2026 |
| Repository | erickcremona/topsaudetests ↗ |
What it does
Author Playwright specs by reusing patterns from previously passing tests recorded in a success_base.json registry.
Files
Success-Guided Spec Authoring
Objetivo
Diminuir retrabalho reutilizando padrões já validados por execução real.
Este repo registra automaticamente o código de qualquer teste que passa em:
tests/src/success_base/success_base.json
O registro acontece via reporter configurado no Playwright (tests/src/success_base/reporter.ts).
Como usar
1) Descubra specs parecidas com o cenário atual:
powershell -NoProfile -ExecutionPolicy Bypass -File skills/success-guided-spec/scripts/suggest-success-spec.ps1 -Query "SAC_166839 api swagger token contrato"2) Use 1–3 resultados como base para implementar a spec nova/ajustada.
3) Rode o teste. Quando passar, o success base é atualizado automaticamente (não precisa fazer nada manual).
4) Em specs UI/SAC, preserve ou adicione a copia do video.webm de sucesso para tests/{SAC}/videos/{valor}.webm.
Dicas de query
- Para API:
swagger,endpoint,token,status 200, paths/api/... - Para UI:
data-modulo-funcao,frame_url_hint,kendo, ids de campos/botões - Para SAC:
SAC_166839, nome do cenário, contratos, módulos
interface:
display_name: "Success-Guided Spec Authoring"
short_description: "Escreve specs Playwright reaproveitando padrões de specs que já passaram (success_base.json) para reduzir retrabalho."
default_prompt: |
Use $success-guided-spec quando o usuário pedir para escrever/ajustar specs com máxima assertividade e mínimo retrabalho.
Anti-overlap:
- Se o prompt parecer de roteamento/triagem, delegue para $prompt-router e não continue.
- Se o usuário pedir especificamente API/Swagger, direcione para $swagger-rest-requests (e use o success base apenas como referência auxiliar).
- Se o usuário pedir especificamente UI/TopSaude, direcione para $top-saude-sac-tests (e use o success base apenas como referência auxiliar).
Fonte de verdade de "o que já deu certo":
- `tests/src/success_base/success_base.json` (registrado automaticamente pelo reporter quando um teste passa).
Regras:
- Antes de escrever uma spec nova, procure referências semelhantes no success base (SAC, API vs UI, endpoints, data-modulo-funcao, ids, padrões de frame).
- Reaproveite estruturas de código e helpers que já foram validados por specs que passaram.
- Evite reinventar helpers; prefira copiar/adaptar do spec mais próximo.
- Sempre que um teste passar, isso já será registrado pelo reporter; use essas novas entradas como referência em futuras specs.
Workflow recomendado:
1) Consultar o success base (use o script `skills/success-guided-spec/scripts/suggest-success-spec.ps1`).
2) Selecionar 1–3 specs "mais próximas" como base.
3) Implementar a spec nova/ajustada mantendo padrões de logging, passos, delays, visualização e robustez.
4) Executar o teste; ao passar, o reporter atualiza o success base automaticamente.
Modo de atuação (quando acionado por falha):
- Assuma que um spec acabou de falhar.
- Use o failure output/trace + `tests/src/success_base/success_base.json` para propor a menor correção possível.
- Reexecute em modo visual (`--headed`) para confirmar.
policy:
allow_implicit_invocation: true
Learnings - Success-Guided Spec Authoring
- A base de sucesso é atualizada automaticamente quando um teste passa (via
tests/src/success_base/reporter.ts). - Melhor custo/benefício: copiar a spec mais parecida e alterar somente request/locators/paths.
param(
[Parameter(Mandatory = $true)]
[string] $Query,
[Parameter(Mandatory = $false)]
[int] $Top = 8,
[Parameter(Mandatory = $false)]
[switch] $ShowCode
)
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
function RepoRootFromScript {
return (Resolve-Path (Join-Path $PSScriptRoot "..\\..\\..")).Path
}
function Normalize([string] $s) {
if ($null -eq $s) { return "" }
return ($s.ToLowerInvariant())
}
$repoRoot = RepoRootFromScript
$successPath = Join-Path $repoRoot "tests\\src\\success_base\\success_base.json"
if (-not (Test-Path $successPath)) {
throw "success_base.json not found: $successPath"
}
$raw = Get-Content -Raw $successPath
$base = $raw | ConvertFrom-Json
$entries = @($base.entries)
$terms = @()
foreach ($t in ($Query -split "\\s+")) {
$tt = $t.Trim()
if ($tt) { $terms += (Normalize $tt) }
}
if (-not $terms.Count) { throw "Query vazio." }
function ScoreEntry($e) {
$file = Normalize ($e.file)
$title = Normalize (($e.titlePath -join " "))
$code = Normalize ($e.code)
$score = 0
foreach ($term in $terms) {
if (-not $term) { continue }
if ($file.Contains($term)) { $score += 8 }
if ($title.Contains($term)) { $score += 6 }
if ($code.Contains($term)) { $score += 2 }
}
return $score
}
$scored = foreach ($e in $entries) {
$s = ScoreEntry $e
if ($s -le 0) { continue }
[pscustomobject]@{
score = $s
lastSeen = $e.lastSeen
file = $e.file
title = ($e.titlePath -join " > ")
key = $e.key
code = $e.code
}
}
$top = $scored | Sort-Object -Property @{ Expression = "score"; Descending = $true }, @{ Expression = "lastSeen"; Descending = $true } | Select-Object -First $Top
if (-not $top) {
Write-Output "No matches for query: $Query"
exit 0
}
foreach ($r in $top) {
Write-Output ("[{0}] {1}" -f $r.score, $r.title)
Write-Output (" file: {0}" -f $r.file)
Write-Output (" lastSeen: {0}" -f $r.lastSeen)
if ($ShowCode) {
Write-Output "----- CODE -----"
Write-Output $r.code
Write-Output "---------------"
}
Write-Output ""
}