diff --git a/docs/plans/release-0.6.0/lint-spx.9-release-notes-boundary.md b/docs/plans/release-0.6.0/lint-spx.9-release-notes-boundary.md new file mode 100644 index 00000000..035eee0a --- /dev/null +++ b/docs/plans/release-0.6.0/lint-spx.9-release-notes-boundary.md @@ -0,0 +1,97 @@ +--- +sprint: lint-spx.9 +bead: lint-spx.9 +epic: lint-spx +status: complete +branch: docs/release-notes-0.6.0-boundary +worktree: /Users/randlee/github/sc-lint-worktrees/docs/release-notes-0.6.0-boundary +pr_target: develop +closure_type: contract +adrs: [ADR-004] +requirements: [] +--- + +# lint-spx.9 — RELEASE-NOTES-0.6.0.md: boundary fixes and graph schema 0.2.0 + +Own stack rooted on `develop` (`gh stack link --base develop`). Docs only: +`release/RELEASE-NOTES-0.6.0.md` and this record. `requirements` is empty +because no requirement is implemented; say so in the closeout. + +## Source of facts + +Every sentence added must be traceable to one of: a merged PR listed below +(`gh pr view --json title,body`), a sprint doc under +`docs/plans/release-0.6.0/`, or the code at `origin/develop`. No sentence +about behaviour that you did not read in the diff or a sprint doc. + +Merged to `develop` on 2026-09-20 since the 2026-08-30 note: + +- boundary inventory stack: #115, #168, #171, #173, #175, #176, #177, #178 +- trait identity stack: #159, #160, #163, #164 +- installer test redesign: #180 +- CI on every PR target: #182 +- orchestration tooling (`.claude/**` only, not user-facing): #166, #167, + #170, #174, #179, #181 — one line under a "Repository tooling" heading at + most; do not describe skills. + +## Deliverables + +1. `## Release`: date refreshed to the day you commit; keep the other fields. +2. `## Summary`: one added paragraph: boundary-model fixes and graph schema + `0.2.0`. +3. `## Major Changes`, new bullets (one each, with PR numbers): + - reference impl owners without graph identity collisions (#159); + - trait methods distinguished from inherent methods and qualified forwarding + edges (#160, #164); + - boundary graph `schema_version` `0.1.0` → `0.2.0` + (`crates/sc-lint-boundary/src/lib.rs:42`, #163); + - structured boundary inventory: strict forbidden-edge deserialization, + required `planning.toml`, `owner_crate_path` check, preserved edge parse + causes, Python validator parity (#115, #168, #171, #173, #175–#178). +4. `## Migration Notes`: the schema `0.2.0` rebaseline: what a consumer with a + committed `0.1.0` graph must do. Read #163's diff and the boundary docs for + the actual procedure; if none is documented, write the exact command + sequence you verified against the code and cite `file:line`. +5. `## Validation`: replace the Phase G sentence with the CI facts of the + merges: `develop` head SHA, and `gh run list --branch develop --limit 1` + status. +6. `## Follow-Up Items`: keep; add the installer ETXTBSY redesign (#180) as a + test-only change under a `## Test Infrastructure` or similar heading rather + than Major Changes. +7. Do not edit the `## Included Crates` block (generated). + +## Acceptance criteria + +- `gh stack view --json` first and last; summary in the closeout. +- PR ready for review (never draft), base `develop`, in its own stack. +- `just lint`, `git diff --check` exit 0; `gh pr checks ` counts + run id. +- `git diff --name-only` lists only the two files. +- Closeout: one line per deliverable with the fact source (PR number or + `file:line`). `status: complete`. +- Completion message, then wait for the lead's reply before closing. + +## Closeout + +- Deliverable 1: `release/RELEASE-NOTES-0.6.0.md:5` refreshes the release date + to `2026-09-20`; source: task date and PR #189. +- Deliverable 2: `release/RELEASE-NOTES-0.6.0.md:13-16` adds the boundary and + graph-schema summary; sources: PRs #159, #160, #163, #164 and boundary + sprint docs. +- Deliverable 3: `release/RELEASE-NOTES-0.6.0.md:36-49` adds the four major + change bullets with PR/file sources; sources: PRs #115, #159, #160, #163, + #164, #168, #171, #173, #175–#178. +- Deliverable 4: `release/RELEASE-NOTES-0.6.0.md:60-69` records the `0.1.0` + to `0.2.0` rebaseline sequence; source: `docs/sc-lint-boundary/graph-schema.md:18-43`, + PR #163. +- Deliverable 5: `release/RELEASE-NOTES-0.6.0.md:73-76` records develop head + `e2477c38857537c8bcd34cf3873ee9726ef8d12a` and successful run + `35535212640`; source: `git rev-parse origin/develop` and `gh run list`. +- Deliverable 6: `release/RELEASE-NOTES-0.6.0.md:95-99` records installer + fixture redesign PR #180; source: PR #180 and the accepted installer sprint + record. +- Deliverable 7: `git diff --name-only origin/develop...HEAD` lists only + `release/RELEASE-NOTES-0.6.0.md` and this sprint doc; source: command output. +- PR #189 is ready, based on `develop`, and `gh stack view --json` reports one + layer with `needsRebase=false`; `just lint`, `just test`, and + `git diff --check` exit 0. PR #189 CI run `35559945150` was observed as + `0 pass / 12 pending / 0 fail`. diff --git a/release/RELEASE-NOTES-0.6.0.md b/release/RELEASE-NOTES-0.6.0.md index 01b7eb88..cef1ed75 100644 --- a/release/RELEASE-NOTES-0.6.0.md +++ b/release/RELEASE-NOTES-0.6.0.md @@ -3,7 +3,7 @@ ## Release - Version: `0.6.0` -- Date: 2026-08-30 +- Date: 2026-09-20 - Release owner: sc-lint maintainers - Approval: pending release publication approval @@ -13,6 +13,10 @@ Phase G delivers the versioned adoption kit and skill so any Rust repository can adopt sc-lint's consumer contract with one drift-detectable install, backed by a self-contained release (Python wheel runtime + archive binaries). +The release also includes boundary-model fixes for reference implementation +owners, trait-method identity, structured inventory validation, and the +`sc-lint-boundary` graph schema `0.2.0`. + ## Included Crates @@ -43,6 +47,15 @@ by a self-contained release (Python wheel runtime + archive binaries). forwarded to the managed binary; kit/repo bootstrap copies pinned LF. - Legacy `.just/lint-config.toml` fallback removed; `sc-lint.toml` is the only repo configuration. +- Reference implementation owners receive distinct graph identities (#159). +- Trait methods are distinct from inherent methods, and qualified forwarding + edges retain their trait-implementation identity (#160, #164). +- Boundary graph exports use `schema_version` `0.2.0` instead of `0.1.0` + (`crates/sc-lint-boundary/src/lib.rs:42`, #163). +- Structured boundary inventory validation rejects malformed forbidden edges, + requires `boundaries/planning.toml`, checks `owner_crate_path`, preserves + edge parse causes, and keeps the Python validator aligned with Rust + (#115, #168, #171, #173, #175–#178). ## Migration Notes @@ -52,10 +65,19 @@ by a self-contained release (Python wheel runtime + archive binaries). the Phase G consumer contract. - Source checkout contributors can continue using `cargo run` for development; consumer-facing behavior is owned by the installed `sc-lint` product. +- For a committed graph or findings export with schema `0.1.0`, discard or + migrate cached records and stored `node_ids`/edge endpoints; regenerate JSON + or Turtle with `sc-lint-boundary export-graph --root --format json` + (or `turtle`) and rebaseline consumers against `0.2.0`. No legacy ID mapping + is emitted; use implementation nodes and `contains`/`declares`/`targets` + edges rather than inferring trait ownership from method-name suffixes + (`docs/sc-lint-boundary/graph-schema.md:18-43`, #163). ## Validation -- Phase G CI passed (Test, Just lint, Release smoke, Adoption kit) Just lint and test jobs on Ubuntu, macOS, and Windows. +- `develop` head is `e2477c38857537c8bcd34cf3873ee9726ef8d12a`. +- Latest `develop` CI run `35535212640` completed successfully (Test, Just + lint, Release smoke, and Adoption kit). - Release publication order and package preflight are driven by `release/publish-artifacts.toml`. - The included-crates list above was generated from that same publish manifest. @@ -72,3 +94,9 @@ by a self-contained release (Python wheel runtime + archive binaries). - Publish the GitHub release body from this completed note after release workflow verification succeeds. + +## Test Infrastructure + +- Installer fixture tests use a hard-linked native CLI and child-process probe + writes so the test process does not hold a write descriptor for an executed + file (#180, `docs/plans/release-0.6.0/lint-spx.11-installer-exec-fixture-race.md`).