From 3ec355ed43b6fc3faf6904ba6139664706e986c5 Mon Sep 17 00:00:00 2001 From: Samuel Letellier-Duchesne Date: Tue, 13 Oct 2026 20:48:41 -0400 Subject: [PATCH 1/3] Add the caller that adopts an EnergyPlus release The caller holds no logic. The steps, their commands and the gate are declared for this project in governance/energyplus.toml of idfkit-conformance, read at governance-2026.24. --- .github/workflows/adopt-energyplus.yml | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .github/workflows/adopt-energyplus.yml diff --git a/.github/workflows/adopt-energyplus.yml b/.github/workflows/adopt-energyplus.yml new file mode 100644 index 0000000..f0e66f5 --- /dev/null +++ b/.github/workflows/adopt-energyplus.yml @@ -0,0 +1,41 @@ +name: adopt-energyplus + +run-name: Adopt EnergyPlus ${{ inputs.release }} + +# Adopt one EnergyPlus release, as a pull request (feature 012 of the unification). +# +# This repository is `idfkit-plugin` in the version roster, governance/energyplus.toml in +# idfkit-conformance. The called workflow reads the roster at the pinned tag, rewrites the declared +# statements in the skill text, and opens a pull request on the branch energyplus/X.Y.Z. It never +# merges or publishes. This file carries no other logic. +# +# WHAT IT DOES NOT MOVE. The delivery pins in .mcp.json and .lsp.json. bump-idfkit.yml moves the +# idfkit-mcp pin when idfkit releases. Until both pinned servers resolve an idfkit that carries the +# release, a run reports that it is waiting and changes nothing. +# +# The tag is written twice, on `uses:` and as the input, because a called workflow cannot see its +# own ref. The called workflow refuses the run unless they are identical. Move both together, and +# only to a tag that exists. + +on: + workflow_dispatch: + inputs: + release: + description: The EnergyPlus release to adopt, as X.Y.Z. + required: true + type: string + +permissions: + contents: write + pull-requests: write + +jobs: + adopt: + uses: idfkit/idfkit-conformance/.github/workflows/adopt-energyplus.yml@governance-2026.24 + with: + project: idfkit-plugin + governance_level: governance-2026.24 + release: ${{ inputs.release }} + secrets: + APP_ID: ${{ secrets.APP_ID }} + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} From 59e06bf5bed8b1f4bdc34d954d86598646a39974 Mon Sep 17 00:00:00 2001 From: Samuel Letellier-Duchesne Date: Tue, 13 Oct 2026 21:00:41 -0400 Subject: [PATCH 2/3] Serialise adoption runs per release, and state who moves the LSP pin Two dispatches for one release ran in parallel and each regenerated and pushed the branch energyplus/X.Y.Z. A concurrency group keyed on the release makes the second run wait for the first, as bump-idfkit.yml does. The header named bump-idfkit.yml as the mover of the idfkit-mcp pin and was silent on .lsp.json. No workflow moves that pin, so the waiting state clears only when a maintainer edits it. The header now says so. --- .github/workflows/adopt-energyplus.yml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/adopt-energyplus.yml b/.github/workflows/adopt-energyplus.yml index f0e66f5..4c03da6 100644 --- a/.github/workflows/adopt-energyplus.yml +++ b/.github/workflows/adopt-energyplus.yml @@ -10,8 +10,12 @@ run-name: Adopt EnergyPlus ${{ inputs.release }} # merges or publishes. This file carries no other logic. # # WHAT IT DOES NOT MOVE. The delivery pins in .mcp.json and .lsp.json. bump-idfkit.yml moves the -# idfkit-mcp pin when idfkit releases. Until both pinned servers resolve an idfkit that carries the -# release, a run reports that it is waiting and changes nothing. +# idfkit-mcp pin when idfkit releases. No workflow moves the idfkit-lsp pin: a maintainer edits +# .lsp.json by hand. Until both pinned servers resolve an idfkit that carries the release, a run +# reports that it is waiting and changes nothing. +# +# ONE RUN PER RELEASE AT A TIME. Two runs for the same release would each regenerate and push the +# branch energyplus/X.Y.Z, so the second waits for the first. # # The tag is written twice, on `uses:` and as the input, because a called workflow cannot see its # own ref. The called workflow refuses the run unless they are identical. Move both together, and @@ -29,6 +33,10 @@ permissions: contents: write pull-requests: write +concurrency: + group: adopt-energyplus-${{ inputs.release }} + cancel-in-progress: false + jobs: adopt: uses: idfkit/idfkit-conformance/.github/workflows/adopt-energyplus.yml@governance-2026.24 From 22ed89035efc166ad7045a2a0c6d9ee1e1862f8d Mon Sep 17 00:00:00 2001 From: Samuel Letellier-Duchesne Date: Wed, 14 Oct 2026 08:19:23 -0400 Subject: [PATCH 3/3] Pin the adoption caller to governance-2026.25 The reusable workflow at this tag mints one scoped token per purpose, reads the roster at the called tag, waits on a dispatched run instead of dispatching it again, and refuses to push when the branch has moved. Its call interface is unchanged. --- .github/workflows/adopt-energyplus.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/adopt-energyplus.yml b/.github/workflows/adopt-energyplus.yml index 4c03da6..7670122 100644 --- a/.github/workflows/adopt-energyplus.yml +++ b/.github/workflows/adopt-energyplus.yml @@ -39,10 +39,10 @@ concurrency: jobs: adopt: - uses: idfkit/idfkit-conformance/.github/workflows/adopt-energyplus.yml@governance-2026.24 + uses: idfkit/idfkit-conformance/.github/workflows/adopt-energyplus.yml@governance-2026.25 with: project: idfkit-plugin - governance_level: governance-2026.24 + governance_level: governance-2026.25 release: ${{ inputs.release }} secrets: APP_ID: ${{ secrets.APP_ID }}