Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ review can tell which standard a project was built from.

## Unreleased

- **Template test:** `test_approval_node_reasks_instead_of_applying_unknown_ids` no longer asserts that a re-asked HITL card
keeps its id. langgraph 1.2.20 issues a new interrupt id there (1.2.18 kept it); the documented contract (every card has its
own id, the client echoes the one it was given) is unchanged and the test still resumes with the id it receives. This turned the
CI `upgrade` job red on 2026-11-09: it re-locks an old project, which picked up langgraph 1.2.20, while the shipped
`uv.lock` still pins 1.2.18.
- **Docs re-read (2026-11): skills corrected where the AgentBase docs say otherwise** (docs-only; no template code changed).
Runtime Inbound Auth `IAM Permissions` / `JWT` **strips `Authorization` before the container** (only *No authorization*
forwards it) and the Console now defaults a new Runtime to IAM: `agentbase-build-deploy`, `-auth`, `-web`, `-frontend` and
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,10 +253,14 @@ async def test_approval_node_reasks_instead_of_applying_unknown_ids(fake_llm, mo
_two_cards(fake_llm)
await service.handle({"message": "remember x then y"}, ctx("hitl-r3"))
card2 = (await service.handle(_approve("c1"), ctx("hitl-r3")))["interrupt"]
assert [tc["id"] for tc in card2["tool_calls"]] == ["c2"]
check = service.stale_decision_ids
monkeypatch.setattr(service, "stale_decision_ids", lambda *a: set())
again = await service.handle(_approve("c1"), ctx("hitl-r3"))
assert again["status"] == "interrupted" and again["interrupt"]["id"] == card2["id"]
assert again["status"] == "interrupted"
# the re-asked card keeps its id (langgraph <= 1.2.18) or gets a new one (>= 1.2.20): the contract is only that the
# client echoes the id it was given, which the last resume below does
assert isinstance(again["interrupt"]["id"], str) and again["interrupt"]["id"]
assert [tc["id"] for tc in again["interrupt"]["tool_calls"]] == ["c2"]
monkeypatch.setattr(service, "stale_decision_ids", check)
done = await service.handle(_approve("c2", again["interrupt"]["id"]), ctx("hitl-r3"))
Expand Down