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.
Files changed (98) hide show
  1. agentic_preflight-0.3.0/.gitignore +219 -0
  2. agentic_preflight-0.3.0/CHANGELOG.md +230 -0
  3. agentic_preflight-0.3.0/COMPATIBILITY.md +35 -0
  4. agentic_preflight-0.3.0/CONTRIBUTING.md +48 -0
  5. agentic_preflight-0.3.0/LICENSE +201 -0
  6. agentic_preflight-0.3.0/PKG-INFO +498 -0
  7. agentic_preflight-0.3.0/README.md +269 -0
  8. agentic_preflight-0.3.0/SECURITY.md +33 -0
  9. agentic_preflight-0.3.0/SUPPORT.md +16 -0
  10. agentic_preflight-0.3.0/agentic_preflight/__init__.py +0 -0
  11. agentic_preflight-0.3.0/agentic_preflight/__main__.py +4 -0
  12. agentic_preflight-0.3.0/agentic_preflight/approval.py +122 -0
  13. agentic_preflight-0.3.0/agentic_preflight/attestation.py +220 -0
  14. agentic_preflight-0.3.0/agentic_preflight/cli.py +600 -0
  15. agentic_preflight-0.3.0/agentic_preflight/config.py +277 -0
  16. agentic_preflight-0.3.0/agentic_preflight/dependencies.py +225 -0
  17. agentic_preflight-0.3.0/agentic_preflight/diff.py +267 -0
  18. agentic_preflight-0.3.0/agentic_preflight/envelope.py +125 -0
  19. agentic_preflight-0.3.0/agentic_preflight/errors.py +219 -0
  20. agentic_preflight-0.3.0/agentic_preflight/findings.py +161 -0
  21. agentic_preflight-0.3.0/agentic_preflight/gitx.py +353 -0
  22. agentic_preflight-0.3.0/agentic_preflight/hook.py +158 -0
  23. agentic_preflight-0.3.0/agentic_preflight/initcmd.py +141 -0
  24. agentic_preflight-0.3.0/agentic_preflight/integrations.py +490 -0
  25. agentic_preflight-0.3.0/agentic_preflight/machine.py +356 -0
  26. agentic_preflight-0.3.0/agentic_preflight/mergeback.py +158 -0
  27. agentic_preflight-0.3.0/agentic_preflight/models.py +322 -0
  28. agentic_preflight-0.3.0/agentic_preflight/publish/__init__.py +0 -0
  29. agentic_preflight-0.3.0/agentic_preflight/publish/gate.py +52 -0
  30. agentic_preflight-0.3.0/agentic_preflight/py.typed +0 -0
  31. agentic_preflight-0.3.0/agentic_preflight/risk.py +146 -0
  32. agentic_preflight-0.3.0/agentic_preflight/runs/__init__.py +38 -0
  33. agentic_preflight-0.3.0/agentic_preflight/runs/_session.py +206 -0
  34. agentic_preflight-0.3.0/agentic_preflight/runs/lifecycle.py +304 -0
  35. agentic_preflight-0.3.0/agentic_preflight/runs/mergeback.py +234 -0
  36. agentic_preflight-0.3.0/agentic_preflight/runs/publish.py +226 -0
  37. agentic_preflight-0.3.0/agentic_preflight/runs/resolve.py +238 -0
  38. agentic_preflight-0.3.0/agentic_preflight/runs/review.py +763 -0
  39. agentic_preflight-0.3.0/agentic_preflight/runs/stages.py +400 -0
  40. agentic_preflight-0.3.0/agentic_preflight/runs/start.py +413 -0
  41. agentic_preflight-0.3.0/agentic_preflight/runtime.py +299 -0
  42. agentic_preflight-0.3.0/agentic_preflight/stages/__init__.py +0 -0
  43. agentic_preflight-0.3.0/agentic_preflight/stages/change_scope.py +57 -0
  44. agentic_preflight-0.3.0/agentic_preflight/stages/detect.py +116 -0
  45. agentic_preflight-0.3.0/agentic_preflight/stages/docs.py +154 -0
  46. agentic_preflight-0.3.0/agentic_preflight/stages/shellstage.py +244 -0
  47. agentic_preflight-0.3.0/agentic_preflight/store.py +276 -0
  48. agentic_preflight-0.3.0/agentic_preflight/sync.py +119 -0
  49. agentic_preflight-0.3.0/agentic_preflight/worktree.py +289 -0
  50. agentic_preflight-0.3.0/docs/RELEASING.md +101 -0
  51. agentic_preflight-0.3.0/docs/attestations-and-ci.md +92 -0
  52. agentic_preflight-0.3.0/docs/change-scope.md +29 -0
  53. agentic_preflight-0.3.0/docs/configuration.md +235 -0
  54. agentic_preflight-0.3.0/docs/installation.md +88 -0
  55. agentic_preflight-0.3.0/docs/limits.md +77 -0
  56. agentic_preflight-0.3.0/docs/pre-push-hook.md +36 -0
  57. agentic_preflight-0.3.0/docs/worktree-modes.md +112 -0
  58. agentic_preflight-0.3.0/install.sh +33 -0
  59. agentic_preflight-0.3.0/pyproject.toml +135 -0
  60. agentic_preflight-0.3.0/skill/SKILL.md +400 -0
  61. agentic_preflight-0.3.0/skill/reference/commands.md +294 -0
  62. agentic_preflight-0.3.0/skill/reference/docs-rubric.md +88 -0
  63. agentic_preflight-0.3.0/skill/reference/findings-schema.md +102 -0
  64. agentic_preflight-0.3.0/tests/conftest.py +97 -0
  65. agentic_preflight-0.3.0/tests/driver.py +118 -0
  66. agentic_preflight-0.3.0/tests/test_approval.py +304 -0
  67. agentic_preflight-0.3.0/tests/test_change_scope.py +29 -0
  68. agentic_preflight-0.3.0/tests/test_cli_m0.py +471 -0
  69. agentic_preflight-0.3.0/tests/test_cli_m1.py +431 -0
  70. agentic_preflight-0.3.0/tests/test_config.py +203 -0
  71. agentic_preflight-0.3.0/tests/test_dependencies.py +137 -0
  72. agentic_preflight-0.3.0/tests/test_diff.py +164 -0
  73. agentic_preflight-0.3.0/tests/test_docs_match_cli.py +224 -0
  74. agentic_preflight-0.3.0/tests/test_docs_stage.py +404 -0
  75. agentic_preflight-0.3.0/tests/test_end_to_end.py +228 -0
  76. agentic_preflight-0.3.0/tests/test_envelope.py +111 -0
  77. agentic_preflight-0.3.0/tests/test_findings.py +219 -0
  78. agentic_preflight-0.3.0/tests/test_gitx.py +114 -0
  79. agentic_preflight-0.3.0/tests/test_governance.py +51 -0
  80. agentic_preflight-0.3.0/tests/test_hook.py +449 -0
  81. agentic_preflight-0.3.0/tests/test_install_script.py +180 -0
  82. agentic_preflight-0.3.0/tests/test_integrations.py +333 -0
  83. agentic_preflight-0.3.0/tests/test_invariants.py +75 -0
  84. agentic_preflight-0.3.0/tests/test_machine.py +95 -0
  85. agentic_preflight-0.3.0/tests/test_machine_properties.py +164 -0
  86. agentic_preflight-0.3.0/tests/test_mergeback.py +382 -0
  87. agentic_preflight-0.3.0/tests/test_models.py +193 -0
  88. agentic_preflight-0.3.0/tests/test_publish.py +289 -0
  89. agentic_preflight-0.3.0/tests/test_rebase_tolerance.py +169 -0
  90. agentic_preflight-0.3.0/tests/test_review_executor.py +208 -0
  91. agentic_preflight-0.3.0/tests/test_risk.py +156 -0
  92. agentic_preflight-0.3.0/tests/test_runtime.py +129 -0
  93. agentic_preflight-0.3.0/tests/test_shell_stages.py +527 -0
  94. agentic_preflight-0.3.0/tests/test_stage_detection.py +48 -0
  95. agentic_preflight-0.3.0/tests/test_store.py +143 -0
  96. agentic_preflight-0.3.0/tests/test_sync.py +167 -0
  97. agentic_preflight-0.3.0/tests/test_worktree.py +154 -0
  98. 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.