Repository navigation
Name the escape path under the level rule, and date 0.1.1 - #7
Merged
Merged
Conversation
The sentence says the guarantee is over declared parts, which is true, but a third SDK reading it still has to work out for itself which path escapes. Name it: a rubric carrying a counterexample can be pre-rendered and handed to a runtime level constructor, and neither SDK can stop that. Also names where each one refuses, so the rule and its enforcement read together. The residual was written on the Rust type's doc comment and never reached here, which is the point — a type's docs are not what another language's implementer reads.
main takes pull requests only, so the heading cannot be dated by a direct push at release time and has to ride a PR. The date is the 22nd: the earlier draft carried the 21st, which is what made the notes sit under Unreleased in the first place.
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.
One sentence in
docs/contract.md, approved during #6's review and missed by the merge byabout thirty seconds.
maintoday says a counterexample on a level is refused outright, and that the guarantee isover declared parts. Both true. What it does not say is where each SDK refuses, or which
path escapes — and the escape path is real:
score_levelstakes an already-rendered string,so a rubric carrying a counterexample can be pre-rendered and handed to a level, and
Rubric::rendercannot prevent it because it has no idea the string is bound for a level.That residual was written on the Rust type's doc comment and never reached the contract, which
is the point: a type's doc comment is not what another language's implementer reads. A third
SDK working from
mainright now has to rediscover the boundary for itself.It also carries the release prep that cannot go in any other way:
maintakes pull requestsonly, so the
CHANGELOG.mdheading cannot be dated by a direct push at release time.## Unreleasedbecomes## 0.1.1 (2026-09-22)— the 22nd, not the 21st the first draft carried,which is why the notes were moved back under
Unreleasedin the first place.Docs only. No code, no
spec/, so nothing for Python to re-vendor. After this merges theremaining release steps are the tag,
cargo publish --workspace --locked, and the GitHubrelease.