Skip to content

Commit 13563bf

Browse files
committed
Disambiguate release recovery inventory
Separate local and remote tag state during recovery and exclude the verified in-flight PyPI version from final concurrency reconciliation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: eaf32286-5971-44a3-ad1e-5fdbb2a89f8d
1 parent 1c08e1b commit 13563bf

1 file changed

Lines changed: 24 additions & 18 deletions

File tree

‎.github/agents/debugpy-release.agent.md‎

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ described below.
102102
current `main`. If the remote tag is absent but an exact local tag exists,
103103
treat it as a local-tag recovery candidate only when:
104104
- It is an annotated tag and the requested tag name matches exactly.
105-
- The remote tag, PyPI version, GitHub release, and internal release state are
106-
all absent.
105+
- The remote tag, internal build, internal release run, PyPI version, and
106+
GitHub release are all absent.
107107
- Its target equals the current authoritative `microsoft/debugpy` `main`
108108
commit and that commit passes the required-check gate below.
109109
- Rebuilding metadata from that tag produces the requested normalized
@@ -132,16 +132,19 @@ described below.
132132
latest-selection baseline for this invocation. Recompute it deterministically
133133
whenever a later invocation resumes the release; do not claim that an
134134
unpersisted value survives across sessions.
135-
7. Inventory the proposed version's tag, internal build, internal release run,
136-
PyPI files, and GitHub release. For a new release, require all to be absent.
137-
Except for the PyPI override below, resume/finalize requires every existing
138-
item to match the same commit, exact signed build, and package version, then
139-
continues from the first absent item. Never recreate, move, or overwrite an
140-
existing item. PyPI publication overrides the generic first-absent rule:
141-
when the exact version and files already exist on PyPI but the GitHub release
142-
is absent, require the matching remote tag and proceed only to Phase 6. Do
143-
not re-queue build or release pipelines even if their historical records are
144-
unavailable or expired.
135+
7. Inventory the proposed version's local tag, remote tag, internal build,
136+
internal release run, PyPI files, and GitHub release. For a new release,
137+
require the remote tag, internal build, internal release run, PyPI files, and
138+
GitHub release to be absent. Require the local tag to be absent unless step 5
139+
accepted it as the exact local-tag recovery candidate. Except for the PyPI
140+
override below, resume/finalize requires every existing item to match the
141+
same commit, exact signed build, and package version, then continues from the
142+
first absent item. Never recreate, move, or overwrite an existing item. PyPI
143+
publication overrides the generic first-absent rule: when the exact version
144+
and files already exist on PyPI but the GitHub release is absent, require the
145+
matching remote tag and proceed only to Phase 6. Do not re-queue build or
146+
release pipelines even if their historical records are unavailable or
147+
expired.
145148
8. Discover the authoritative required checks for `main` using the GitHub
146149
rules-for-branch API:
147150

@@ -264,12 +267,15 @@ only on the Azure DevOps run result.
264267
notes from that tag through the new tag, keep relevant issue and pull request
265268
links, and review the text for unrelated changes or internal information.
266269
2. Recheck that the stable GitHub release set has not changed since the Phase 1
267-
snapshot. If it changed, repeat Phase 1 reconciliation and update the
268-
invocation's latest-selection baseline before continuing. For backports and
269-
older release lines, always pass `--latest=false` regardless of the
270-
baseline. Otherwise pass `--latest` only when the new version is greater
271-
than the current invocation's baseline; pass `--latest=false` when it is
272-
not.
270+
snapshot. When comparing it with PyPI, exclude only the exact in-flight
271+
version already verified in Phase 5; its expected PyPI-only state must not be
272+
treated as a new incomplete release. If any other release state changed,
273+
repeat Phase 1 reconciliation with the in-flight version explicitly marked
274+
as expected and update the invocation's latest-selection baseline before
275+
continuing. For backports and older release lines, always pass
276+
`--latest=false` regardless of the baseline. Otherwise pass `--latest` only
277+
when the new version is greater than the current invocation's baseline; pass
278+
`--latest=false` when it is not.
273279
3. Create the release in `microsoft/debugpy`:
274280

275281
```text

0 commit comments

Comments
 (0)