Skip to content

Release v0.3.0#187

Merged
placerda merged 23 commits into
mainfrom
release/v0.3.0
May 29, 2026
Merged

Release v0.3.0#187
placerda merged 23 commits into
mainfrom
release/v0.3.0

Conversation

@placerda
Copy link
Copy Markdown
Contributor

Release v0.3.0

Automated release branch created from develop.

What happened

  • Branch release/v0.3.0 created from develop
  • CHANGELOG.md updated: versioned section [0.3.0] added
  • Plugin versions synced to 0.3.0 (package.json, plugin.json, marketplace.json)
  • Tombstone versions synced to 0.3.0 (tombstones/vscode/package.json, tombstones/pypi/pyproject.toml)
  • tombstones/vscode/CHANGELOG.md heading rewritten to [0.3.0] (date sentinel left for publish-time substitution)
  • Staging pipeline triggered automatically (build → TestPyPI + VSIX pre-release → verify, plus tombstone TestPyPI + VSIX pre-release)

Next steps

  1. Wait for the Staging pipeline to pass
  2. Review and approve this PR
  3. Merge to main
  4. Tag and push: git tag v0.3.0 && git push origin v0.3.0
  5. Approve the PyPI publish and VSIX stable publish in the Release workflow
  6. Sync develop: git checkout develop && git merge main && git push origin develop

Checklist

  • Staging pipeline passes (build + TestPyPI + VSIX pre-release + verify)
  • CHANGELOG entries reviewed
  • PR approved and merged to main
  • Tag v0.3.0 pushed
  • PyPI publish approved
  • VSIX stable publish approved
  • develop synced from main

placerda and others added 22 commits May 28, 2026 16:39
…journey

Bundles three workstreams: --doctor-gate flag on workflow generate, new prompt-agent PR template that stages candidates in dev before evaluating, and rewritten quickstart tutorials covering the full sandbox→ dev journey with Doctor blocking on regressions. 773 tests pass.
The earlier wording called the sandbox Foundry project `personal`

and `private`, and the prompt-agent quickstart's Team tip

suggested giving each developer their own sandbox project. In

practice the sandbox project is usually fine for a small team to

share - the contrast that matters is `saves never trigger CI`

(sandbox) vs `CI promotes from here` (dev), not solo vs shared.

- prompt-agent quickstart: drop `personal` / `private` from the

  intro, prerequisites table, ASCII diagram, naming list, and skill

  prompt. Replace the per-developer `Team tip` callout with a

  `Team scaling` note that recommends one shared sandbox by

  default and only suggests splitting if save collisions become

  a real problem.

- hosted-agent quickstart: change `per developer` to `shared by

  the team (or per-stream / per-developer if your team prefers

  that)` and drop the leftover `shared blast radius` phrasing.

- end-to-end tutorial: drop `private` / `personal/team author

  space` / `author's safe space` framing in the env layout

  block, the `Why a separate sandbox?` callout, and the wrap-up

  bullets.

Tests: python -m pytest tests/ -x -q -> 773 passed, 3 skipped.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Prepare release.yml so the upcoming agentops-toolkit → agentops-accelerator
rename can publish through a single tag-driven release without VSIX/PyPI
ordering surprises or silent VSIX publish failures.

- publish-vsix now needs [build, publish-pypi] so a failed PyPI no longer
  leaves a stranded Marketplace artifact pointing at a missing distribution.
- Hoist VSIX filename to a job-level env var (VSIX_FILE); the rename now
  flips one value instead of grepping ~5 places.
- Narrow continue-on-error to the 'already exists' idempotency case only.
  Capture output, grep -i for 'already exists' (verified against vscode-vsce
  src/publish.ts:231,247), and exit 0 only for that case. Other failures
  (auth, network, schema) now fail the job. Move VSCE_PAT to step-level env.
- Gate github-release on publish-vsix.result == 'success' so a real (non-
  idempotent) VSIX publish failure no longer produces a GitHub Release that
  silently lacks the VSIX asset.

Refs #181 (PR-1 of 3-PR rebrand strategy).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ardening

Harden publish-vsix job ahead of agentops-accelerator rename (#181)
Atomic two-line change coupling pyproject.toml [project].name with the
importlib.metadata.version() lookup that reads it. Decoupling these would
silently fall back to __version__ = '0.0.0-dev' (PackageNotFoundError ->
fallback in src/agentops/__init__.py lines 5-8).

Commit 1 of PR-2 in the 3-PR rebrand strategy for #181. Target release:
v0.3.0 (minor bump signals user-visible migration). Subsequent commits in
this PR will sweep install hints, workflows, scripts, plugin manifests,
templates, README (PyPI long description), CHANGELOG, and targeted tests.
PR-3 will publish tombstone packages pinning agentops-accelerator>=0.3.0.

Note for existing developers: after pulling, run
  rm -rf src/agentops_toolkit.egg-info && uv pip install -e .
to refresh editable-install metadata. CI is unaffected (fresh installs).

Refs #181.
Update four user-facing pip install hint strings in src/agentops/cli/app.py
to reference the new distribution name agentops-accelerator instead of the
legacy agentops-toolkit:

  - L2646: cmd_mcp_serve docstring code block - pip install agentops-accelerator[mcp]
  - L4589: cmd_agent_serve docstring code block - pip install agentops-accelerator[agent]
  - L4599: cmd_agent_serve error message - Run `pip install agentops-accelerator[agent]`
  - L4665: cmd_cockpit error message - Run `pip install agentops-accelerator[agent]`

The brand display string on line 429 (AgentOps Toolkit - a CLI, local Cockpit,
and agent skills) is intentionally preserved; that string is gated by
tests/unit/test_cli_explain.py::test_root_explain_renders_cli_manual and falls
under issue #182 (cosmetic brand rename), not #181 (distribution rename).

Verified: 9/9 tests/unit/test_cli_explain.py pass; full suite 744 passed / 0
failed / 6 skipped.

Refs: #181
Update the four sibling release-automation scripts (sh/ps1 lockstep) to
reference the new PyPI distribution name agentops-accelerator and the new
VS Code Marketplace identifier AgentOpsAccelerator.agentops-accelerator:

  scripts/staging.sh   (L66): TestPyPI verify-install
  scripts/staging.ps1  (L67): TestPyPI verify-install (PowerShell sibling)
  scripts/release.sh   (L82,L83): PyPI verify-install echo + pip install
  scripts/release.sh   (L170):   final summary - PyPI URL
  scripts/release.sh   (L172):   final summary - Marketplace URL (itemName)
  scripts/release.ps1  (L83,L84,L173,L176): PowerShell sibling of release.sh

The .sh and .ps1 sibling pairs remain in perfect lockstep with identical
semantic substitutions on each side. Bash syntax (bash -n) verified clean
on both .sh scripts.

Refs: #181
Rebrand the README header section that is rendered as the PyPI project's
long description. This is the user-facing landing page at
https://pypi.org/project/agentops-accelerator/ and must read coherently
under the new distribution name from v0.3.0 onward.

Six in-place string replacements (zero net line delta):

  L1:  <h1>AgentOps Toolkit</h1>  ->  <h1>AgentOps Accelerator</h1>
  L8:  PyPI badge href + image src - now points at agentops-accelerator
  L9:  Marketplace badge href - now AgentOpsAccelerator.agentops-accelerator
  L22: Lead paragraph - AgentOps Accelerator helps teams ...
  L78: Install command - pip install agentops-accelerator[foundry] @ git+...
  L82: Switch-back guidance - agentops-accelerator[foundry]

The AgentOps Toolkit brand display string does not appear anywhere deeper
than L22 in the README, so this single patch fully rebrands the README for
issue #181. Cosmetic rebrand work for deeper docs/plugin assets remains
issue #182 scope.

Refs: #181
Reconcile uv.lock with the new project name set in pyproject.toml by the
preceding rename commit (ede205f). Without this refresh, 'uv sync --frozen'
and 'uv pip install -e .' against the lockfile would fail with a project-name
mismatch error.

The diff contains:

  * 1 meaningful line: the [[package]] name field for the in-tree package
    changes from agentops-toolkit to agentops-accelerator, matching
    pyproject.toml [project].name as set in commit ede205f.

  * ~2120 incidental lines: uv lockfile format-version refresh. The
    [resolution-markers] array and expanded [package.optional-dependencies]
    sections are emitted automatically by newer uv versions whenever an
    older lockfile is touched. These are not semantically meaningful changes
    to the dependency graph.

Why this is its own commit: the lockfile is large enough that bundling it
into the pyproject.toml rename would obscure the human-readable diff of
that commit. Splitting it out keeps the rename commit small and makes the
lockfile-format-version change auditable in isolation.

Developer note: existing local clones with a stale src/agentops_toolkit.egg-info
directory will need to run:

    rm -rf src/agentops_toolkit.egg-info && uv pip install -e .

before importlib.metadata.version('agentops-accelerator') will resolve
correctly. CI is unaffected because it does fresh installs.

Refs: #181
Update GitHub Actions workflows and plugin marketplace metadata to reference
the new distribution name agentops-accelerator instead of agentops-toolkit.

  .github/workflows/ci.yml         (6 lines): importlib.metadata version
                                              check, TestPyPI URL, verify-
                                              install + error echoes, summary
  .github/workflows/release.yml    (5 lines): TestPyPI/PyPI URL comments,
                                              verify-install + error echoes
  .github/workflows/staging.yml    (4 lines): TestPyPI URL comment, verify-
                                              install + error echoes
  .github/workflows/_build.yml     (1 line):  importlib.metadata version
                                              check (was failing on push
                                              with PackageNotFoundError after
                                              the Batch 1 pyproject.toml
                                              rename)
  .github/plugin/marketplace.json  (1 line):  name field
  .github/skills/release-management/SKILL.md (2 lines): description + PIPY_TOKEN
                                                       scope note

Note: VSIX_FILE=agentops-skills.vsix in release.yml line 183 is intentionally
preserved. The vsce package step uses an explicit -o flag, decoupling the
artifact filename from package.json name, so Track B's rename of the plugin
package does not require flipping this env var.

The 'AgentOps Toolkit' brand display strings (with space) on marketplace.json
lines 4, 8, 15 are intentionally preserved as #182 (cosmetic brand rename)
scope, not #181 (distribution rename).

Refs: #181
Rebrand the VS Code extension's identity from agentops-toolkit /
AgentOpsToolkit to agentops-accelerator / AgentOpsAccelerator (camelCase),
matching the new VS Code Marketplace publisher. The new full Marketplace
identifier is AgentOpsAccelerator.agentops-accelerator.

  plugins/agentops/package.json  (4 fields):
    - name:        agentops-toolkit -> agentops-accelerator
    - displayName: 'AgentOps Skills for GitHub Copilot' ->
                   'AgentOps Accelerator — Skills for GitHub Copilot'
                   (em-dash U+2014; preserves the descriptive purpose while
                   surfacing the new product brand on the Marketplace listing)
    - description: ...AgentOps Toolkit... -> ...AgentOps Accelerator...
    - publisher:   AgentOpsToolkit -> AgentOpsAccelerator

  plugins/agentops/plugin.json   (3 fields):
    - name:        agentops-toolkit -> agentops-accelerator
    - description: ...AgentOps Toolkit... -> ...AgentOps Accelerator...
    - author.name: 'AgentOps Toolkit' -> 'AgentOps Accelerator'

  plugins/agentops/README.md     (3 lines):
    - L38: Marketplace badge itemName -> AgentOpsAccelerator.agentops-accelerator
    - L49: pip install command -> agentops-accelerator[foundry] @ git+...
    - L83: link text -> [AgentOps Accelerator](...)

The user has confirmed the new publisher AgentOpsAccelerator is created in
the VS Code Marketplace and that the PAT-owning AzDO account is a member
of the new publisher (so the existing VSCE_PAT continues to work without
re-issue).

Refs: #181
…+ test assertions

Mechanical rebrand sweep of agentops-toolkit -> agentops-accelerator
across all CI/CD templates, agent-server scaffold, Copilot skill SKILL.md
files (in both plugin and template trees), and the test assertions that
gate on generated workflow content.

Templates (3 + 20 files, 32 line edits):

  src/agentops/templates/agent.yaml                   (1 line)
  src/agentops/templates/agent-server/Dockerfile      (2 lines)
  src/agentops/templates/agent-server/README.md       (1 line)
  src/agentops/templates/workflows/agentops-*.yml     (10 files, 17 lines)
    - deploy-{dev,qa,prod}[-azd].yml
    - deploy-prompt-agent.yml
    - pr.yml, pr-prompt-agent.yml
    - watchdog.yml
  src/agentops/templates/pipelines/azuredevops/*.yml  (10 files, 13 lines)
    - same set as workflows above

SKILL.md mirror copies (10 files, 14 line edits — 2 inodes per pair,
both copies updated in lockstep):

  plugins/agentops/skills/agentops-{agent,workflow,eval,config,dataset}/SKILL.md
  src/agentops/templates/skills/agentops-{agent,workflow,eval,config,dataset}/SKILL.md

Test assertions (2 files, 4 line edits — flipped atomically with the
templates so the suite stays green; 69/69 targeted tests pass after edit):

  tests/unit/test_cicd.py:194   agentops-toolkit[foundry,agent] -> agentops-accelerator[foundry,agent]
  tests/unit/test_cicd.py:212   (ado_content variant of the same assertion)
  tests/unit/test_cicd.py:251   agentops-toolkit -> agentops-accelerator
  tests/unit/test_cli_commands.py:67  pip install agentops-toolkit -> pip install agentops-accelerator

The SKILL.md pairs (plugins/agentops/skills/ vs src/agentops/templates/skills/)
are separate inodes with identical byte content — both copies must be edited
in lockstep to keep them in sync.

Refs: #181
…, and plugin resolver

Track D of the agentops-toolkit -> agentops-accelerator rebrand (#181).
Flips the remaining `agentops-toolkit` / `AgentOpsToolkit` strings across
four scopes that were not covered by Tracks A/B/C. Atomic with the other
Batch 3 commits (3a workflows, 3b VS Code plugin manifest, 3c templates).

Group 1 - Runtime install hints in src/agentops/ (11 files, 13 lines):
  src/agentops/agent/server/app.py:29
  src/agentops/agent/cockpit.py:5086
  src/agentops/agent/sources/azure_resources.py:421, 436
  src/agentops/agent/sources/azure_monitor.py:141, 380
  src/agentops/agent/sources/results_history.py:247
  src/agentops/agent/sources/foundry_control.py:94
  src/agentops/services/preflight.py:129
  src/agentops/pipeline/runtime.py:124
  src/agentops/pipeline/prompt_deploy.py:237
  src/agentops/mcp/__init__.py:8
  src/agentops/mcp/server.py:26
These are user-facing pip-install hint strings raised inside ImportError /
RuntimeError contexts when an optional extra is missing. Without this rename
they would print `pip install 'agentops-toolkit[extra]'` after #181 lands,
pointing users at a tombstoned distribution.

Group 2 - Claude plugin marketplace manifest (1 file, 1 line):
  .claude-plugin/marketplace.json:13 ("name" field)
Lines 4, 8, 15 of the same file are "AgentOps Toolkit" brand-display strings
and are intentionally preserved per the #181/#182 scope boundary.

Group 3 - User-facing release + tutorial docs (4 files, 15 lines):
  docs/release-process.md:3, 317, 387, 613, 621, 651, 669, 674, 770
  docs/tutorial-prompt-agent-quickstart.md:120, 129
  docs/tutorial-end-to-end.md:123, 132
  docs/tutorial-hosted-agent-quickstart.md:154, 163
Line 1 of release-process.md (H1 heading) is preserved as a brand-display
string per #182. The `placerda/agentops.git@develop` fork URLs in the
tutorials are pre-existing and out of #181 scope.

Group 4 - VS Code Copilot Chat plugin resolver (1 file, 1 line):
  .vscode/settings.json:12 (chat.plugins.enabledPlugins)
This is the runtime plugin lookup key Copilot Chat uses to resolve marketplace
plugins by their canonical `name`. After the marketplace flip in Group 2 and
Track A's .github/plugin/marketplace.json, keeping "agentops-toolkit" here
would silently disable AgentOps Copilot Chat integration for every developer
who pulls this repo. The string is matched literally - the "keep both"
strategy used for spell-check dictionaries does not apply.

Verification:
  - git diff HEAD --stat: 17 files, 30 insertions(+), 30 deletions(-) - symmetric
  - py_compile: 11/11 .py files OK
  - JSON validity: .vscode/settings.json + .claude-plugin/marketplace.json both parse
  - pytest tests/unit/test_preflight.py test_mcp_server.py test_agent_server.py:
    17 passed, 4 skipped (skips are pre-existing optional-extra guards)
  - Repo-wide residual scan: 0 hits for agentops-toolkit/AgentOpsToolkit
    outside build/lib/ (regeneratable wheel snapshot), .venv/, and the
    intentionally-preserved "AgentOps Toolkit" brand-display strings (#182).
  - Independent Critic review: PASS (all 7 gates green)

Refs: #181
Document the agentops-toolkit -> agentops-accelerator rebrand under the
existing [Unreleased] section so cut-release.yml will promote both entries
into the [0.3.0] release section when triggered.

Added to ### Changed:
- New first bullet describing the PyPI distribution rename, VS Code
  Marketplace publisher rename, full extension-ID flip, and explicit
  callout that the Python import (`import agentops`) and CLI command
  (`agentops ...`) are unchanged - only the install identifier changed.
- New install commands shown for both pip and uv pip.
- Foreshadows the PR-3 tombstone metapackage that keeps
  `pip install agentops-toolkit` working via a pin on
  agentops-accelerator>=0.3.0.

Added new ### Notes for developers subsection at end of [Unreleased]:
- Editable install cleanup guidance for devs who have a stale
  src/agentops_toolkit.egg-info/ or stale importlib.metadata entries
  pointing at the old distribution name.
- Recommended cleanup: rm -rf src/*.egg-info && uv pip install -e .
  (with pip equivalent shown).
- Clarifies one-time, dev-only scope; CI is unaffected (fresh venvs)
  and end users installing from PyPI are unaffected (wheels carry the
  new dist-info directly).
- Empirically validated: the cleanup command resolves agentops-toolkit
  to NOT FOUND and agentops-accelerator to the current dev version.

Subsumes the pr2-dev-egg-info-note backlog item by folding the egg-info
guidance into this single CHANGELOG entry.

Pre-existing [Unreleased] entries (`--doctor-gate`, stage-then-eval
prompt-agent PR workflow) preserved verbatim. No premature [0.3.0]
heading - cut-release.yml handles that conversion.

Verification:
  - Pure-additive diff: 28 insertions, 0 deletions, 0 modifications.
  - Heading integrity: ## [Unreleased] preserved at line 6;
    ## [0.2.2] through ## [0.1.7] unchanged.
  - Independent Critic review of Track A/B/C/D rebrand commits: PASS.
  - Full test suite (after all 9 rebrand commits + this CHANGELOG):
    744 passed, 6 skipped, 0 failed in 28s (6 skips are pre-existing
    optional-extra guards: agent/mcp/opentelemetry).
  - Artifact identity smoke test: uv build produces
    agentops_accelerator-*.whl + agentops_accelerator-*.tar.gz with
    METADATA Name: agentops-accelerator. No agentops_toolkit-* files
    produced.

Refs: #181
…_build.yml

PR-2 batch 3 missed 3 references in .github/workflows/_build.yml:
  - line 57: SETUPTOOLS_SCM_PRETEND_VERSION_FOR_AGENTOPS_TOOLKIT → _ACCELERATOR
  - line 95: dist.glob("agentops_toolkit-*.tar.gz") → agentops_accelerator-*.tar.gz
  - line 96: dist.glob("agentops_toolkit-*.whl") → agentops_accelerator-*.whl

Without these, the setuptools-scm pretend-version env var was ignored (wheel
would ship as 0.0.0 instead of the tag version) and the release artifact
assertion looked for the old filename pattern (always 0 matches, hard-fail).
Both regressions would block the first v0.3.0 release.

Refs #181
…VSCode

Add minimal deprecation packages under tombstones/ that ship one final
release each under the retired identifiers, redirecting users to the new
canonical packages:

  tombstones/pypi/      → metapackage 'agentops-toolkit' that depends on
                          'agentops-accelerator>=0.3.0'. README explains
                          the migration. packages=[] suppresses auto-
                          discovery so the legacy import path is owned
                          entirely by the new dist.

  tombstones/vscode/    → minimal VS Code extension under publisher
                          'AgentOpsToolkit'. On activation, prompts the
                          user once to install
                          'AgentOpsAccelerator.agentops-skills' (with
                          a marketplace fallback link). Stores a per-
                          install sentinel so the prompt does not recur
                          after a resolved outcome.

  tombstones/vscode/CDN_DEPRECATION_REQUEST.md
                        → Runbook (NOT shipped in the VSIX, see
                          .vscodeignore) for filing the Microsoft VS Code
                          Marketplace CDN deprecation request after the
                          tombstone goes live.

The CHANGELOG sentinel ('YYYY-MM-DD') is substituted at publish time by
release.yml / staging.yml; the version heading is rewritten by
cut-release.yml in the next commit. Empirically validated via
'python -m build' and 'npx vsce package' before commit.
Wire tombstones/pypi/ and tombstones/vscode/ into the existing release
machinery so v0.3.0 atomically ships:
  agentops-accelerator (PyPI) + AgentOpsAccelerator.agentops-skills (VSIX)
  agentops-toolkit (PyPI tombstone) + AgentOpsToolkit.agentops-skills (VSIX tombstone)

release.yml (5 new jobs + github-release update):
  build-pypi-tombstone           Resolves version from tombstones/pypi/
                                 pyproject.toml via tomllib, exposes as job
                                 output, builds dist, asserts artifact
                                 filenames with no hardcoded version pin.
  publish-tombstone-testpypi     Gated AFTER publish-testpypi.
  verify-tombstone-testpypi      Installs agentops-toolkit==<version> from
                                 TestPyPI, verifies pip-show Requires lists
                                 agentops-accelerator, and imports agentops
                                 to prove the redirect works end-to-end.
  publish-tombstone-pypi         Gated AFTER publish-pypi AND
                                 verify-tombstone-testpypi — prevents
                                 shipping a broken redirect to production.
  publish-tombstone-vsix         Gated AFTER publish-vsix. Substitutes the
                                 CHANGELOG date sentinel at publish time
                                 and tolerates the 'already exists' case.
  github-release                 Now lists tombstone artifacts as conditional
                                 downloads. The release notes job only blocks
                                 on main pypi+vsix — tombstone failures are
                                 recoverable in 0.3.1 and never block the
                                 canonical GitHub Release.

staging.yml (4 new jobs):
  Mirrors release.yml on the TestPyPI + pre-release VSIX side.
  publish-tombstone-vsix-prerelease has NO dependency on build-pypi-tombstone
  (separate channel) to avoid cross-channel coupling.

cut-release.yml:
  'Sync plugin versions' step now rewrites:
    tombstones/pypi/pyproject.toml      version field (regex)
    tombstones/vscode/package.json      version field (jq)
    tombstones/vscode/CHANGELOG.md      single entry's version heading,
                                        preserving YYYY-MM-DD sentinel for
                                        publish-time substitution
  Both Python rewrites use the heredoc-with-env-injection pattern and
  guard against silent no-op via 'raise SystemExit' if the regex doesn't
  match. 'git add' and PR body updated accordingly.

Required PyPI Trusted Publisher setup is now documented in the docstrings
of both release.yml and staging.yml — four total Trusted Publishers are
needed (agentops-accelerator and agentops-toolkit, on PyPI and TestPyPI).
VSCE_PAT must have 'Marketplace: Manage' scope on the AzDO account that
owns BOTH the AgentOpsAccelerator and AgentOpsToolkit publishers;
verify with: vsce ls-publishers -p $VSCE_PAT.

Reviewed by ai-starter-pack:critic (correctness lens) — all 3 CRITICAL,
4 IMPORTANT, and 1 SUGGESTION findings resolved before commit.
Expand the existing tombstone bullet in [Unreleased] / ### Changed to:
  - Document BOTH tombstones (PyPI metapackage + VS Code extension)
  - Explain the v0.3.0 atomic publish guarantee — tombstones gated AFTER
    the corresponding main publish, so the worst case is 'tombstone
    delayed, recoverable in v0.3.1', never 'tombstone-without-new'
  - Cross-reference the tombstones/ directory layout

No behavior change. (#181)
Adds an operator-facing harness that proves the v0.3.0 PyPI + VSCode
tombstones land correctly in production. Companion to the pre-publish
verify-tombstone-testpypi CI job in release.yml / staging.yml.

scripts/verify_tombstones.py (stdlib-only, ~670 LOC):
  - PyPI (8 checks): pip install agentops-toolkit==<version> in an
    isolated tempvenv, assert Requires agentops-accelerator, assert
    installed accelerator version >= <version>, assert import agentops
    resolves outside the tombstone, assert agentops --version exits 0,
    assert tombstone wheel owns zero .py files (shadow-free).
  - VSIX (5 checks): vsce show AgentOpsToolkit.agentops-skills --json,
    assert publisher == AgentOpsToolkit, assert version present and
    latest, assert displayName carries a deprecation hint.
  - GH (11 checks): gh release view v<version> --json, assert tag,
    non-draft, non-prerelease, non-empty body, and the 6 expected
    release assets.
  - --repository pypi|testpypi for post-staging dry-runs,
    --skip-pypi|--skip-vsix|--skip-gh-release for iteration,
    --verbose for full subprocess I/O.
  - Exit codes: 0 PASS, 1 FAIL, 2 PREREQ MISSING.
  - Cross-platform: shutil.which resolves vsce.cmd / gh.exe on Windows
    (Windows subprocess won't auto-append .cmd/.bat).

docs/verifying-tombstones.md (~205 lines):
  - When to run, expected SUMMARY block, per-category breakdown.
  - VS Code UX manual checklist for the deprecation prompt (install
    replacement / dismiss / open in marketplace + sentinel suppression).
  - CDN deprecation follow-up procedure.
  - Rollback path that honors SemVer + Marketplace constraints
    (next patch release, not 4-segment versions).
Rebrand: agentops-toolkit → agentops-accelerator + deprecation tombstones (#181)
The 'Sync plugin versions' step has two Python heredocs that rewrite
the version in tombstones/pypi/pyproject.toml and the heading in
tombstones/vscode/CHANGELOG.md. Both used 'if new_t == t' as the
sanity guard, which incorrectly fired whenever the substitution was
a byte-identical no-op — exactly what happens when the file is
authored directly at the target version (as the tombstones were for
v0.3.0 in PR #186).

Replace the post-substitution equality check with an explicit
pre-substitution anchor-presence check:

    if not re.search(PATTERN, t, flags=re.MULTILINE):
        raise SystemExit('::error::... anchor not found.')
    new_t = re.sub(PATTERN, ..., t, count=1, flags=re.MULTILINE)
    p.write_text(new_t, ...)

This correctly distinguishes 'regex anchor missed' (real bug; fail)
from 'anchor matched, value already at target' (legitimate; no-op
write is harmless because the workflow's downstream Update CHANGELOG
step always mutates CHANGELOG.md so the resulting commit is non-empty).

Failure surfaced by run 26608283472 (v0.3.0 first dispatch); the
release branch was not pushed because the failure happened before
Commit and push.
…ertion

The verify-testpypi smoke test in staging.yml and release.yml runs
'agentops init' then asserts 'test -f .azure/config.json'. In CI
stdin is not a TTY so init skips the interactive wizard, which means
the azd bootstrap (the only path that creates .azure/config.json
without explicit flags) never runs and the assertion always fails.

Add --no-prompt --azd-env testenv to both smoke tests so init
unconditionally bootstraps a deterministic azd env directory.
Verified locally: init --no-prompt --azd-env testenv produces
.azure/config.json (defaultEnvironment=testenv) and
.azure/testenv/.env without any prompts; rc=0.

Failure surfaced by staging run 26608637027 against release/v0.3.0
after the OIDC publisher gap for agentops-accelerator was fixed and
publish-testpypi started succeeding.
@placerda placerda merged commit 2be881c into main May 29, 2026
15 of 16 checks passed
@placerda placerda deleted the release/v0.3.0 branch May 29, 2026 02:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants