release: 0.3.0 — beta, with five verifier-accuracy fixes - #10
Merged
Conversation
Promotes attune-verify to Development Status :: 4 - Beta and states an API compatibility promise for the deterministic core. A beta-review pass over the library found five defects, all in the extractor, and all of the two classes that matter for a fact-checker: Silent false negatives (a hallucination passing unchecked) - Indented fences were invisible. A code block nested under a list item — how LLMs routinely write install steps — matched nothing, so every import and shell flag inside one went unchecked. The extractor is now a line scanner that accepts a fence at any indentation and strips that indent from the body; uniformly indented code otherwise fails ast.parse, which was the silent skip. Largest remaining hole. - Tilde fences (~~~) were unrecognized. False positives (a real entity flagged) - Percent-encoded link targets were checked literally, so a link to a file whose name contains a space was flagged though the file exists. - Balanced parens in a link target were truncated at the first ')'. - Link syntax shown as an example inside a code span or fence was checked as a live link. Found by running verify over its own README. The scanner also enforces what the old regex ignored: an unclosed fence is not a fence, a closing run must match the opening character and length, and a line-leading inline span no longer opens one. Beta hygiene: ship py.typed (the package is fully annotated but PEP 561 told type checkers to ignore it), pin __version__ against the pyproject version (the release flow bumps both by hand), and document per-checker behavior plus known limitations in the README. Every fix carries a regression corpus case. 130 tests pass, coverage 96% (_extract.py 100%), mutation score 80.7% against a 75% gate.
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.
Promotes attune-verify to
Development Status :: 4 - Betaand states an API compatibility promise for the deterministic core.Why not just flip the classifier
A review pass over the library found five defects, all in the extractor, all in the two classes that actually matter for a fact-checker. Shipping "beta" over a checker that silently skips a whole shape of code block would have been the wrong claim to make.
Silent false negatives — a hallucination passing unchecked
ast.parse, which was the silent skip. This was the largest remaining hole.~~~) were unrecognized. CommonMark-legal, never extracted.False positives — a real entity flagged
docs/my%20file.md) was flagged though the file exists. The raw form is still tried first, so a file genuinely nameda%20b.mdresolves, and a decoded target that escapesproject_rootis still caught.)—docs/a(1).mdwas checked asdocs/a(1.verifyover its own README.The scanner also enforces what the old regex ignored: an unclosed fence is not a fence (its body was the rest of the document), a closing run must match the opening character and length, and a line-leading inline span no longer opens one.
Beta hygiene
py.typed— the package is fully annotated but shipped no PEP 561 marker, so type checkers ignored it downstream. Verified present in the built wheel.pyproject.tomland__version__by hand; a test now pins them equal.Verification
_extract.py100%ruff+blackcleanDevelopment Status :: 4 - Beta, shipspy.typedEvery fix carries a regression corpus case, per this repo's convention.
Not published — this stops at the PR.
🤖 Generated with Claude Code