agentic-preflight 0.3.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.
- agentic_preflight-0.3.0/.gitignore +219 -0
- agentic_preflight-0.3.0/CHANGELOG.md +230 -0
- agentic_preflight-0.3.0/COMPATIBILITY.md +35 -0
- agentic_preflight-0.3.0/CONTRIBUTING.md +48 -0
- agentic_preflight-0.3.0/LICENSE +201 -0
- agentic_preflight-0.3.0/PKG-INFO +498 -0
- agentic_preflight-0.3.0/README.md +269 -0
- agentic_preflight-0.3.0/SECURITY.md +33 -0
- agentic_preflight-0.3.0/SUPPORT.md +16 -0
- agentic_preflight-0.3.0/agentic_preflight/__init__.py +0 -0
- agentic_preflight-0.3.0/agentic_preflight/__main__.py +4 -0
- agentic_preflight-0.3.0/agentic_preflight/approval.py +122 -0
- agentic_preflight-0.3.0/agentic_preflight/attestation.py +220 -0
- agentic_preflight-0.3.0/agentic_preflight/cli.py +600 -0
- agentic_preflight-0.3.0/agentic_preflight/config.py +277 -0
- agentic_preflight-0.3.0/agentic_preflight/dependencies.py +225 -0
- agentic_preflight-0.3.0/agentic_preflight/diff.py +267 -0
- agentic_preflight-0.3.0/agentic_preflight/envelope.py +125 -0
- agentic_preflight-0.3.0/agentic_preflight/errors.py +219 -0
- agentic_preflight-0.3.0/agentic_preflight/findings.py +161 -0
- agentic_preflight-0.3.0/agentic_preflight/gitx.py +353 -0
- agentic_preflight-0.3.0/agentic_preflight/hook.py +158 -0
- agentic_preflight-0.3.0/agentic_preflight/initcmd.py +141 -0
- agentic_preflight-0.3.0/agentic_preflight/integrations.py +490 -0
- agentic_preflight-0.3.0/agentic_preflight/machine.py +356 -0
- agentic_preflight-0.3.0/agentic_preflight/mergeback.py +158 -0
- agentic_preflight-0.3.0/agentic_preflight/models.py +322 -0
- agentic_preflight-0.3.0/agentic_preflight/publish/__init__.py +0 -0
- agentic_preflight-0.3.0/agentic_preflight/publish/gate.py +52 -0
- agentic_preflight-0.3.0/agentic_preflight/py.typed +0 -0
- agentic_preflight-0.3.0/agentic_preflight/risk.py +146 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/__init__.py +38 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/_session.py +206 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/lifecycle.py +304 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/mergeback.py +234 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/publish.py +226 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/resolve.py +238 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/review.py +763 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/stages.py +400 -0
- agentic_preflight-0.3.0/agentic_preflight/runs/start.py +413 -0
- agentic_preflight-0.3.0/agentic_preflight/runtime.py +299 -0
- agentic_preflight-0.3.0/agentic_preflight/stages/__init__.py +0 -0
- agentic_preflight-0.3.0/agentic_preflight/stages/change_scope.py +57 -0
- agentic_preflight-0.3.0/agentic_preflight/stages/detect.py +116 -0
- agentic_preflight-0.3.0/agentic_preflight/stages/docs.py +154 -0
- agentic_preflight-0.3.0/agentic_preflight/stages/shellstage.py +244 -0
- agentic_preflight-0.3.0/agentic_preflight/store.py +276 -0
- agentic_preflight-0.3.0/agentic_preflight/sync.py +119 -0
- agentic_preflight-0.3.0/agentic_preflight/worktree.py +289 -0
- agentic_preflight-0.3.0/docs/RELEASING.md +101 -0
- agentic_preflight-0.3.0/docs/attestations-and-ci.md +92 -0
- agentic_preflight-0.3.0/docs/change-scope.md +29 -0
- agentic_preflight-0.3.0/docs/configuration.md +235 -0
- agentic_preflight-0.3.0/docs/installation.md +88 -0
- agentic_preflight-0.3.0/docs/limits.md +77 -0
- agentic_preflight-0.3.0/docs/pre-push-hook.md +36 -0
- agentic_preflight-0.3.0/docs/worktree-modes.md +112 -0
- agentic_preflight-0.3.0/install.sh +33 -0
- agentic_preflight-0.3.0/pyproject.toml +135 -0
- agentic_preflight-0.3.0/skill/SKILL.md +400 -0
- agentic_preflight-0.3.0/skill/reference/commands.md +294 -0
- agentic_preflight-0.3.0/skill/reference/docs-rubric.md +88 -0
- agentic_preflight-0.3.0/skill/reference/findings-schema.md +102 -0
- agentic_preflight-0.3.0/tests/conftest.py +97 -0
- agentic_preflight-0.3.0/tests/driver.py +118 -0
- agentic_preflight-0.3.0/tests/test_approval.py +304 -0
- agentic_preflight-0.3.0/tests/test_change_scope.py +29 -0
- agentic_preflight-0.3.0/tests/test_cli_m0.py +471 -0
- agentic_preflight-0.3.0/tests/test_cli_m1.py +431 -0
- agentic_preflight-0.3.0/tests/test_config.py +203 -0
- agentic_preflight-0.3.0/tests/test_dependencies.py +137 -0
- agentic_preflight-0.3.0/tests/test_diff.py +164 -0
- agentic_preflight-0.3.0/tests/test_docs_match_cli.py +224 -0
- agentic_preflight-0.3.0/tests/test_docs_stage.py +404 -0
- agentic_preflight-0.3.0/tests/test_end_to_end.py +228 -0
- agentic_preflight-0.3.0/tests/test_envelope.py +111 -0
- agentic_preflight-0.3.0/tests/test_findings.py +219 -0
- agentic_preflight-0.3.0/tests/test_gitx.py +114 -0
- agentic_preflight-0.3.0/tests/test_governance.py +51 -0
- agentic_preflight-0.3.0/tests/test_hook.py +449 -0
- agentic_preflight-0.3.0/tests/test_install_script.py +180 -0
- agentic_preflight-0.3.0/tests/test_integrations.py +333 -0
- agentic_preflight-0.3.0/tests/test_invariants.py +75 -0
- agentic_preflight-0.3.0/tests/test_machine.py +95 -0
- agentic_preflight-0.3.0/tests/test_machine_properties.py +164 -0
- agentic_preflight-0.3.0/tests/test_mergeback.py +382 -0
- agentic_preflight-0.3.0/tests/test_models.py +193 -0
- agentic_preflight-0.3.0/tests/test_publish.py +289 -0
- agentic_preflight-0.3.0/tests/test_rebase_tolerance.py +169 -0
- agentic_preflight-0.3.0/tests/test_review_executor.py +208 -0
- agentic_preflight-0.3.0/tests/test_risk.py +156 -0
- agentic_preflight-0.3.0/tests/test_runtime.py +129 -0
- agentic_preflight-0.3.0/tests/test_shell_stages.py +527 -0
- agentic_preflight-0.3.0/tests/test_stage_detection.py +48 -0
- agentic_preflight-0.3.0/tests/test_store.py +143 -0
- agentic_preflight-0.3.0/tests/test_sync.py +167 -0
- agentic_preflight-0.3.0/tests/test_worktree.py +154 -0
- agentic_preflight-0.3.0/uninstall.sh +82 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
# Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
# poetry.lock
|
|
109
|
+
# poetry.toml
|
|
110
|
+
|
|
111
|
+
# pdm
|
|
112
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
113
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
114
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
115
|
+
# pdm.lock
|
|
116
|
+
# pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# pixi
|
|
121
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
122
|
+
# pixi.lock
|
|
123
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
124
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
125
|
+
.pixi
|
|
126
|
+
|
|
127
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
128
|
+
__pypackages__/
|
|
129
|
+
|
|
130
|
+
# Celery stuff
|
|
131
|
+
celerybeat-schedule
|
|
132
|
+
celerybeat.pid
|
|
133
|
+
|
|
134
|
+
# Redis
|
|
135
|
+
*.rdb
|
|
136
|
+
*.aof
|
|
137
|
+
*.pid
|
|
138
|
+
|
|
139
|
+
# RabbitMQ
|
|
140
|
+
mnesia/
|
|
141
|
+
rabbitmq/
|
|
142
|
+
rabbitmq-data/
|
|
143
|
+
|
|
144
|
+
# ActiveMQ
|
|
145
|
+
activemq-data/
|
|
146
|
+
|
|
147
|
+
# SageMath parsed files
|
|
148
|
+
*.sage.py
|
|
149
|
+
|
|
150
|
+
# Environments
|
|
151
|
+
.env
|
|
152
|
+
.envrc
|
|
153
|
+
.venv
|
|
154
|
+
env/
|
|
155
|
+
venv/
|
|
156
|
+
ENV/
|
|
157
|
+
env.bak/
|
|
158
|
+
venv.bak/
|
|
159
|
+
|
|
160
|
+
# Spyder project settings
|
|
161
|
+
.spyderproject
|
|
162
|
+
.spyproject
|
|
163
|
+
|
|
164
|
+
# Rope project settings
|
|
165
|
+
.ropeproject
|
|
166
|
+
|
|
167
|
+
# mkdocs documentation
|
|
168
|
+
/site
|
|
169
|
+
|
|
170
|
+
# mypy
|
|
171
|
+
.mypy_cache/
|
|
172
|
+
.dmypy.json
|
|
173
|
+
dmypy.json
|
|
174
|
+
|
|
175
|
+
# Pyre type checker
|
|
176
|
+
.pyre/
|
|
177
|
+
|
|
178
|
+
# pytype static type analyzer
|
|
179
|
+
.pytype/
|
|
180
|
+
|
|
181
|
+
# Cython debug symbols
|
|
182
|
+
cython_debug/
|
|
183
|
+
|
|
184
|
+
# PyCharm
|
|
185
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
186
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
187
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
188
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
189
|
+
# .idea/
|
|
190
|
+
|
|
191
|
+
# Abstra
|
|
192
|
+
# Abstra is an AI-powered process automation framework.
|
|
193
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
194
|
+
# Learn more at https://abstra.io/docs
|
|
195
|
+
.abstra/
|
|
196
|
+
|
|
197
|
+
# Visual Studio Code
|
|
198
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
199
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
200
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
201
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
202
|
+
# .vscode/
|
|
203
|
+
# Temporary file for partial code execution
|
|
204
|
+
tempCodeRunnerFile.py
|
|
205
|
+
|
|
206
|
+
# Ruff stuff:
|
|
207
|
+
.ruff_cache/
|
|
208
|
+
|
|
209
|
+
# PyPI configuration file
|
|
210
|
+
.pypirc
|
|
211
|
+
|
|
212
|
+
# Marimo
|
|
213
|
+
marimo/_static/
|
|
214
|
+
marimo/_lsp/
|
|
215
|
+
__marimo__/
|
|
216
|
+
|
|
217
|
+
# Streamlit
|
|
218
|
+
.streamlit/secrets.toml
|
|
219
|
+
.DS_Store
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Agentic Preflight are documented here. This project follows
|
|
4
|
+
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
5
|
+
|
|
6
|
+
## Unreleased
|
|
7
|
+
|
|
8
|
+
## [0.3.0] - 2026-08-12
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Supply-chain maintenance and verification: Dependabot updates Python and GitHub
|
|
13
|
+
Actions dependencies, locked runtime dependencies are audited for published
|
|
14
|
+
vulnerabilities, CodeQL performs Python static analysis, and release artifacts ship
|
|
15
|
+
with a CycloneDX SBOM plus signed build-provenance and SBOM attestations.
|
|
16
|
+
- A compatibility policy and Monday/Thursday regression coverage for the oldest
|
|
17
|
+
supported boundary, macOS 15 with Python 3.11. Pull-request CI remains the fast
|
|
18
|
+
Ubuntu/Python 3.13 combination, while manual and release runs retain the broad
|
|
19
|
+
six-way matrix.
|
|
20
|
+
|
|
21
|
+
- Configurable, attestable review independence. `[review] executor = "command"` runs an
|
|
22
|
+
external reviewer over the same complete bundle returned by `context`, while
|
|
23
|
+
`require_command_for` can require that executor for selected risk levels. Command
|
|
24
|
+
failures have bounded, restart-safe retries, and attestation schema v3 records the
|
|
25
|
+
executor plus redacted command evidence.
|
|
26
|
+
|
|
27
|
+
- Snapshot-bound review coverage. `context` inventories every changed hunk plus
|
|
28
|
+
non-textual file changes; review submissions must assert examination of that exact
|
|
29
|
+
manifest, findings cite units, and code derives a complete cited/clean receipt.
|
|
30
|
+
Any repair commit invalidates coverage and reopens review before validation continues.
|
|
31
|
+
|
|
32
|
+
- Conservative rebase tolerance for in-place runs. `start` preserves a prior green
|
|
33
|
+
attestation only when the rewritten commit has an identical complete tree, effective
|
|
34
|
+
configuration, and clean Git merge result against the freshly synchronized base.
|
|
35
|
+
- Managed Agent Skill integrations for Cursor, opencode, and Amp, alongside Codex and
|
|
36
|
+
Claude Code.
|
|
37
|
+
|
|
38
|
+
- An idempotent `install.sh` for installing or updating the CLI and all managed agent
|
|
39
|
+
skill copies directly from a source checkout.
|
|
40
|
+
- A conservative `uninstall.sh` that pauses for per-repository
|
|
41
|
+
`agentic-preflight:uninstall` cleanup before removing managed user-scoped skills and
|
|
42
|
+
the CLI. Project cleanup removes configuration and managed hook logic while preserving
|
|
43
|
+
unrelated hooks, run history, and attestations.
|
|
44
|
+
- `[pr] mode = "auto" | "manual"`, defaulting to automatic pull-request creation after
|
|
45
|
+
the user approves the push gate. Manual PR mode leaves creation to the user and reports
|
|
46
|
+
a compare URL instead.
|
|
47
|
+
- `[approval] mode = "manual_merge" | "environment" | "peer_review"` for high-risk
|
|
48
|
+
pull requests. Manual merge is the default, Environment mode uses a configurable
|
|
49
|
+
GitHub Environment, and peer review retains the exact-head eligible-reviewer policy.
|
|
50
|
+
The trusted check rejects GitHub auto-merge while manual-merge mode is active.
|
|
51
|
+
- Deterministic path-based risk classification with separate low, medium, and high
|
|
52
|
+
levels. High risk invokes the configured merge-approval mode, while publication still
|
|
53
|
+
uses the normal confirmation-token gate. Risk remains separate from the diff byte
|
|
54
|
+
budget.
|
|
55
|
+
- A pull-request attestation job that runs the verifier from the protected base commit
|
|
56
|
+
and fetches attestations from same-repository branches or public forks. Governance
|
|
57
|
+
surfaces now have a checked-in CODEOWNERS policy.
|
|
58
|
+
- A trusted high-risk approval check that dispatches manual-merge, Environment, and peer
|
|
59
|
+
review modes. Peer review rejects bot, unaffiliated, self, stale-head, dismissed, and
|
|
60
|
+
superseded approvals.
|
|
61
|
+
- Green records are now portable Git-note attestations in
|
|
62
|
+
`refs/notes/agentic-preflight`. Lint and test evidence includes the exact command,
|
|
63
|
+
exit code, and SHA-256 of redacted captured output, and the normal push path sends
|
|
64
|
+
the branch and attestation ref atomically.
|
|
65
|
+
- `agentic-preflight verify <sha>` provides a fail-closed CI check for the note's
|
|
66
|
+
schema, exact commit/tree binding, complete stages, and shell-stage evidence.
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
|
|
70
|
+
- CI and release workflows now use `actions/checkout` 7.0.1,
|
|
71
|
+
`actions/upload-artifact` 7.0.1, `actions/download-artifact` 8.0.1, and
|
|
72
|
+
`pypa/gh-action-pypi-publish` 1.14.2. Development dependency floors now require
|
|
73
|
+
Hypothesis 6.165.2 and Ruff 0.16.2, with the lockfile updated accordingly.
|
|
74
|
+
|
|
75
|
+
- Dependabot version updates are grouped into one weekly Python dependency pull
|
|
76
|
+
request and one weekly GitHub Actions pull request, reducing preflight review and
|
|
77
|
+
attestation overhead without exempting bot-authored commits from the gate. The
|
|
78
|
+
attestation and CI guide documents how to attest the exact bot-authored commit and
|
|
79
|
+
re-run its hosted checks.
|
|
80
|
+
|
|
81
|
+
- The README now matches the 0.3.0 release surface, uses release-stable links when
|
|
82
|
+
rendered on PyPI, and keeps only the quickstart and core safety contract. Detailed
|
|
83
|
+
hook behavior, portable attestations and CI, configuration, and extended limitations
|
|
84
|
+
live in focused linked guides that are included in the source distribution.
|
|
85
|
+
- An explicit request to push, publish, or create/open a pull request now authorizes the
|
|
86
|
+
matching post-verification push. The gate still displays the exact remote, branch,
|
|
87
|
+
commits, and risk summary, but no longer forces a duplicate confirmation unless that
|
|
88
|
+
summary differs materially from what the user authorized.
|
|
89
|
+
- Code-owned mechanical findings now block regardless of reviewer severity policy, so
|
|
90
|
+
`[docs] require_changelog = true` cannot be silently weakened by excluding `high`
|
|
91
|
+
from `[docs] blocking_severities`.
|
|
92
|
+
- Local validation now runs review → docs → lint → test, leaving the potentially
|
|
93
|
+
expensive test command until all review, documentation, and mechanical lint repairs
|
|
94
|
+
are committed. A lint-only repair therefore cannot force an otherwise unnecessary
|
|
95
|
+
second test run; committed test repairs still invalidate docs and lint before retry.
|
|
96
|
+
- Pull requests and pushes to `main` now run one test combination, `ubuntu-latest` on
|
|
97
|
+
Python 3.13, rather than the full six-way matrix. The matrix of Ubuntu and macOS
|
|
98
|
+
against Python 3.11, 3.12, and 3.13 still runs on release tags, where it now gates
|
|
99
|
+
the PyPI upload, and on demand by running the CI workflow manually from the Actions
|
|
100
|
+
tab. Supported platforms and Python versions are unchanged; only the point at which
|
|
101
|
+
every combination is exercised has moved.
|
|
102
|
+
- The test matrix now lives in a single reusable workflow that both the CI and release
|
|
103
|
+
workflows call, rather than being copied into each. Contributors will see the test
|
|
104
|
+
checks reported under a nested name, `test / test (ubuntu-latest, py3.13)`.
|
|
105
|
+
- The packaged description now states what the tool does rather than what it omits. The
|
|
106
|
+
previous summary led with "Calls no LLM, ever", which is true of this package and
|
|
107
|
+
misleading about a run, in which every judgment is produced by a model. PyPI renders
|
|
108
|
+
that field as the project summary with none of the surrounding explanation, so it has
|
|
109
|
+
to stand on its own. The README intro keeps the underlying point in the form that
|
|
110
|
+
survives being read alone: no API key and no second model.
|
|
111
|
+
- The README now leads with what the tool does and defers the detail to linked pages.
|
|
112
|
+
Reference material that a first-time reader does not need moved into `docs/`:
|
|
113
|
+
`installation.md`, `change-scope.md`, `worktree-modes.md`, `configuration.md`, and
|
|
114
|
+
`limits.md`. The prior-art comparison moved below the technical sections, since it
|
|
115
|
+
answers a question a reader has not yet asked. No documented behaviour changed, and
|
|
116
|
+
the configuration example stays in the README, where the test suite requires every
|
|
117
|
+
config section to appear.
|
|
118
|
+
- The `[diff] exclude` example now says that setting the key replaces the eight built-in
|
|
119
|
+
globs rather than extending them. The example lists four of the eight, so copying it
|
|
120
|
+
verbatim silently dropped `**/*.min.css`, `**/__snapshots__/**`, `**/*.pb.go`, and
|
|
121
|
+
`**/*_pb2.py`. The full default list is now in `docs/configuration.md`.
|
|
122
|
+
- The README now opens with a recorded demonstration of a run: a push blocked by the
|
|
123
|
+
pre-push hook, a review that catches an unguarded division by zero, the fix verified,
|
|
124
|
+
and the gate stopping to ask before pushing. The recording is real CLI output, and the
|
|
125
|
+
VHS tape that produces it is committed as `docs/demo.tape`, alongside
|
|
126
|
+
`docs/demo-fixture.sh`, which builds the throwaway repository the tape records
|
|
127
|
+
against. `./docs/demo-fixture.sh && vhs docs/demo.tape` regenerates the recording from
|
|
128
|
+
nothing, so the demonstration of a tool that verifies claims can itself be verified
|
|
129
|
+
rather than taken on trust.
|
|
130
|
+
|
|
131
|
+
### Removed
|
|
132
|
+
|
|
133
|
+
- The `ap` console-script alias. The supported executable is `agentic-preflight`.
|
|
134
|
+
- Built-in GitHub pull-request creation, CI monitoring, and destructive post-merge
|
|
135
|
+
cleanup. The skill now hands these host-level tasks to `gh`; the core retains the
|
|
136
|
+
quality gate, atomic branch-and-attestation push, `finish`, and `gc`.
|
|
137
|
+
- The `pr`, `ci`, and `cleanup` commands and their `[publish]` and `[ci]`
|
|
138
|
+
configuration sections.
|
|
139
|
+
- `docs/plans/` and the design document it held. It described the architecture as it was
|
|
140
|
+
being decided rather than as it now is, and the parts still worth reading have since
|
|
141
|
+
been said in the README and the `docs/` pages. It remains in git history.
|
|
142
|
+
|
|
143
|
+
### Fixed
|
|
144
|
+
|
|
145
|
+
- Cross-stage lint/test repair cycles preserve each stage's failed-attempt counter, so
|
|
146
|
+
alternating repairs cannot reset and evade the configured `max_attempts` stop.
|
|
147
|
+
- Attestation reuse now names both mandatory terminal outcomes: lint must be green and
|
|
148
|
+
test must be green or explicitly skipped.
|
|
149
|
+
|
|
150
|
+
- Synchronizing attestations now preserves locally-ahead and disjoint remote note
|
|
151
|
+
histories. A valid local attestation no longer makes the next preflight start fail
|
|
152
|
+
with a non-fast-forward fetch; conflicting notes for the same commit still fail loud.
|
|
153
|
+
- Manual CI runs are no longer cancelled by other CI activity. Every run on a ref
|
|
154
|
+
shared one concurrency group with `cancel-in-progress`, so a manual run of the full
|
|
155
|
+
matrix could be superseded by a push to `main` or by a second manual run. That is
|
|
156
|
+
the run the release process uses to check macOS and Python 3.11 and 3.12 before a
|
|
157
|
+
tag exists, and a cancelled run reports neither pass nor fail. Manual runs now get
|
|
158
|
+
a group of their own; pushes and pull requests still supersede older runs on the
|
|
159
|
+
same ref.
|
|
160
|
+
|
|
161
|
+
## [0.2.1] - 2026-07-28
|
|
162
|
+
|
|
163
|
+
First release published to PyPI.
|
|
164
|
+
|
|
165
|
+
### Added
|
|
166
|
+
|
|
167
|
+
- Tag-triggered release workflow that publishes to PyPI using Trusted Publishing, so
|
|
168
|
+
no long-lived API token is stored in the repository or in GitHub secrets. The upload
|
|
169
|
+
is bound to a `pypi` GitHub Environment and waits for reviewer approval, and the
|
|
170
|
+
build refuses to proceed when the pushed tag does not match the project version.
|
|
171
|
+
- `docs/RELEASING.md`, covering the one-time PyPI publisher registration, the GitHub
|
|
172
|
+
environment setup, and the per-release checklist.
|
|
173
|
+
- Community health files: `CONTRIBUTING.md`, `SECURITY.md`, `SUPPORT.md`, issue
|
|
174
|
+
templates, and a pull request template.
|
|
175
|
+
- Inline type information: the package now ships `py.typed`, so type checkers read its
|
|
176
|
+
annotations directly.
|
|
177
|
+
- A coverage badge produced and published by CI without a third-party service, and a
|
|
178
|
+
prior art section in the README.
|
|
179
|
+
|
|
180
|
+
### Changed
|
|
181
|
+
|
|
182
|
+
- Documentation-only and CI-configuration-only changes now record the software test
|
|
183
|
+
stage as explicitly skipped instead of requiring a test command to run.
|
|
184
|
+
- The skill now instructs a `git pull --ff-only` on the base branch after a confirmed
|
|
185
|
+
cleanup, so the source checkout matches the merged result.
|
|
186
|
+
- Attribution moved from the top of the README to a Credits section beside the license,
|
|
187
|
+
and the package author is now the GitHub handle rather than a legal name.
|
|
188
|
+
|
|
189
|
+
### Fixed
|
|
190
|
+
|
|
191
|
+
- Skipped GitHub checks are no longer treated as failures. A pull request whose
|
|
192
|
+
workflow correctly skips a job was previously reported as a CI failure.
|
|
193
|
+
- The source distribution is now built from an explicit allowlist. It previously
|
|
194
|
+
included everything not matched by the root `.gitignore`, which made the published
|
|
195
|
+
artifact depend on the contents of the local working tree and could fail the build
|
|
196
|
+
outright when a stray virtual environment was present.
|
|
197
|
+
|
|
198
|
+
## [0.2.0] - 2026-07-23
|
|
199
|
+
|
|
200
|
+
First tagged pre-release.
|
|
201
|
+
|
|
202
|
+
### Added
|
|
203
|
+
|
|
204
|
+
- Deterministic review, test, documentation, lint, merge-back, and push workflow.
|
|
205
|
+
- Advisory pre-push hook keyed to the exact verified commit.
|
|
206
|
+
- Manual gate mode for workflows where only a person may perform the final push.
|
|
207
|
+
- Codex and Claude Code skill installation.
|
|
208
|
+
- In-place, reusable, and strict validation checkout modes.
|
|
209
|
+
- GitHub pull request publishing and CI monitoring through the `gh` CLI.
|
|
210
|
+
- Explicit CI coverage for Python 3.11 through 3.13 on macOS and Linux.
|
|
211
|
+
|
|
212
|
+
### Changed
|
|
213
|
+
|
|
214
|
+
- Renamed every pre-release product surface from `agentic-cli` to
|
|
215
|
+
`agentic-preflight`, including the Python package, executable, skill, configuration,
|
|
216
|
+
state directories, and internal validation branch prefix.
|
|
217
|
+
- Reframed the product as an advisory guard against accidental unverified pushes.
|
|
218
|
+
- Added a 60-second README walkthrough with command output captured from a local demo.
|
|
219
|
+
|
|
220
|
+
### Supported platforms
|
|
221
|
+
|
|
222
|
+
- macOS
|
|
223
|
+
- Linux
|
|
224
|
+
|
|
225
|
+
Windows is not supported because the implementation requires `fcntl`, Bash, and POSIX
|
|
226
|
+
process groups.
|
|
227
|
+
|
|
228
|
+
[0.3.0]: https://github.com/elanthus/agentic-preflight/releases/tag/v0.3.0
|
|
229
|
+
[0.2.1]: https://github.com/elanthus/agentic-preflight/releases/tag/v0.2.1
|
|
230
|
+
[0.2.0]: https://github.com/elanthus/agentic-preflight/releases/tag/v0.2.0
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Compatibility policy
|
|
2
|
+
|
|
3
|
+
Agentic Preflight supports Python 3.11, 3.12, and 3.13 on macOS 15 or newer and on
|
|
4
|
+
Linux. Windows is not supported because the implementation requires Bash, `fcntl`, and
|
|
5
|
+
other POSIX behavior. Git 2.30 or newer is required.
|
|
6
|
+
|
|
7
|
+
## Validation tiers
|
|
8
|
+
|
|
9
|
+
The supported combinations receive different validation frequencies so pull-request
|
|
10
|
+
feedback stays fast:
|
|
11
|
+
|
|
12
|
+
- Pull requests and pushes to `main` run on `ubuntu-latest` with Python 3.13.
|
|
13
|
+
- A scheduled regression run covers the oldest supported boundary, macOS 15 with
|
|
14
|
+
Python 3.11, every Monday and Thursday.
|
|
15
|
+
- Manual CI runs and release tags cover Python 3.11, 3.12, and 3.13 on both
|
|
16
|
+
`ubuntu-latest` and `macos-latest`.
|
|
17
|
+
|
|
18
|
+
A platform is supported even when it is not in the pull-request job. A failure that is
|
|
19
|
+
specific to a supported combination is a release blocker and should be fixed with the
|
|
20
|
+
same priority as a pull-request CI failure.
|
|
21
|
+
|
|
22
|
+
Other POSIX systems and newer Python prereleases may work, but they are best effort
|
|
23
|
+
until they are added to the supported matrix. Successful installation on a version
|
|
24
|
+
outside the matrix does not make that version supported.
|
|
25
|
+
|
|
26
|
+
## Compatibility changes
|
|
27
|
+
|
|
28
|
+
The command-line interface, configuration file, attestation schema, and documented
|
|
29
|
+
Python API follow Semantic Versioning. During the current `0.x` series, incompatible
|
|
30
|
+
changes may ship in a minor release and will be called out in `CHANGELOG.md`.
|
|
31
|
+
|
|
32
|
+
Removing a Python or operating-system version should be announced in the changelog at
|
|
33
|
+
least one minor release in advance when practical. An upstream end-of-life or hosted
|
|
34
|
+
runner retirement may require a faster change; in that case the release notes must
|
|
35
|
+
identify the constraint and the last compatible Agentic Preflight release.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for helping improve Agentic Preflight. Bug reports, focused feature proposals,
|
|
4
|
+
documentation fixes, and code contributions are welcome.
|
|
5
|
+
|
|
6
|
+
## Before opening a change
|
|
7
|
+
|
|
8
|
+
- Search existing issues and pull requests to avoid duplicate work.
|
|
9
|
+
- Open an issue before a large behavioral change so the approach can be agreed first.
|
|
10
|
+
- Report vulnerabilities privately as described in [SECURITY.md](SECURITY.md), not in
|
|
11
|
+
a public issue.
|
|
12
|
+
|
|
13
|
+
## Development setup
|
|
14
|
+
|
|
15
|
+
Agentic Preflight supports the Python and operating-system combinations listed in
|
|
16
|
+
[COMPATIBILITY.md](COMPATIBILITY.md), Git 2.30 or newer, and `uv`.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
git clone https://github.com/elanthus/agentic-preflight.git
|
|
20
|
+
cd agentic-preflight
|
|
21
|
+
uv sync --group dev
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Run the same core checks used by CI:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
uv run ruff check agentic_preflight tests
|
|
28
|
+
uv run mypy agentic_preflight
|
|
29
|
+
uv run pytest --cov=agentic_preflight --cov-report=term-missing
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The test suite uses temporary real Git repositories. Tests that exercise pushes and
|
|
33
|
+
worktrees can take longer than ordinary unit tests and require a working Git binary.
|
|
34
|
+
|
|
35
|
+
## Pull requests
|
|
36
|
+
|
|
37
|
+
Keep changes focused and include tests for observable behavior. Update user-facing
|
|
38
|
+
documentation whenever a reader following the current instructions would otherwise be
|
|
39
|
+
wrong. In the pull request, explain the problem, the chosen approach, and the checks
|
|
40
|
+
you ran. All CI checks, including the 85% coverage floor and built-wheel smoke test,
|
|
41
|
+
must pass before merge.
|
|
42
|
+
|
|
43
|
+
Pull-request CI intentionally uses only Ubuntu and Python 3.13. The oldest supported
|
|
44
|
+
macOS/Python boundary runs every Monday and Thursday, and the broad six-way matrix runs
|
|
45
|
+
manually and on release tags; see [COMPATIBILITY.md](COMPATIBILITY.md).
|
|
46
|
+
|
|
47
|
+
By submitting a contribution, you agree that it is licensed under the repository's
|
|
48
|
+
Apache License 2.0.
|