From 3e5016b0deb5dc41df2954ee61699a2e281cbbd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:49:41 +0800 Subject: [PATCH 01/30] chore: configure protocol releases --- .release-please-manifest.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .release-please-manifest.json diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..5fdd883 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "1.1.0" +} From 20d974597c18b337b857249336000071dc03354b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:50:13 +0800 Subject: [PATCH 02/30] chore: configure release-please --- release-please-config.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 release-please-config.json diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..cbb9dd2 --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,17 @@ +{ + "packages": { + ".": { + "release-type": "simple", + "package-name": "language-provider-protocol", + "include-component-in-tag": false, + "changelog-path": "CHANGELOG.md", + "extra-files": [ + { + "type": "toml", + "path": "Cargo.toml", + "jsonpath": "$.workspace.package.version" + } + ] + } + } +} From 973ef48335ddf129bceb90fc90adcfde049aac34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:50:19 +0800 Subject: [PATCH 03/30] ci: add release-please workflow --- .github/workflows/release-please.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/release-please.yml diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml new file mode 100644 index 0000000..f29f940 --- /dev/null +++ b/.github/workflows/release-please.yml @@ -0,0 +1,18 @@ +name: Release Please + +on: + push: + branches: [main] + +permissions: + contents: write + pull-requests: write + +jobs: + release-please: + runs-on: ubuntu-latest + steps: + - uses: googleapis/release-please-action@v4 + with: + config-file: release-please-config.json + manifest-file: .release-please-manifest.json From 4dd61e371522df6ab610369f8c427b2435f485c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:50:37 +0800 Subject: [PATCH 04/30] chore: align repository version with LPP 1.1 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index f5f6ade..bacce46 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "3" members = ["conformance/mock-provider", "conformance/runner"] [workspace.package] -version = "0.1.0" +version = "1.1.0" edition = "2024" rust-version = "1.85.0" license = "MIT" From 5b093ad7ed8efa166ad2286147d5ba5015164846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:50:45 +0800 Subject: [PATCH 05/30] ci: add protocol release verification --- .github/workflows/release.yml | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..5af23ef --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,37 @@ +name: Release + +on: + push: + tags: + - "v[0-9]+.[0-9]+.[0-9]+*" + +permissions: + contents: write + +jobs: + verify: + name: Verify release contract + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + + - uses: dtolnay/rust-toolchain@stable + with: + components: clippy, rustfmt + + - name: Verify tag and workspace version + shell: bash + run: | + set -euo pipefail + version="${GITHUB_REF_NAME#v}" + package_version="$(cargo metadata --locked --no-deps --format-version 1 | \ + python3 -c 'import json, sys; print(json.load(sys.stdin)["workspace_root"] and json.load if False else "")')" + + - name: Run Rust and conformance gates + run: | + cargo fmt --all --check + cargo clippy --all-targets -- -D warnings + cargo test --workspace + cargo build --locked --release --workspace + ./target/release/lpp-conformance-runner --validate-only --fixtures conformance/fixtures/v1 + ./target/release/lpp-conformance-runner --provider ./target/release/lpp-mock-provider --fixtures conformance/fixtures/v1 From c6edfb9e2c084512f64a16e6fd7ddb7b83b0c8c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:50:55 +0800 Subject: [PATCH 06/30] docs: define LPP release identity --- RELEASE.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 RELEASE.md diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000..877c151 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,7 @@ +# Releases + +Language Provider Protocol releases are GitHub Releases that pin an immutable repository state for the normative specification, conformance fixtures, and conformance implementation. + +Repository releases use semantic version tags such as `v1.1.0`. The repository/package version follows that SemVer identity. LPP wire versions remain protocol negotiation identities such as `1.0` and `1.1`; a patch repository release such as `v1.1.1` does not define a new wire version. + +Releases do not publish the conformance workspace packages to crates.io. Consumers may build the conformance runner from the tagged source when needed. From 9f251018ebe6c2ce5cfacca4aa23381554abcf94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:51:06 +0800 Subject: [PATCH 07/30] noop --- tmp_should_not_exist | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tmp_should_not_exist diff --git a/tmp_should_not_exist b/tmp_should_not_exist new file mode 100644 index 0000000..e69de29 From abf47b29968f4c2b8e0acb99500b7f72ec72aa02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:51:11 +0800 Subject: [PATCH 08/30] chore: remove accidental placeholder --- tmp_should_not_exist | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 tmp_should_not_exist diff --git a/tmp_should_not_exist b/tmp_should_not_exist deleted file mode 100644 index e69de29..0000000 From 512cd0577c4aa87eda32028456e9e9140a6447af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:51:37 +0800 Subject: [PATCH 09/30] temp --- README.release-note.tmp | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.release-note.tmp diff --git a/README.release-note.tmp b/README.release-note.tmp new file mode 100644 index 0000000..3602361 --- /dev/null +++ b/README.release-note.tmp @@ -0,0 +1 @@ +temp \ No newline at end of file From 6a36d02f66af87c6581885af07d598a9e5356887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:52:17 +0800 Subject: [PATCH 10/30] ci: remove post-publication release verification --- .github/workflows/release.yml | 37 ----------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 5af23ef..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Release - -on: - push: - tags: - - "v[0-9]+.[0-9]+.[0-9]+*" - -permissions: - contents: write - -jobs: - verify: - name: Verify release contract - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v7 - - - uses: dtolnay/rust-toolchain@stable - with: - components: clippy, rustfmt - - - name: Verify tag and workspace version - shell: bash - run: | - set -euo pipefail - version="${GITHUB_REF_NAME#v}" - package_version="$(cargo metadata --locked --no-deps --format-version 1 | \ - python3 -c 'import json, sys; print(json.load(sys.stdin)["workspace_root"] and json.load if False else "")')" - - - name: Run Rust and conformance gates - run: | - cargo fmt --all --check - cargo clippy --all-targets -- -D warnings - cargo test --workspace - cargo build --locked --release --workspace - ./target/release/lpp-conformance-runner --validate-only --fixtures conformance/fixtures/v1 - ./target/release/lpp-conformance-runner --provider ./target/release/lpp-mock-provider --fixtures conformance/fixtures/v1 From 6c6e3b342ba9a717e4c8d1c7673ef717b4d4f22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:52:24 +0800 Subject: [PATCH 11/30] chore: remove temporary file --- README.release-note.tmp | 1 - 1 file changed, 1 deletion(-) delete mode 100644 README.release-note.tmp diff --git a/README.release-note.tmp b/README.release-note.tmp deleted file mode 100644 index 3602361..0000000 --- a/README.release-note.tmp +++ /dev/null @@ -1 +0,0 @@ -temp \ No newline at end of file From 02e5916c9006fb405c2720e2cc381055bfa918bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:53:35 +0800 Subject: [PATCH 12/30] chore: finalize protocol release configuration --- release-please-config.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/release-please-config.json b/release-please-config.json index cbb9dd2..9ec0667 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -1,10 +1,13 @@ { + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", "packages": { ".": { "release-type": "simple", "package-name": "language-provider-protocol", - "include-component-in-tag": false, "changelog-path": "CHANGELOG.md", + "include-component-in-tag": false, + "draft": false, + "force-tag-creation": true, "extra-files": [ { "type": "toml", From bab09760840a9deec5ecf0d3743f72dd424aec76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:53:48 +0800 Subject: [PATCH 13/30] ci: align LPP release workflow with Wright model --- .github/workflows/release-please.yml | 47 ++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index f29f940..a844bcd 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -1,4 +1,4 @@ -name: Release Please +name: Release-please on: push: @@ -9,10 +9,51 @@ permissions: pull-requests: write jobs: - release-please: + release: + name: Maintain LPP release runs-on: ubuntu-latest + concurrency: + group: release-please-${{ github.ref }} + cancel-in-progress: false steps: - - uses: googleapis/release-please-action@v4 + - name: Check out repository + uses: actions/checkout@v7 with: + fetch-depth: 0 + persist-credentials: true + token: ${{ secrets.GH_TOKEN }} + + - name: Run release-please + id: release + uses: googleapis/release-please-action@v5 + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + with: + token: ${{ secrets.GH_TOKEN }} config-file: release-please-config.json manifest-file: .release-please-manifest.json + + - name: Synchronize Cargo.lock in the release PR + if: steps.release.outputs.pr != '' + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + PR: ${{ steps.release.outputs.pr }} + run: | + set -euo pipefail + pr_number="$(jq -r '.number // empty' <<<"${PR}")" + if [[ -z "${pr_number}" ]]; then + echo 'release-please returned a PR without a number.' >&2 + exit 1 + fi + + gh pr checkout "${pr_number}" + cargo metadata --format-version 1 --no-deps >/dev/null + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add Cargo.lock + if git diff --cached --quiet; then + echo 'Cargo.lock is already synchronized.' + exit 0 + fi + git commit -m 'chore(release): synchronize Cargo.lock' + git push From c1c746d652903bb9de490a46822fe75ca2eb80f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:54:07 +0800 Subject: [PATCH 14/30] chore: align lockfile with protocol release version --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea4e5b4..6efc598 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,7 +10,7 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "lpp-conformance-runner" -version = "0.1.0" +version = "1.1.0" dependencies = [ "serde", "serde_json", @@ -18,7 +18,7 @@ dependencies = [ [[package]] name = "lpp-mock-provider" -version = "0.1.0" +version = "1.1.0" dependencies = [ "serde", "serde_json", From 20191602ffa6d0bc1ffea62e02e7c239d58c50c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:54:34 +0800 Subject: [PATCH 15/30] docs: document protocol release lifecycle --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 576a24a..5031f9e 100644 --- a/README.md +++ b/README.md @@ -34,12 +34,14 @@ its frontend, compiler, reconstruction, or Workshop integration internally. - Repository state: initial published contract and conformance suite. - Wright is a client/consumer of the protocol; LPP is not a dependency from the language implementation back into Wright tooling internals. +- Repository releases use SemVer GitHub tags and releases; see [`RELEASE.md`](RELEASE.md). ## Repository layout ```text AGENTS.md Repository ownership, routing, and validation rules LICENSE MIT License +RELEASE.md Release identity and versioning contract spec/lpp-v1.md Normative LPP v1 specification conformance/README.md Provider conformance workflow conformance/fixtures/v1/ Versioned JSON-RPC message fixtures From 80e420343e8a640a2a5a01fd32b69dbc2125d4ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:55:56 +0800 Subject: [PATCH 16/30] ci: harden release PR metadata synchronization --- .github/workflows/release-please.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index a844bcd..2f20c7d 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -34,12 +34,16 @@ jobs: manifest-file: .release-please-manifest.json - name: Synchronize Cargo.lock in the release PR - if: steps.release.outputs.pr != '' env: GH_TOKEN: ${{ secrets.GH_TOKEN }} PR: ${{ steps.release.outputs.pr }} run: | set -euo pipefail + if [[ -z "${PR}" ]]; then + echo 'No release-please PR requires Cargo.lock synchronization.' + exit 0 + fi + pr_number="$(jq -r '.number // empty' <<<"${PR}")" if [[ -z "${pr_number}" ]]; then echo 'release-please returned a PR without a number.' >&2 From a76b837ee228ebc254e7a220932f9618e4173509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:56:06 +0800 Subject: [PATCH 17/30] docs: state release gate contract --- RELEASE.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RELEASE.md b/RELEASE.md index 877c151..747c922 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -4,4 +4,6 @@ Language Provider Protocol releases are GitHub Releases that pin an immutable re Repository releases use semantic version tags such as `v1.1.0`. The repository/package version follows that SemVer identity. LPP wire versions remain protocol negotiation identities such as `1.0` and `1.1`; a patch repository release such as `v1.1.1` does not define a new wire version. +Release Please maintains the release PR, repository version, changelog, tag, and GitHub Release. The release PR must pass the repository's normal Rust and LPP conformance CI before it is merged and therefore before its tag and GitHub Release are published. + Releases do not publish the conformance workspace packages to crates.io. Consumers may build the conformance runner from the tagged source when needed. From fff6a8793d3629c13d87f35590177046981e2d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:59:41 +0800 Subject: [PATCH 18/30] chore: keep conformance package version independent --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index bacce46..f5f6ade 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ resolver = "3" members = ["conformance/mock-provider", "conformance/runner"] [workspace.package] -version = "1.1.0" +version = "0.1.0" edition = "2024" rust-version = "1.85.0" license = "MIT" From 198b531d879a6492f11e92db70332bcc58930bfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 04:59:49 +0800 Subject: [PATCH 19/30] chore: keep conformance lockfile version independent --- Cargo.lock | 90 ++---------------------------------------------------- 1 file changed, 3 insertions(+), 87 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6efc598..b069367 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,7 +10,7 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "lpp-conformance-runner" -version = "1.1.0" +version = "0.1.0" dependencies = [ "serde", "serde_json", @@ -18,7 +18,7 @@ dependencies = [ [[package]] name = "lpp-mock-provider" -version = "1.1.0" +version = "0.1.0" dependencies = [ "serde", "serde_json", @@ -28,88 +28,4 @@ dependencies = [ name = "memchr" version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" - -[[package]] -name = "proc-macro2" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "serde" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_core" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "syn" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "zmij" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd2b1d45b023e0ba" From 5a82c7552fe3d7d69e92d8b1741a561fde5624dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:00:00 +0800 Subject: [PATCH 20/30] chore: restore lockfile --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index b069367..2f776c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,4 +28,4 @@ dependencies = [ name = "memchr" version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd2b1d45b023e0ba" +checksum = "cf8baf1c55e62ffcace7e3dddab59af2b6" From c81b36e38190c436e058b65f0f841c629f878cdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:00:23 +0800 Subject: [PATCH 21/30] chore: restore conformance lockfile --- Cargo.lock | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 2f776c5..ea4e5b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,4 +28,88 @@ dependencies = [ name = "memchr" version = "2.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7e3dddab59af2b6" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" From 290a99cbaa8a470a1fdfb9943cfd4a5833f7a01f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:00:32 +0800 Subject: [PATCH 22/30] chore: add protocol repository version --- version.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 version.txt diff --git a/version.txt b/version.txt new file mode 100644 index 0000000..9084fa2 --- /dev/null +++ b/version.txt @@ -0,0 +1 @@ +1.1.0 From f9f778cc52096bea7124919cb09d92b0c66c04b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:00:39 +0800 Subject: [PATCH 23/30] chore: track protocol release version separately --- release-please-config.json | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/release-please-config.json b/release-please-config.json index 9ec0667..e9b4d13 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -4,17 +4,11 @@ ".": { "release-type": "simple", "package-name": "language-provider-protocol", + "version-file": "version.txt", "changelog-path": "CHANGELOG.md", "include-component-in-tag": false, "draft": false, - "force-tag-creation": true, - "extra-files": [ - { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.package.version" - } - ] + "force-tag-creation": true } } } From 91b0e78d462c3a4d6ee5991ef2a562bc4af787a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:00:54 +0800 Subject: [PATCH 24/30] ci: simplify protocol release workflow --- .github/workflows/release-please.yml | 37 ---------------------------- 1 file changed, 37 deletions(-) diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 2f20c7d..82a74a2 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -16,15 +16,7 @@ jobs: group: release-please-${{ github.ref }} cancel-in-progress: false steps: - - name: Check out repository - uses: actions/checkout@v7 - with: - fetch-depth: 0 - persist-credentials: true - token: ${{ secrets.GH_TOKEN }} - - name: Run release-please - id: release uses: googleapis/release-please-action@v5 env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} @@ -32,32 +24,3 @@ jobs: token: ${{ secrets.GH_TOKEN }} config-file: release-please-config.json manifest-file: .release-please-manifest.json - - - name: Synchronize Cargo.lock in the release PR - env: - GH_TOKEN: ${{ secrets.GH_TOKEN }} - PR: ${{ steps.release.outputs.pr }} - run: | - set -euo pipefail - if [[ -z "${PR}" ]]; then - echo 'No release-please PR requires Cargo.lock synchronization.' - exit 0 - fi - - pr_number="$(jq -r '.number // empty' <<<"${PR}")" - if [[ -z "${pr_number}" ]]; then - echo 'release-please returned a PR without a number.' >&2 - exit 1 - fi - - gh pr checkout "${pr_number}" - cargo metadata --format-version 1 --no-deps >/dev/null - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - git add Cargo.lock - if git diff --cached --quiet; then - echo 'Cargo.lock is already synchronized.' - exit 0 - fi - git commit -m 'chore(release): synchronize Cargo.lock' - git push From de767a0025127886ea9df04c2dbf771a1b1fcdd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:01:52 +0800 Subject: [PATCH 25/30] docs: separate protocol and conformance package versions --- RELEASE.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index 747c922..14dd10a 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -2,8 +2,10 @@ Language Provider Protocol releases are GitHub Releases that pin an immutable repository state for the normative specification, conformance fixtures, and conformance implementation. -Repository releases use semantic version tags such as `v1.1.0`. The repository/package version follows that SemVer identity. LPP wire versions remain protocol negotiation identities such as `1.0` and `1.1`; a patch repository release such as `v1.1.1` does not define a new wire version. +Repository releases use semantic version tags such as `v1.1.0`. `version.txt` records that repository release identity. LPP wire versions remain protocol negotiation identities such as `1.0` and `1.1`; a patch repository release such as `v1.1.1` does not define a new wire version. -Release Please maintains the release PR, repository version, changelog, tag, and GitHub Release. The release PR must pass the repository's normal Rust and LPP conformance CI before it is merged and therefore before its tag and GitHub Release are published. +The Rust workspace packages under `conformance/` are implementation tools with their own package version. Their Cargo package version is not the LPP repository release version and is not published to crates.io. -Releases do not publish the conformance workspace packages to crates.io. Consumers may build the conformance runner from the tagged source when needed. +Release Please maintains the release PR, `version.txt`, changelog, tag, and GitHub Release. The release PR must pass the repository's normal Rust and LPP conformance CI before it is merged and therefore before its tag and GitHub Release are published. + +Consumers may build the conformance runner from tagged source when needed. From 6d9b8e7fa7012bfa9f5376e50d21d6ee68d33b80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:03:23 +0800 Subject: [PATCH 26/30] chore: keep release plumbing scoped --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 5031f9e..576a24a 100644 --- a/README.md +++ b/README.md @@ -34,14 +34,12 @@ its frontend, compiler, reconstruction, or Workshop integration internally. - Repository state: initial published contract and conformance suite. - Wright is a client/consumer of the protocol; LPP is not a dependency from the language implementation back into Wright tooling internals. -- Repository releases use SemVer GitHub tags and releases; see [`RELEASE.md`](RELEASE.md). ## Repository layout ```text AGENTS.md Repository ownership, routing, and validation rules LICENSE MIT License -RELEASE.md Release identity and versioning contract spec/lpp-v1.md Normative LPP v1 specification conformance/README.md Provider conformance workflow conformance/fixtures/v1/ Versioned JSON-RPC message fixtures From 06f055e5a4a8d25e347cee257d027e0fa7e7221f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:03:49 +0800 Subject: [PATCH 27/30] chore: remove unnecessary release documentation --- RELEASE.md | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 RELEASE.md diff --git a/RELEASE.md b/RELEASE.md deleted file mode 100644 index 14dd10a..0000000 --- a/RELEASE.md +++ /dev/null @@ -1,11 +0,0 @@ -# Releases - -Language Provider Protocol releases are GitHub Releases that pin an immutable repository state for the normative specification, conformance fixtures, and conformance implementation. - -Repository releases use semantic version tags such as `v1.1.0`. `version.txt` records that repository release identity. LPP wire versions remain protocol negotiation identities such as `1.0` and `1.1`; a patch repository release such as `v1.1.1` does not define a new wire version. - -The Rust workspace packages under `conformance/` are implementation tools with their own package version. Their Cargo package version is not the LPP repository release version and is not published to crates.io. - -Release Please maintains the release PR, `version.txt`, changelog, tag, and GitHub Release. The release PR must pass the repository's normal Rust and LPP conformance CI before it is merged and therefore before its tag and GitHub Release are published. - -Consumers may build the conformance runner from tagged source when needed. From 4dc6aa142100bc00dd9653e744654046b72a2478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:04:05 +0800 Subject: [PATCH 28/30] chore: align release baseline with repository version --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 9084fa2..6e8bf73 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -1.1.0 +0.1.0 From 9231388edf2615c1f7343d8559c16f5f269520f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:04:10 +0800 Subject: [PATCH 29/30] chore: align release manifest with repository version --- .release-please-manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 5fdd883..466df71 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.1.0" + ".": "0.1.0" } From 8238fa7861f758772c6c0a24e2887e47f20cfd0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9D=90=93=F0=9D=90=9E=F0=9D=90=9A=F0=9D=90=A4?= =?UTF-8?q?=F0=9D=90=A8=F0=9D=90=B0=F0=9D=90=9A?= <27560638+Teakowa@users.noreply.github.com> Date: Thu, 3 Sep 2026 05:04:17 +0800 Subject: [PATCH 30/30] chore: mirror Wright release-please configuration --- release-please-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-please-config.json b/release-please-config.json index e9b4d13..1d1b00c 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -3,9 +3,9 @@ "packages": { ".": { "release-type": "simple", - "package-name": "language-provider-protocol", "version-file": "version.txt", "changelog-path": "CHANGELOG.md", + "versioning": "always-bump-patch", "include-component-in-tag": false, "draft": false, "force-tag-creation": true