agentflow-proof 1.1.1__tar.gz → 1.2.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.
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/CHANGELOG.md +88 -1
- {agentflow_proof-1.1.1/src/agentflow_proof.egg-info → agentflow_proof-1.2.0}/PKG-INFO +1 -1
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/pyproject.toml +1 -1
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/__init__.py +1 -1
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/cli.py +134 -91
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/cli_contract.py +14 -3
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/execution.py +10 -3
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/mcp_server.py +12 -3
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/porcelain.py +260 -82
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0/src/agentflow_proof.egg-info}/PKG-INFO +1 -1
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_execution_state.py +38 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_mcp_server.py +15 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_porcelain.py +1458 -1
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_stability_policy.py +35 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_stop_gate.py +70 -3
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/LICENSE +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/MANIFEST.in +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/README.md +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/setup.cfg +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/__main__.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/aggregate.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/artifacts.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/capabilities.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/contracts.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/coverage.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/draft_plan.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/events.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/execution_coverage.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/git.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/handoff.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/hunks.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/locks.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/packs.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/proof.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/receipts.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/recommend.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/review.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/review_runner.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/risk.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/runtime.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/stuck.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/validation.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/versioning.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/viewer.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow/workflow_contract.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow_proof.egg-info/SOURCES.txt +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow_proof.egg-info/dependency_links.txt +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow_proof.egg-info/entry_points.txt +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/src/agentflow_proof.egg-info/top_level.txt +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_aggregate.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_ai_kit.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_artifact_versioning.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_build_zipapp.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_capabilities.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_ci_proof_bundle.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_cli.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_config_contract.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_distribution.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_draft_plan.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_events.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_example_aggregation.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_example_mcp.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_example_workflow_pack.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_examples.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_execution_contract.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_execution_verification.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_handoff.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_hunks.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_lease_enforcement.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_lease_locking.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_packs.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_proof.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_proof_compatibility.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_public_project_contract.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_receipt_concurrency.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_receipts.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_recommend.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_release.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_review.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_review_runner.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_risk.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_runtime.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_schema_contracts.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_schema_soak.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_stuck.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_versioning.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_view_proof.py +0 -0
- {agentflow_proof-1.1.1 → agentflow_proof-1.2.0}/tests/test_workflow_contract.py +0 -0
|
@@ -7,6 +7,92 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.2.0] - 2026-10-29
|
|
11
|
+
|
|
12
|
+
Agentflow 1.2.0 shows why a run is stuck. `next-step --explain` reports why
|
|
13
|
+
no step is eligible (#71). `next-action` reports the blockers recorded with
|
|
14
|
+
`block-step` and `fail-step`, and the stop hook prints the current ones when it
|
|
15
|
+
refuses a stop (#72). `next-action` now answers only from the ledger rows it
|
|
16
|
+
validated, and agent-written ledger text reaches the terminal with
|
|
17
|
+
non-printable characters shown as `?`. Every change is additive under
|
|
18
|
+
`docs/stability.md`: a new flag, a new `next-action --json` key, new
|
|
19
|
+
`value_sets` codes in `docs/cli-contract.json` and an optional MCP input. No
|
|
20
|
+
artifact schema or schema-version constant changes.
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- `next-action --json` reports `recorded_blockers`. It has one entry per
|
|
25
|
+
attempt closed by `block-step` or `fail-step`, in ledger order, with
|
|
26
|
+
`step_id`, `attempt_id`, `event` (`blocked` or `failed`), `reason`,
|
|
27
|
+
`recorded_at`, `attempt_owner` and `superseded_by` (the first later attempt
|
|
28
|
+
of the same step, or `null` for a current blocker). It is derived from the
|
|
29
|
+
validated step ledger and absent for `uninitialized`, `plan_unlocked`,
|
|
30
|
+
`execution_uninitialized` and `state_invalid`. `state`, `blocking` and the
|
|
31
|
+
recovery actions are unchanged. The MCP `next_action` tool carries the field.
|
|
32
|
+
Human `next-action` output adds one `recorded blocker:` line per current
|
|
33
|
+
blocker, with control characters shown as `?` and the reason cut at 200
|
|
34
|
+
characters. (#72)
|
|
35
|
+
|
|
36
|
+
- `next-step --explain` reports why no step is eligible. With `--json` it
|
|
37
|
+
prints `{step, reason_code, diagnostics}`, where `reason_code` is
|
|
38
|
+
`eligible`, `dependencies_unmet`, `open_attempts` or `steps_complete`.
|
|
39
|
+
`steps_complete` requires that no attempt is open anywhere, amendments
|
|
40
|
+
included; it does not mean the run verifies (use `next-action`). With
|
|
41
|
+
`--explain`, an invalid plan, contract or ledger exits 1 instead of looking
|
|
42
|
+
like a finished run. Plain `next-step` and `next-step --json` are
|
|
43
|
+
unchanged. `docs/cli-contract.json` lists the codes in `value_sets`. MCP
|
|
44
|
+
`next_step` takes an optional `explain` input. (#71)
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- `hooks/stop-gate.sh` prints `agentflow next-action` (the next action and any
|
|
49
|
+
current recorded blocker) and a fixed line pointing to operator interruption
|
|
50
|
+
to stderr when it refuses a stop. Stdout and exit codes are unchanged, and a
|
|
51
|
+
recorded blocker still does not satisfy the gate. (#72)
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- `next-action` reduces step state and selects the eligible step from the
|
|
56
|
+
`.agent/step-runs.jsonl` rows it validates and derives `recorded_blockers`
|
|
57
|
+
from. It used to read the ledger again for both, so a row appended during
|
|
58
|
+
the call could change the step state or the step offered to claim without
|
|
59
|
+
passing validation. (#72 follow-up)
|
|
60
|
+
|
|
61
|
+
- `next-action` answers from that validated snapshot or not at all. The
|
|
62
|
+
amend, in-flight, run, drift and proof checks read `.agent/` again, so when
|
|
63
|
+
the step, command or file receipt ledgers no longer equal the validated read
|
|
64
|
+
it now reports `state_invalid` ("execution ledgers changed during
|
|
65
|
+
next-action; run it again") instead of an answer steered by a row that never
|
|
66
|
+
passed validation. Malformed or unreadable ledgers encountered by the
|
|
67
|
+
downstream checks produce the same diagnostic. A claim offer comes from the
|
|
68
|
+
snapshot alone and is unaffected. (#72 follow-up)
|
|
69
|
+
|
|
70
|
+
- Standard output of `events`, `next-action`, `next-step --explain`,
|
|
71
|
+
`finish-step`, `finish-run`, `verify-step`, `detect-stuck` and
|
|
72
|
+
`replay-gates` shows non-printable characters in agent-written ledger text
|
|
73
|
+
(reasons, agent, attempt and receipt ids, recorded argv, recorded paths) as
|
|
74
|
+
`?`, as the `recorded blocker:` lines already did, so ANSI escapes, line
|
|
75
|
+
breaks and bidi overrides written to `.agent/` no longer reach the terminal
|
|
76
|
+
through these commands. `events` cuts a reason at 200 characters. `--json`
|
|
77
|
+
and `--jsonl` output is unchanged. The next entry covers the remaining
|
|
78
|
+
human output and error messages. (#71 follow-up)
|
|
79
|
+
|
|
80
|
+
- Human output of `audit-drift`, `verify-run`, `build-proof`, `verify-proof`,
|
|
81
|
+
`status`, `doctor`, `runtime-status` and `lint-handoff`, the acknowledgement
|
|
82
|
+
lines of commands that write `.agent/` ledgers, and error messages on stderr
|
|
83
|
+
also show non-printable characters as `?`. So does that text where it is
|
|
84
|
+
captured: `finish-run --json` `diagnostics`, and MCP `content` text,
|
|
85
|
+
`structuredContent.stdout` and `structuredContent.stderr` (the `status`,
|
|
86
|
+
`audit_drift`, `build_proof` and `verify_proof` tools return human output,
|
|
87
|
+
and a failing tool returns its stderr), including the error text the MCP
|
|
88
|
+
server builds for an unexpected exception. The rendering is deliberately
|
|
89
|
+
lossy: tab, NBSP and ZWJ also become `?`, and a multi-line message such as
|
|
90
|
+
git's own stderr prints as one line. Gate output is sanitized before
|
|
91
|
+
`finish-run` splits it into lines, so a recorded line break no longer adds
|
|
92
|
+
`diagnostics` entries. Captured human text has no byte-stability guarantee.
|
|
93
|
+
JSON keys and types, raw values in other `--json` output and in `.agent/`
|
|
94
|
+
files, flags and exit codes are unchanged. (#71 follow-up)
|
|
95
|
+
|
|
10
96
|
## [1.1.1] - 2026-10-26
|
|
11
97
|
|
|
12
98
|
Agentflow 1.1.1 closes two gaps through which a step could complete, and a
|
|
@@ -261,7 +347,8 @@ repository, so this heading is intentionally unlinked._
|
|
|
261
347
|
|
|
262
348
|
- Existing v0.2 proof artifacts remain valid when no execution contract exists.
|
|
263
349
|
|
|
264
|
-
[Unreleased]: https://github.com/kstruzzieri/agentflow/compare/v1.
|
|
350
|
+
[Unreleased]: https://github.com/kstruzzieri/agentflow/compare/v1.2.0...HEAD
|
|
351
|
+
[1.2.0]: https://github.com/kstruzzieri/agentflow/compare/v1.1.1...v1.2.0
|
|
265
352
|
[1.1.1]: https://github.com/kstruzzieri/agentflow/compare/v1.1.0...v1.1.1
|
|
266
353
|
[1.1.0]: https://github.com/kstruzzieri/agentflow/compare/v1.0.0...v1.1.0
|
|
267
354
|
[1.0.0]: https://github.com/kstruzzieri/agentflow/releases/tag/v1.0.0
|