Release 0.1.3: eleven closed defects - #78
Merged
Merged
Conversation
…s stated pyproject and __version__ move together (0.1.0 shipped with them apart, and PyPI is immutable), the healthz and --version transcripts re-record, and the CHANGELOG's Unreleased section becomes 0.1.3. The release closes, in order of how much they could cost someone: a policy whose node rules were compiled by nobody, a Slack gate walked past by typing a flag twice, a deny rule that failed open when the tool name was also a glob, fan-out payloads that shared one live object between parallel workers, an unauthenticated 500 on the /live token check, an index that advertised traces the reader refuses, unknown input keys dropped at the front door, a Ctrl-C'd node that left no trace event, four unreadable-input tracebacks, and a --json document that would not parse. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prepares 0.1.3, carrying PRs #72–#77.
Version moves in lockstep —
pyproject.toml,grapharc.__version__,uv.lock, the README status line, the basics page's--versiontranscript, the serving cookbook's two/healthztranscripts, and the tripwire test that forces those page updates. (0.1.0 shipped with pyproject and__version__disagreeing, and PyPI is immutable, so the lockstep is the point.)CHANGELOG.md's Unreleased section becomes## 0.1.3.What this release closes
Found by an adversarial sweep across the runtime, planner/policy, session/server and CLI/Slack surfaces, each reproduced before it was filed and re-verified against a live repro before its fix was merged.
Fail-open, silent — the ones that mattered most
resource = "node"rules were compiled by nobody, so a document denying a node kind still ran it — and the shippedexample.tomluses exactly that form.--registrywalked a Slack user past the agent opt-in and the forced approval gate.visible()advertised the tool to the model.Contract and audit integrity
invoke/streamsilently dropped unknown input keys, running the whole graph on defaults.metricsthen reported zero errors.plan --approve --jsonprinted prose ahead of the document, so the output would not parse.Server
/livewith a 500 instead of a 401./liveindex listed and parsed symlinked traces the reader itself 404s.handle_text, so the bot answered with silence.Verification
pytest→ 1843 passed, 12 deselected (was 1754 at 0.1.2).ruff check grapharc tests→ clean. Every fix was additionally confirmed against a live repro — real server for the/livefixes, realgrapharc plan --policyfor the node gate, realHarness.callfor the permission gate.Still open and deliberately not in this release: #60 (a budget-stopped run reports 0 tokens) and #71 (worst-case iteration under-count for acyclic plans), both of which want design decisions rather than patches.
🤖 Generated with Claude Code