From 313001a134e38d44ddafc0309d6848aa68d026be Mon Sep 17 00:00:00 2001 From: arpan Date: Mon, 14 Sep 2026 17:25:31 +0530 Subject: [PATCH] 0.10.0's release notes were missing a public API addition that ships in it Found by asking, before tagging, whether main still matches what release verification ran against. It does not: one src/ file changed after that check. `needs_approval` gained `task=` and `hop=` in the commit that built two of SPEC-v0.10 section 9.4's three frozen-but-unbuilt rows, which merged after the [0.10.0] section was written. So the release notes for a version that ships the change do not mention it, and a version number on PyPI can never be reused. The change is additive and good: without those parameters the predicate a framework asks before it invokes evaluated against the receiver's whole candidate set while execute evaluates against the hop alone, so it answered "a human is needed" for a call execute then refuses. It was never a wider grant, because Control.execute is the enforcement point and refuses either way. Nothing else in src/ moved since the release verification ran. The adapter version bumps and adapters/PUBLISHED.toml are separate distributions on their own version line, per SPEC-v0.5 section 6.2, and are not kernel release notes. Signed-off-by: arpan --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8c9e70e..9d8caf87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,14 @@ One question: when one agent hands work to another, what does the second one hol - `ctrlrun inspect --hop` emits `ctrlrun.hop/v1`: who issued a hop, and **which dimensions each link narrowed**, which is the question an operator paged at 3am actually has. - `ctrlrun scan` names the principals holding a grant no hop bounds. It reports and does not score. +- **`task=` and `hop=` on `ctrlrun.adapter.needs_approval`**, the pre-invocation predicate a + framework asks before it invokes a tool. Without them the predicate evaluated against the + receiver's whole candidate set while `execute` evaluates against the hop **alone**, so it answered + "a human is needed" for a call `execute` then refuses: the framework surfaced an approval item, a + human said yes, and the call failed anyway. Never a wider grant, because `Control.execute` is the + enforcement point and refuses either way; what it cost was the framework's own approval item and a + receipt nobody could explain. `SPEC-v0.10.md` §9 froze the name and §9.4 records that it shipped + after this section was first written, which is why it is here and not above. ### Changed