DevS69 SDETKit¶
From noisy CI evidence to a reviewable decision, a diagnosis, and the exact next command.
DevS69 SDETKit is a release-confidence CLI for deterministic ship/no-ship decisions with machine-readable evidence. It runs your repository's own checks in its own environment, reduces a failure to the first one that matters, and tells you what to run next. It never applies, merges or dismisses anything for you.
Primary outcome: know if a change is ready to ship.
Canonical first path: python -m sdetkit gate fast -> python -m sdetkit gate release -> python -m sdetkit doctor.
Which version these docs describe
These docs follow main, the 2.0.0 release candidate. The latest published package is sdetkit==1.2.0. The verdicts, the fix loop (diagnose run --prove) and checks that run in the project's own environment are on main only until 2.0.0 is released; the current product delta lists every difference.
Get started¶
python -m venv .venv && source .venv/bin/activate
python -m pip install sdetkit==1.2.0
python -m venv .venv && source .venv/bin/activate
python -m pip install "git+https://github.com/sherif69-sa/DevS69-sdetkit"
Then, in your repository:
python -m sdetkit gate fast --format json --stable-json --out build/gate-fast.json
python -m sdetkit gate release --format json --out build/release-preflight.json
python -m sdetkit doctor --format json --out build/doctor.json
Each command writes one JSON artifact that people, bots and CI read the same way. Start in 5 minutes walks through the first run.
One verdict per run¶
Every run ends in one of four decisions, recorded in the artifact's verdict.decision:
| Verdict | Meaning | What to do |
|---|---|---|
SHIP |
Every check ran against this repository and passed. | Continue to gate release, or ship. |
REVIEW |
Nothing blocks, but a person should look first (findings that do not block, or a proven fix waiting for approval). | Read the findings, then decide. |
NOT_RUN |
The checks could not run against this repository, for example because the project is not installed in the environment that ran them. Nothing was proven either way. | Run the setup command in next_action.next_command, then run the gate again. |
NO_SHIP |
A check failed. | Start from next_action: the first failure, its file, and the command to reproduce it. |
A failing run names its first failure instead of the loudest wrapper error:
decision: NO-SHIP
classification: test
first_failure: FAILED tests/test_release_contract.py::test_wheel_smoke
affected_file: tests/test_release_contract.py
next_command: python -m pytest -q tests/test_release_contract.py -o addopts=
authority: review-first
From a failing gate to a reviewed fix¶
After a failing gate fast, one command diagnoses the failure, proves the narrowest mechanical fix in a throwaway copy of the repository, and writes a decision card. A person approves or rejects it; nothing is applied for you.
python -m sdetkit diagnose run --prove
python -m sdetkit diagnose decide --card build/sdetkit/remediation-loop/decision-card.json --approve --reviewer <you>
See the remediation loop and first-failure triage.
Proven on real projects¶
gate fast has been run on seven well-known open-source projects at pinned commits: pallets/itsdangerous, markupsafe and click, python-attrs/attrs, pytest-dev/pluggy, python-poetry/poetry-core and psf/requests. Every fresh clone reads NOT_RUN with the setup command it needs; after setup, five read SHIP and two read NO_SHIP for real failing tests. The external repository proof records every result and how to reproduce it.
Where to go next¶
-
Get started
-
Operate
First-failure triage · Investigation guide · Artifact reference · Recommended CI flow
-
Adopt in a team
Adopt in your repository · Team adoption checklist · Real repository adoption
-
Reference
CLI reference · Doctor · Security gate · Versioning and support · Stability levels
-
Contribute
-
Safety boundaries
Security hardening · PR automation boundary · Remediation cookbook
This page is the product homepage/router: everything a first-time user needs is linked above. Historical and transition-era references remain intentionally secondary to first-time adoption; use the archive index only after the canonical first path is operating.
SDETKit needs Python 3.10 or newer. Use an isolated environment (a virtualenv or pipx).