fleetproof 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Gathrazio
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,231 @@
1
+ Metadata-Version: 2.4
2
+ Name: fleetproof
3
+ Version: 0.1.0
4
+ Summary: Independent, out-of-band verification for agent fleets.
5
+ Author: Gathrazio
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Gathrazio/fleetproof
8
+ Project-URL: Repository, https://github.com/Gathrazio/fleetproof
9
+ Keywords: agents,verification,claude-code,audit,run-log
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Topic :: Software Development :: Quality Assurance
15
+ Requires-Python: >=3.10
16
+ Description-Content-Type: text/markdown
17
+ License-File: LICENSE
18
+ Provides-Extra: dev
19
+ Requires-Dist: pytest>=7; extra == "dev"
20
+ Dynamic: license-file
21
+
22
+ # FleetProof
23
+
24
+ Independent, out-of-band verification for agent fleets — *what did my agents actually do, and what did they claim was done when it wasn't?*
25
+
26
+ FleetProof is a Claude Code plugin plus a small stdlib-only Python package. It
27
+ records what your agents do to a durable run log, and — critically — grades that
28
+ work with a checker that runs in a separate process from the agent that did
29
+ it. An agent may author the checks; it never executes and grades its own work.
30
+
31
+ ## Why this exists
32
+
33
+ The failure mode this targets is the false "done": an agent reports a task
34
+ complete when it isn't. A recent characterization study
35
+ ([arXiv:2606.09863](https://arxiv.org/abs/2606.09863)) measured it directly:
36
+ 45–48% of failures in single-control tau2-bench domains are exactly this —
37
+ the agent confidently claims success. Among self-assessing coding-agent
38
+ trajectories on AppWorld, it's 75.8%. And in the study's one *dual-control*
39
+ setting — where a second, independent control point contradicts the agent's
40
+ claims — false success collapses to 3%.
41
+
42
+ FleetProof is built on that comparison: it gives any repo a second, independent
43
+ control point. (To be precise: the 3% is a measured property of that
44
+ benchmark setting, not a measured result of installing this tool — the study
45
+ motivates the design; it didn't test it.)
46
+
47
+ The word doing the work there is *independent*. A verifier that is the same agent
48
+ (or a sub-agent prompted by it) inherits the same blind spots and the same
49
+ incentive to declare victory. The only way to escape that is to move verification
50
+ out of the agent's own process and make it deterministic. That is the entire
51
+ design of FleetProof:
52
+
53
+ - the agent writes the run records and authors `checks.json`;
54
+ - a different process — the plugin's Stop hook, a `type: "command"` hook,
55
+ never an LLM — executes those checks and grades them;
56
+ - if a blocking check fails, the hook returns `{"decision": "block", ...}` and
57
+ Claude Code refuses to let the agent stop on the false "done".
58
+
59
+ No language model sits in the grading path. Grading is comparison.
60
+
61
+ > Verifying one machine is free, forever. A hosted team tier — shared
62
+ > evidence chains, approval queues, compliance export — is coming:
63
+ > [join the waitlist](https://forms.gle/FcuBTYyoV4x2z8Hm8).
64
+
65
+ ## What's in the box
66
+
67
+ | Piece | What it does |
68
+ |---|---|
69
+ | `@recorded` / `record()` | Durable per-invocation run records under `.fleetproof/runs/`. |
70
+ | `fleetproof check` | The independent checker: runs each declared check in its own subprocess, records the verdict. |
71
+ | Stop hook | Runs the checker when an agent claims done; blocks on a blocking-check failure. |
72
+ | PostToolUse hook | Accretes a per-tool evidence trail into the run log. |
73
+ | `fleetproof report` | One self-contained HTML file: per run, claimed-done vs. independently-verified. |
74
+
75
+ Runtime dependencies: none (Python standard library only). A tool whose job is
76
+ being trustworthy should add as little dependency and supply-chain surface as it can.
77
+
78
+ ## Install (each line is one command in Claude Code)
79
+
80
+ ```
81
+ /plugin marketplace add Gathrazio/fleetproof
82
+ /plugin install fleetproof@fleetproof
83
+ ```
84
+
85
+ Then install the Python package so the CLI and hooks can run:
86
+
87
+ ```
88
+ pip install fleetproof
89
+ ```
90
+
91
+ Requires Python 3.10+. The plugin's hook commands invoke `python`, so `python`
92
+ must be on your `PATH` (see *Scope and limitations*).
93
+
94
+ ## 10-minute quickstart
95
+
96
+ 1. Install the plugin and the package (three commands above).
97
+ 2. Declare what "done" means for your repo:
98
+ ```
99
+ fleetproof init
100
+ ```
101
+ This writes a starter `.fleetproof/checks.json`. Edit it — each entry is
102
+ `{ "id", "run", "expect", "block" }`:
103
+ ```json
104
+ {
105
+ "checks": [
106
+ { "id": "tests-pass", "run": "python -m pytest -q", "expect": "exit0", "block": true },
107
+ { "id": "artifact-built", "expect": { "file_exists": "dist/app.zip" }, "block": true }
108
+ ]
109
+ }
110
+ ```
111
+ `expect` is one of `"exit0"`, `{ "exit": N }`, `{ "regex": "..." }`, or
112
+ `{ "file_exists": "path" }`. `block: true` gates "done"; `block: false` is advisory.
113
+ 3. Run any Claude Code agent task as usual. When it claims done, the Stop hook
114
+ runs `fleetproof check` in its own process. If a blocking check fails, Claude is
115
+ blocked from stopping and told exactly which check disagreed.
116
+ 4. See what actually happened:
117
+ ```
118
+ fleetproof list # runs, newest first
119
+ fleetproof report # writes .fleetproof/fleetproof-report.html
120
+ ```
121
+ The report marks each run *verified*, *contradicted* (claimed done, but a
122
+ blocking check failed), or *unverified* (no out-of-band verdict on record).
123
+
124
+ You can also run the checker yourself at any time — `fleetproof check` — or on
125
+ demand via the bundled `/fleetproof:verify-fleet` skill.
126
+
127
+ ## The check-spec format
128
+
129
+ `.fleetproof/checks.json` is deliberately small and declarative. It is a contract
130
+ you (or an agent, under your review) write *before* work is graded, kept in the
131
+ repo where it is versioned and diffable. JSON, not YAML, on purpose: there is no
132
+ third-party parser in the runtime.
133
+
134
+ An agent is welcome to propose or edit checks. The guarantee FleetProof makes is
135
+ narrower and firmer than "the agent verified its work": it is that *something
136
+ other than the agent* ran the checks and recorded the result.
137
+
138
+ ## Writing richer checks
139
+
140
+ The grading vocabulary is deliberately small — exit codes, a regex, a file
141
+ existing — but `run` is an arbitrary command, so the *predicate* can be any
142
+ program. The pattern: encode "done" as a script that exits non-zero when it
143
+ isn't, and let FleetProof gate on the exit code.
144
+
145
+ ```json
146
+ {
147
+ "checks": [
148
+ { "id": "dataset-valid",
149
+ "run": "python scripts/validate_dataset.py out/rows.csv --min-rows 1000",
150
+ "expect": "exit0", "block": true,
151
+ "description": "Output CSV exists, parses, has >=1000 rows, no nulls in key columns." },
152
+ { "id": "citations-resolve",
153
+ "run": "python scripts/check_links.py report/draft.md",
154
+ "expect": "exit0", "block": true },
155
+ { "id": "full-suite-advisory",
156
+ "run": "python -m pytest tests/slow -q",
157
+ "expect": "exit0", "block": false,
158
+ "description": "Slow suite is advisory: recorded, never gates the stop." }
159
+ ]
160
+ }
161
+ ```
162
+
163
+ Anything a program can decide, a check can gate: schema conformance, row
164
+ counts, API health, diffs, wordcounts, link resolution. FleetProof's claim is
165
+ never that the predicate language is rich — it's that *whatever predicate you
166
+ choose runs outside the agent's process*.
167
+
168
+ Guidance that keeps the gate honest: keep blocking checks fast and
169
+ deterministic (flaky checks flap the gate; slow ones tax every stop) and demote
170
+ heavy suites to `block: false`. For fleets doing varied tasks in one repo,
171
+ the working convention is to have the agent author task-specific checks at task
172
+ start — authoring is a feature — and let the spec-drift flag make any later
173
+ revision loud. Per-task check scoping as a first-class mechanism is on the
174
+ roadmap.
175
+
176
+ ## Scope and limitations (v0.1)
177
+
178
+ This is an early release. Honest boundaries:
179
+
180
+ - **`python` must be on `PATH`.** The plugin hooks invoke the checker via
181
+ `python "${CLAUDE_PLUGIN_ROOT}/scripts/..."`. Environments where the interpreter
182
+ is only reachable as `python3`, or not on `PATH`, need a shim — any wrapper on
183
+ `PATH` named `python` works, e.g. `sudo ln -s $(which python3) /usr/local/bin/python`.
184
+ - **Checks are shell commands.** Their portability is your responsibility — a
185
+ check that shells out to `grep` won't behave identically on every OS. And
186
+ because a repo's `checks.json` runs shell commands on the Stop event, treat a
187
+ cloned repo's `checks.json` with the same trust you give its `Makefile` or
188
+ pre-commit config: it is executable code. FleetProof adds no network surface of
189
+ its own, and first-run consent-per-spec-hash is on the roadmap.
190
+ - **The gate is only as good as the checks.** FleetProof enforces that an
191
+ independent process runs your checks; it cannot know whether your checks capture
192
+ what "done" really means. Weak checks give false confidence.
193
+ - **An agent can weaken its own checks.** Authoring `checks.json` is a feature, so
194
+ nothing stops an agent from editing it mid-session to slip the gate. FleetProof
195
+ does not (yet) forbid spec edits; instead it records the SHA-256 of the spec on
196
+ every verdict and flags mid-session *spec drift* loudly — in the Stop-gate
197
+ output, the CLI, and the report — when a verdict's spec hash differs from the
198
+ session's first. Drift does not by itself block a passing verdict in v0.1; spec
199
+ pinning and consent-on-change are on the roadmap.
200
+ - **Fail-open when unconfigured.** With no `.fleetproof/checks.json`, the Stop hook
201
+ does nothing (and says so on stderr) rather than blocking every task. A missing
202
+ spec is not a passing grade — it is an absent one.
203
+ - **Blocking can repeat.** If a blocking check keeps failing, the Stop hook keeps
204
+ blocking. That is intended (don't stop on a false done), but it means a check
205
+ that can never pass needs operator intervention.
206
+
207
+ ## FleetProof for teams (coming — waitlist open)
208
+
209
+ The plugin verifies one machine. The hosted tier turns those local verdicts into
210
+ shared, durable evidence chains, team approval queues for gating agent
211
+ work a human signs off on, and a compliance export a non-engineer can
212
+ inspect — relevant as EU AI Act Article 14 human-oversight obligations become
213
+ enforceable (2026-08-02).
214
+
215
+ **[Join the waitlist →](https://forms.gle/FcuBTYyoV4x2z8Hm8)** — and tell us
216
+ which piece you'd want first.
217
+
218
+ The free plugin never sends anything anywhere: no telemetry, no network calls in
219
+ the runtime, your run data stays on your disk. The hosted tier is opt-in and
220
+ separate.
221
+
222
+ ## Development
223
+
224
+ ```
225
+ pip install -e ".[dev]"
226
+ python -m pytest -q
227
+ ```
228
+
229
+ ## License
230
+
231
+ MIT. Author: Gathrazio.
@@ -0,0 +1,210 @@
1
+ # FleetProof
2
+
3
+ Independent, out-of-band verification for agent fleets — *what did my agents actually do, and what did they claim was done when it wasn't?*
4
+
5
+ FleetProof is a Claude Code plugin plus a small stdlib-only Python package. It
6
+ records what your agents do to a durable run log, and — critically — grades that
7
+ work with a checker that runs in a separate process from the agent that did
8
+ it. An agent may author the checks; it never executes and grades its own work.
9
+
10
+ ## Why this exists
11
+
12
+ The failure mode this targets is the false "done": an agent reports a task
13
+ complete when it isn't. A recent characterization study
14
+ ([arXiv:2606.09863](https://arxiv.org/abs/2606.09863)) measured it directly:
15
+ 45–48% of failures in single-control tau2-bench domains are exactly this —
16
+ the agent confidently claims success. Among self-assessing coding-agent
17
+ trajectories on AppWorld, it's 75.8%. And in the study's one *dual-control*
18
+ setting — where a second, independent control point contradicts the agent's
19
+ claims — false success collapses to 3%.
20
+
21
+ FleetProof is built on that comparison: it gives any repo a second, independent
22
+ control point. (To be precise: the 3% is a measured property of that
23
+ benchmark setting, not a measured result of installing this tool — the study
24
+ motivates the design; it didn't test it.)
25
+
26
+ The word doing the work there is *independent*. A verifier that is the same agent
27
+ (or a sub-agent prompted by it) inherits the same blind spots and the same
28
+ incentive to declare victory. The only way to escape that is to move verification
29
+ out of the agent's own process and make it deterministic. That is the entire
30
+ design of FleetProof:
31
+
32
+ - the agent writes the run records and authors `checks.json`;
33
+ - a different process — the plugin's Stop hook, a `type: "command"` hook,
34
+ never an LLM — executes those checks and grades them;
35
+ - if a blocking check fails, the hook returns `{"decision": "block", ...}` and
36
+ Claude Code refuses to let the agent stop on the false "done".
37
+
38
+ No language model sits in the grading path. Grading is comparison.
39
+
40
+ > Verifying one machine is free, forever. A hosted team tier — shared
41
+ > evidence chains, approval queues, compliance export — is coming:
42
+ > [join the waitlist](https://forms.gle/FcuBTYyoV4x2z8Hm8).
43
+
44
+ ## What's in the box
45
+
46
+ | Piece | What it does |
47
+ |---|---|
48
+ | `@recorded` / `record()` | Durable per-invocation run records under `.fleetproof/runs/`. |
49
+ | `fleetproof check` | The independent checker: runs each declared check in its own subprocess, records the verdict. |
50
+ | Stop hook | Runs the checker when an agent claims done; blocks on a blocking-check failure. |
51
+ | PostToolUse hook | Accretes a per-tool evidence trail into the run log. |
52
+ | `fleetproof report` | One self-contained HTML file: per run, claimed-done vs. independently-verified. |
53
+
54
+ Runtime dependencies: none (Python standard library only). A tool whose job is
55
+ being trustworthy should add as little dependency and supply-chain surface as it can.
56
+
57
+ ## Install (each line is one command in Claude Code)
58
+
59
+ ```
60
+ /plugin marketplace add Gathrazio/fleetproof
61
+ /plugin install fleetproof@fleetproof
62
+ ```
63
+
64
+ Then install the Python package so the CLI and hooks can run:
65
+
66
+ ```
67
+ pip install fleetproof
68
+ ```
69
+
70
+ Requires Python 3.10+. The plugin's hook commands invoke `python`, so `python`
71
+ must be on your `PATH` (see *Scope and limitations*).
72
+
73
+ ## 10-minute quickstart
74
+
75
+ 1. Install the plugin and the package (three commands above).
76
+ 2. Declare what "done" means for your repo:
77
+ ```
78
+ fleetproof init
79
+ ```
80
+ This writes a starter `.fleetproof/checks.json`. Edit it — each entry is
81
+ `{ "id", "run", "expect", "block" }`:
82
+ ```json
83
+ {
84
+ "checks": [
85
+ { "id": "tests-pass", "run": "python -m pytest -q", "expect": "exit0", "block": true },
86
+ { "id": "artifact-built", "expect": { "file_exists": "dist/app.zip" }, "block": true }
87
+ ]
88
+ }
89
+ ```
90
+ `expect` is one of `"exit0"`, `{ "exit": N }`, `{ "regex": "..." }`, or
91
+ `{ "file_exists": "path" }`. `block: true` gates "done"; `block: false` is advisory.
92
+ 3. Run any Claude Code agent task as usual. When it claims done, the Stop hook
93
+ runs `fleetproof check` in its own process. If a blocking check fails, Claude is
94
+ blocked from stopping and told exactly which check disagreed.
95
+ 4. See what actually happened:
96
+ ```
97
+ fleetproof list # runs, newest first
98
+ fleetproof report # writes .fleetproof/fleetproof-report.html
99
+ ```
100
+ The report marks each run *verified*, *contradicted* (claimed done, but a
101
+ blocking check failed), or *unverified* (no out-of-band verdict on record).
102
+
103
+ You can also run the checker yourself at any time — `fleetproof check` — or on
104
+ demand via the bundled `/fleetproof:verify-fleet` skill.
105
+
106
+ ## The check-spec format
107
+
108
+ `.fleetproof/checks.json` is deliberately small and declarative. It is a contract
109
+ you (or an agent, under your review) write *before* work is graded, kept in the
110
+ repo where it is versioned and diffable. JSON, not YAML, on purpose: there is no
111
+ third-party parser in the runtime.
112
+
113
+ An agent is welcome to propose or edit checks. The guarantee FleetProof makes is
114
+ narrower and firmer than "the agent verified its work": it is that *something
115
+ other than the agent* ran the checks and recorded the result.
116
+
117
+ ## Writing richer checks
118
+
119
+ The grading vocabulary is deliberately small — exit codes, a regex, a file
120
+ existing — but `run` is an arbitrary command, so the *predicate* can be any
121
+ program. The pattern: encode "done" as a script that exits non-zero when it
122
+ isn't, and let FleetProof gate on the exit code.
123
+
124
+ ```json
125
+ {
126
+ "checks": [
127
+ { "id": "dataset-valid",
128
+ "run": "python scripts/validate_dataset.py out/rows.csv --min-rows 1000",
129
+ "expect": "exit0", "block": true,
130
+ "description": "Output CSV exists, parses, has >=1000 rows, no nulls in key columns." },
131
+ { "id": "citations-resolve",
132
+ "run": "python scripts/check_links.py report/draft.md",
133
+ "expect": "exit0", "block": true },
134
+ { "id": "full-suite-advisory",
135
+ "run": "python -m pytest tests/slow -q",
136
+ "expect": "exit0", "block": false,
137
+ "description": "Slow suite is advisory: recorded, never gates the stop." }
138
+ ]
139
+ }
140
+ ```
141
+
142
+ Anything a program can decide, a check can gate: schema conformance, row
143
+ counts, API health, diffs, wordcounts, link resolution. FleetProof's claim is
144
+ never that the predicate language is rich — it's that *whatever predicate you
145
+ choose runs outside the agent's process*.
146
+
147
+ Guidance that keeps the gate honest: keep blocking checks fast and
148
+ deterministic (flaky checks flap the gate; slow ones tax every stop) and demote
149
+ heavy suites to `block: false`. For fleets doing varied tasks in one repo,
150
+ the working convention is to have the agent author task-specific checks at task
151
+ start — authoring is a feature — and let the spec-drift flag make any later
152
+ revision loud. Per-task check scoping as a first-class mechanism is on the
153
+ roadmap.
154
+
155
+ ## Scope and limitations (v0.1)
156
+
157
+ This is an early release. Honest boundaries:
158
+
159
+ - **`python` must be on `PATH`.** The plugin hooks invoke the checker via
160
+ `python "${CLAUDE_PLUGIN_ROOT}/scripts/..."`. Environments where the interpreter
161
+ is only reachable as `python3`, or not on `PATH`, need a shim — any wrapper on
162
+ `PATH` named `python` works, e.g. `sudo ln -s $(which python3) /usr/local/bin/python`.
163
+ - **Checks are shell commands.** Their portability is your responsibility — a
164
+ check that shells out to `grep` won't behave identically on every OS. And
165
+ because a repo's `checks.json` runs shell commands on the Stop event, treat a
166
+ cloned repo's `checks.json` with the same trust you give its `Makefile` or
167
+ pre-commit config: it is executable code. FleetProof adds no network surface of
168
+ its own, and first-run consent-per-spec-hash is on the roadmap.
169
+ - **The gate is only as good as the checks.** FleetProof enforces that an
170
+ independent process runs your checks; it cannot know whether your checks capture
171
+ what "done" really means. Weak checks give false confidence.
172
+ - **An agent can weaken its own checks.** Authoring `checks.json` is a feature, so
173
+ nothing stops an agent from editing it mid-session to slip the gate. FleetProof
174
+ does not (yet) forbid spec edits; instead it records the SHA-256 of the spec on
175
+ every verdict and flags mid-session *spec drift* loudly — in the Stop-gate
176
+ output, the CLI, and the report — when a verdict's spec hash differs from the
177
+ session's first. Drift does not by itself block a passing verdict in v0.1; spec
178
+ pinning and consent-on-change are on the roadmap.
179
+ - **Fail-open when unconfigured.** With no `.fleetproof/checks.json`, the Stop hook
180
+ does nothing (and says so on stderr) rather than blocking every task. A missing
181
+ spec is not a passing grade — it is an absent one.
182
+ - **Blocking can repeat.** If a blocking check keeps failing, the Stop hook keeps
183
+ blocking. That is intended (don't stop on a false done), but it means a check
184
+ that can never pass needs operator intervention.
185
+
186
+ ## FleetProof for teams (coming — waitlist open)
187
+
188
+ The plugin verifies one machine. The hosted tier turns those local verdicts into
189
+ shared, durable evidence chains, team approval queues for gating agent
190
+ work a human signs off on, and a compliance export a non-engineer can
191
+ inspect — relevant as EU AI Act Article 14 human-oversight obligations become
192
+ enforceable (2026-08-02).
193
+
194
+ **[Join the waitlist →](https://forms.gle/FcuBTYyoV4x2z8Hm8)** — and tell us
195
+ which piece you'd want first.
196
+
197
+ The free plugin never sends anything anywhere: no telemetry, no network calls in
198
+ the runtime, your run data stays on your disk. The hosted tier is opt-in and
199
+ separate.
200
+
201
+ ## Development
202
+
203
+ ```
204
+ pip install -e ".[dev]"
205
+ python -m pytest -q
206
+ ```
207
+
208
+ ## License
209
+
210
+ MIT. Author: Gathrazio.
@@ -0,0 +1,40 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "fleetproof"
7
+ version = "0.1.0"
8
+ description = "Independent, out-of-band verification for agent fleets."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { text = "MIT" }
12
+ authors = [{ name = "Gathrazio" }]
13
+ keywords = ["agents", "verification", "claude-code", "audit", "run-log"]
14
+ classifiers = [
15
+ "Development Status :: 3 - Alpha",
16
+ "Intended Audience :: Developers",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Programming Language :: Python :: 3",
19
+ "Topic :: Software Development :: Quality Assurance",
20
+ ]
21
+ # Runtime is stdlib-only on purpose: a verification tool should add as little
22
+ # dependency (and supply-chain) surface as it can get away with.
23
+ dependencies = []
24
+
25
+ [project.optional-dependencies]
26
+ dev = ["pytest>=7"]
27
+
28
+ [project.urls]
29
+ Homepage = "https://github.com/Gathrazio/fleetproof"
30
+ Repository = "https://github.com/Gathrazio/fleetproof"
31
+
32
+ [project.scripts]
33
+ fleetproof = "fleetproof.cli:main"
34
+
35
+ [tool.setuptools.packages.find]
36
+ where = ["src"]
37
+
38
+ [tool.pytest.ini_options]
39
+ testpaths = ["tests"]
40
+ pythonpath = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,46 @@
1
+ """FleetProof — independent, out-of-band verification for agent fleets.
2
+
3
+ The agent may author the checks; it never executes and grades its own work.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ __version__ = "0.1.0"
9
+
10
+ from .runlog import (
11
+ RunRecord,
12
+ SubInvocation,
13
+ child_run_id,
14
+ current_run_id,
15
+ list_run_records,
16
+ load_run,
17
+ project_root,
18
+ record,
19
+ recorded,
20
+ runs_dir,
21
+ set_runs_dir,
22
+ )
23
+ from .checks import Check, CheckSpecError, load_checks
24
+ from .checker import CheckReport, CheckResult, run_check, run_checks
25
+
26
+ __all__ = [
27
+ "__version__",
28
+ "recorded",
29
+ "record",
30
+ "current_run_id",
31
+ "child_run_id",
32
+ "project_root",
33
+ "runs_dir",
34
+ "set_runs_dir",
35
+ "list_run_records",
36
+ "load_run",
37
+ "RunRecord",
38
+ "SubInvocation",
39
+ "Check",
40
+ "CheckSpecError",
41
+ "load_checks",
42
+ "CheckReport",
43
+ "CheckResult",
44
+ "run_check",
45
+ "run_checks",
46
+ ]
@@ -0,0 +1,6 @@
1
+ """Allow ``python -m fleetproof`` as an alternative to the console script."""
2
+
3
+ from .cli import main
4
+
5
+ if __name__ == "__main__":
6
+ raise SystemExit(main())