Skip to content

Name the escape path under the level rule, and date 0.1.1 - #7

Merged
pedro-pscunha merged 2 commits into
mainfrom
docs/level-rule-escape-path
Sep 22, 2026
Merged

pedro-pscunha merged 2 commits into
mainfrom
docs/level-rule-escape-path

Conversation

@pedro-pscunha

@pedro-pscunha pedro-pscunha commented Sep 22, 2026 •

Copy link
Copy Markdown
Owner

One sentence in docs/contract.md, approved during #6's review and missed by the merge by
about thirty seconds.

main today says a counterexample on a level is refused outright, and that the guarantee is
over 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_levels takes an already-rendered string,
so a rubric carrying a counterexample can be pre-rendered and handed to a level, and
Rubric::render cannot 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 main right now has to rediscover the boundary for itself.

It also carries the release prep that cannot go in any other way: main takes pull requests
only, so the CHANGELOG.md heading cannot be dated by a direct push at release time. ## Unreleased becomes ## 0.1.1 (2026-09-22) — the 22nd, not the 21st the first draft carried,
which is why the notes were moved back under Unreleased in the first place.

 CHANGELOG.md     | 2 +-
 docs/contract.md | 9 ++++++---
 2 files changed, 7 insertions(+), 4 deletions(-)

Docs only. No code, no spec/, so nothing for Python to re-vendor. After this merges the
remaining release steps are the tag, cargo publish --workspace --locked, and the GitHub
release.

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.
@pedro-pscunha pedro-pscunha changed the title Name the escape path under the level rule Name the escape path under the level rule, and date 0.1.1 Sep 22, 2026
@pedro-pscunha
pedro-pscunha merged commit 9d71c67 into main Sep 22, 2026
4 checks passed
@pedro-pscunha
pedro-pscunha deleted the docs/level-rule-escape-path branch September 22, 2026 11:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant