Repository navigation
Conversation
Records the decisions taken so far for modules, imports and versioning, none of them implemented yet: no visibility, so everything a module defines is part of its contract; the major version in the module path, so majors coexist; SemVer categories enforced when publishing, from what declarations state rather than from tested argument types; the publishing steps, including rerunning the previous release's tests and requiring every function body to run in the module's tests; deprecation; and development reports that keep compilation permissive. Lists the questions still open. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A failing test from the previous release stops publishing only when nothing explains it: a change the comparison found, a declared break or bug fix, or something outside the contract such as a struct's printed form. Before, any failure stopped publishing, which ruled out every Major release that removes a function. - A struct constant keeps its value while every field it had keeps its type and value, so a Minor field addition no longer counts as changing the constants of that struct type. Reordering fields is Major. - Distinct struct types across majors don't stop a template from accepting either one. - Rerun tests catch only what their assertions or type-sensitive operations expose, and a narrowing that escapes is a breaking change the release should have declared. - The visibility rationale is that functions share no mutable state; functions can print and read constants, so the stronger claims are gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Minor release no longer marks things as going away, so compiling never warns about what a later Major release will remove. A Major release may remove or change anything; each dependent moves to it when it chooses, since majors coexist, and the release notes list every removal and change, taken from the comparison with the release before it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… order The comparison only sees declarations, so a behavior change such as `Double(x)` going from `x * 2` to `x * 3` never shows up in it. Release notes now list the removals and changes the comparison detects together with the breaking changes the publisher declares and their migration steps, and a module's own documentation can give advance notice of removals. The API manifest records each struct's ordered field names and types, since reordering fields is Major and the checker has to see it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The publisher no longer proposes a version for the checker to accept or reject. Publishing works out the category from the detected changes and any declared break, and numbers the release itself; the publisher may ask for a higher category, never a lower one. Publishing reports the version it picked and why, and a request for a lower category is refused with the change that rules it out. Adds an open question: how a publisher declares a break or a bug fix and asks for a higher category. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Publishing worked out a release's category from detected changes and declared breaks only, so a template that newly accepts more argument types, which the comparison cannot see, would have been numbered as a Patch although the table requires a Minor. The publisher now declares compatible additions the comparison cannot see as well as breaks, and the category is the highest any detected or declared change requires. Also states that release notes are generated, so publishers never write out changed functions, constants or fields; that requiring every function body to run shows each function runs, not that it is needed; and adds backports to the open questions. Co-Authored-By: Claude Opus 5.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.
Adds
docs/Pluto Module Design.md, a design record for modules, imports and versioning. Nothing in it is implemented yet: today a directory is the unit of compilation,pt.modnames the module path, and there are no imports.What it records
github.com/you/math/v2), which the C ABI already accepts and mangles. Majors coexist in one program; their struct types stay distinct, though a generic template accepts either.Commits
docs:the design record.docs:from review: a failing test from the previous release must be explained rather than always stopping publishing; struct constants and Minor field additions; field order; generic calls across majors; what rerun tests catch; the visibility rationale.docs:drops deprecation marks, so compiling never warns about future removals.docs:from review: release notes include declared breaks and migration steps, and the manifest keeps struct field order.docs:publishing picks the version number, so a publisher never chooses one and can only ask for a higher category.docs:from review: publishers declare compatible additions the comparison cannot see (Minor) as well as breaks (Major); release notes are generated; running every function shows it runs, not that it is needed; backports join the open questions.Verification
go vetandgo test -race ./lexer ./parser ./compilerpass, andpython3 test.py --leak-checkpasses 84/84 with every leak check clean, at the pushed head.tests/structprintsAda 28 0), a template is keyed by name and input count, versioned module paths are valid and mangled (C ABI spec §1.1), and[Double(0:0)]never runsDouble's body.git merge-treeof the two branches is clean.🤖 Generated with Claude Code