DoneWitness
Quickstart · Release notes · 中文
Check what an AI-built web app actually does. DoneWitness runs a reviewed
acceptance plan against a local application and writes an evidence-backed
PASS, FAIL, or UNKNOWN receipt. No LLM, account, or hosted service is required.
The page says “Saved”. Did it save?
The included expense demo runs one acceptance plan against three implementations:
| Implementation | Input validation | Total & form state | Saved after navigation |
|---|---|---|---|
| Working app | PASS | PASS | PASS |
| Wrong total | PASS | FAIL | PASS |
| Fake save | PASS | PASS | FAIL |
These are real Chromium runs against controlled faults. The example uses localStorage; it demonstrates these covered defects, not backend durability or universal bug detection.
v0.2.0 adds text, value, count, and hidden-state assertions; offline plan validation; and lighter CLI startup. Measured help/version startup dropped 69–72% on one Windows machine. No new runtime dependencies. Measurements and limits.
Try it
Use Python 3.12–3.14 in a virtual environment:
python -m pip install donewitness==0.2.0
python -m playwright install chromium
donewitness --version
Get the matching examples (the Python package is already installed):
git clone --depth 1 --branch v0.2.0 https://github.com/Drippinblood333/DoneWitness.git
cd DoneWitness
donewitness validate --plan examples/expenses.plan.json
Run the working app and inspect its evidence:
donewitness verify --plan examples/expenses.plan.json --base-url http://127.0.0.1:8765 --run-dir .donewitness/expenses --app-command python examples/expenses_app.py
donewitness inspect --run-dir .donewitness/expenses
Run the same plan against a deliberately broken save implementation:
donewitness verify --plan examples/expenses.plan.json --base-url http://127.0.0.1:8765 --run-dir .donewitness/fake-save --app-command python examples/expenses_app.py --fault fake-save
The persistence criterion returns FAIL (exit 1), even though the page says “Saved”.
Use --fault wrong-total with another run directory to try the calculation defect.
Choose a new run directory each time. --app-command must be the final DoneWitness
option: everything after it belongs to your application command. python -m donewitness
is equivalent to the console command. On Linux, Chromium may need system dependencies;
see the setup guide.
Use it on your application
- Write or review the acceptance criteria before verification.
- Adapt the example plan to your application.
- Run
validate --plan ...to catch format errors without launching anything. - Run
verifywith your local URL and startup command. - Review the receipt and decide whether the covered behavior is acceptable.
| Exit | Meaning |
|---|---|
| 0 | PASS: all declared checks passed with evidence |
| 1 | FAIL: an assertion contradicted expected behavior |
| 2 | Invalid input or invocation |
| 3 | UNKNOWN or incomplete: insufficient execution/evidence |
A PASS covers the reviewed checks only. A valid plan does not prove that its criteria are complete. Missing requirements remain missing when every check passes.
Runs contain receipt.txt, receipt.json, evidence-manifest.json, and bounded
artifacts. inspect checks integrity without rerunning the app. Default observations
record outcomes and step locations; new assertion diagnostics do not copy expected
values or page contents. Screenshots/traces remain opt-in library captures. Hashes
detect inconsistent changes, not forgery by someone who can rewrite the whole bundle.
Boundaries and details
Direct mode executes the application with your user permissions. Optional Docker mode reduces exposure but is not a hostile-code security guarantee. This release stays focused on locally runnable web apps and a CLI.
- Plan v3 assertions and compatibility
- CLI reference, Docker, revisions, and troubleshooting
- CI and machine-readable output
- Security and privacy
- Acceptance criteria · Architecture
- Contributing · Security reporting
Trying this on a real app? Share a small, reproducible issue with the expected behavior and a redacted result. Useful failures and unclear UNKNOWNs are especially welcome. Keep private data and vulnerability details out of public issues.
Licensed under Apache-2.0.
Metadata
Release files for donewitness 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| donewitness-0.2.0.tar.gz | 97.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| donewitness-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 153.4 kB
Release files / donewitness-0.2.0.tar.gz
| Download URL | donewitness-0.2.0.tar.gz |
|---|---|
| Size | 97.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
30d00ca1cf0c1f6abc2a385edd4549fcf643750ab142d68d57dcc0782ee7c6b6
|
|
BLAKE2b-256 checksum How to use checksums |
5e4938ecd3a67497d5bf901a85b0119290c4a57ee44db92f21e41e3fc257976c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / donewitness-0.2.0-py3-none-any.whl
| Download URL | donewitness-0.2.0-py3-none-any.whl |
|---|---|
| Size | 55.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7f24d4f231e6c4af92d5d0f9ebe2b213fb5fde10e1c0c56f88a1707c062b85f5
|
|
BLAKE2b-256 checksum How to use checksums |
bacbb2225955f0168d85f1b8da6567d255039e21978771e30193d6c4981d21f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|