Skip to content

Rebrand: agentops-toolkit → agentops-accelerator + deprecation tombstones (#181)#186

Merged
Dongbumlee merged 15 commits into
developfrom
feature/rebrand-agentops-accelerator
May 28, 2026
Merged

Rebrand: agentops-toolkit → agentops-accelerator + deprecation tombstones (#181)#186
Dongbumlee merged 15 commits into
developfrom
feature/rebrand-agentops-accelerator

Conversation

@Dongbumlee
Copy link
Copy Markdown
Collaborator

@Dongbumlee Dongbumlee commented May 28, 2026

Status

Status: Implementation complete. Ready for review pending CI on the latest push.

15 commits on feature/rebrand-agentops-acceleratordevelop.

  • Verification: 744 tests pass / 6 skipped (pre-existing optional-extra guards) / 0 failed.
  • Artifact identity smoke: PASS (wheel agentops_accelerator-*.whl + sdist agentops_accelerator-*.tar.gz; METADATA Name: agentops-accelerator; no agentops_toolkit-* artifacts).
  • Tombstone build smoke (PyPI): python -m build tombstones/pypi produces agentops_toolkit-0.3.0.tar.gz + .whl; wheel METADATA declares Requires-Dist: agentops-accelerator (>=0.3.0); top_level.txt is empty (no shadow code).
  • Tombstone build smoke (VSCode): npx vsce package in tombstones/vscode/ produces a valid VSIX; activator compiles cleanly under TypeScript strict mode; .vscodeignore empirically verified to exclude CDN_DEPRECATION_REQUEST.md.
  • Independent Critic Correctness reviews: 5 batched passes (Batches 2/3 main, Track B displayName, Track D workflow integration, tombstone PyPI + VSCode) — all PASS after one refine cycle each.
  • Residual scan: 0 hits for hardcoded 0.3.0 literal pins, 0 hits for agentops-toolkit / AgentOpsToolkit outside intentional tombstone identifiers, build/lib/ regen artifacts, .venv/, and intentionally-preserved "AgentOps Toolkit" brand-display strings (those are Rebrand (Part 2/2): update generated templates, skills, and docs #182 scope).

Refs #181. Target release: v0.3.0.

Scope expansion: this PR was originally PR-2 of 3 (rebrand only). PR-3 (tombstones) has been folded into this PR so a single v0.3.0 tag atomically promotes the new identifiers + deprecation tombstones together. There is no separate PR-3.

Currently Draft; please mark Ready for Review after CI on the latest push is green AND the operator-action preconditions below are met.

What this PR does (in scope)

Atomic rename, plus single-shot tombstones, plus CI wiring:

  1. Rename
    • PyPI distribution agentops-toolkitagentops-accelerator
    • VS Code Marketplace AgentOpsToolkit.agentops-toolkitAgentOpsAccelerator.agentops-skills
  2. Tombstones (new tombstones/ directory)
    • tombstones/pypi/ — metapackage that pins agentops-accelerator>=0.3.0 (no shadow code, no auto-discovery, README links to migration)
    • tombstones/vscode/ — minimal VS Code extension that, on activation, offers a one-time prompt to install AgentOpsAccelerator.agentops-skills (with Marketplace-link fallback and a per-install storage sentinel preventing re-prompts after resolution)
    • tombstones/vscode/CDN_DEPRECATION_REQUEST.md — runbook for filing the Microsoft VS Code Marketplace CDN deprecation request (NOT shipped in the VSIX)
  3. CI/CD wiring (.github/workflows/{release,staging,cut-release}.yml)
    • build-pypi-tombstone, publish-tombstone-testpypi, verify-tombstone-testpypi, publish-tombstone-pypi, publish-tombstone-vsix added to release.yml
    • Tombstone publish jobs are gated AFTER the corresponding main publish jobs so the worst-case failure mode is "tombstone delayed, recoverable in v0.3.1" — never "tombstone-without-new"
    • github-release job ships even if a tombstone publish hiccups (conditional artifact attach), so the main release is never blocked by a tombstone glitch
    • verify-tombstone-testpypi is now a hard dependency of publish-tombstone-pypi — a broken redirect cannot reach production
    • cut-release.yml now syncs tombstone versions (tombstones/pypi/pyproject.toml + tombstones/vscode/package.json + tombstones/vscode/CHANGELOG.md heading)
  4. Post-publish verification harness (scripts/verify_tombstones.py + docs/verifying-tombstones.md)
    • Stdlib-only Python harness that proves the live PyPI + VSIX tombstones redirect correctly after release.yml completes. Mirrors the pre-publish verify-tombstone-testpypi CI gate, then adds production-only checks (shadow-free wheel inspection via importlib.metadata.files, vsce show publisher/version/hint contract, gh release view asset audit for the 6 expected artifacts).
    • Cross-platform: shutil.which resolves vsce.cmd / gh.exe on Windows (Windows subprocess.run does not auto-append .cmd/.bat).
    • Exit codes: 0=PASS, 1=FAIL, 2=PREREQ MISSING (vsce / gh not installed).
    • Companion docs/verifying-tombstones.md covers the VS Code UX manual checklist (deprecation prompt, install replacement, dismiss, marketplace link, sentinel suppression), the CDN deprecation request follow-up, and a SemVer-compliant rollback path.

Minor version bump (v0.3.0) signals user-visible migration required.

Commits landed (chronological, oldest first)

  • ede205f Rename PyPI distribution to agentops-acceleratorpyproject.toml [project].name and the coupled importlib.metadata.version("agentops-accelerator") lookup in src/agentops/__init__.py. 2 files. Critic Correctness PASS.
  • 0481917 refactor(cli): rebrand install hints to agentops-acceleratorsrc/agentops/cli/app.py user-facing install hint strings. 1 file, 4 lines.
  • 6dba906 refactor(scripts): rebrand release/staging install + URL stringsscripts/release.{sh,ps1}, scripts/staging.{sh,ps1}. 2 files, 11 lines.
  • 8ccad69 docs(readme): rebrand PyPI long-description landing pageREADME.md h1, install commands, install badges, lead paragraph. 1 file, 6 lines.
  • a9a95f1 chore(deps): refresh uv.lock after distribution renameLockfile reconciled to the new project name. Auto-regenerated during Batch 2 verification.
  • c80c424 refactor(ci): rebrand .github workflows + marketplace metadata.github/workflows/{ci,release,staging,_build}.yml, .github/plugin/marketplace.json. 6 files. VSIX filename intentionally left as-is (decoupled from package name via vsce package -o).
  • 97f1d5a refactor(plugin): rebrand VS Code extension manifest + READMEplugins/agentops/{package.json,README.md}. 3 files. New displayName: "AgentOps Accelerator — Skills for GitHub Copilot" (em-dash U+2014).
  • 2191616 refactor(templates,tests): rebrand workflow/pipeline/skill templates + test assertionssrc/agentops/templates/**, plugins/agentops/skills/**/SKILL.md, tests/unit/{test_cicd.py,test_cli_commands.py}. 35 files.
  • ce59bb6 refactor(src,docs,plugins): rebrand runtime hints, marketplaces, docs, and plugin resolver11 src/agentops/** runtime install-hint files, .claude-plugin/marketplace.json, 4 docs files, .vscode/settings.json chat.plugins.enabledPlugins resolver. 17 files.
  • f41c009 docs(changelog): add v0.3.0 rebrand release notes (Rebrand (Part 1/2): rename PyPI distribution + VS Code extension to agentops-accelerator #181)CHANGELOG.md [Unreleased] section with rebrand bullet and ### Notes for developers egg-info cleanup guidance.
  • b99daed fix(ci): rename agentops_toolkit → agentops_accelerator residuals in _build.ymlCaught by post-rebrand audit: _build.yml:57 (env var) and :95-96 (artifact glob assertion) still referenced the old distribution name. Without this fix, every release would ship a wheel as version 0.0.0 and fail the assertion. P0.
  • 2f128d9 feat(tombstones): scaffold legacy identifier metapackages for PyPI + VSCode11 new files under tombstones/. PyPI metapackage, VSCode tombstone extension (TypeScript activator with strict-mode compile, per-install prompt-resolved sentinel, Marketplace fallback link). Empirically validated via python -m build + npx vsce package.
  • 022d36d ci(tombstones): publish deprecation packages atomically with v0.3.05 new jobs in release.yml, 4 in staging.yml; cut-release.yml extended to sync tombstone versions. Tombstone version resolved at build time via tomllib.loads(...)['project']['version'] — zero hardcoded version literals.
  • d163b50 docs(changelog): expand v0.3.0 tombstone notes (PyPI + VSCode)Documents both tombstones, the atomic publish guarantee, and the "tombstone-delayed-never-blocks" failure-mode contract.
  • a0e52c5 feat(tombstones): add post-publish verification harnessNew scripts/verify_tombstones.py (stdlib-only) automates PyPI (8 checks) + VSIX (5 checks) + GH release (11 checks) verification. New docs/verifying-tombstones.md covers the VSCode UX manual checklist + CDN deprecation follow-up + SemVer-compliant rollback. Multi-pass Coder → Critic Correctness (2 CRITICAL doc fixes + 1 IMPORTANT Windows fix + 3 hardening comments) → Refine 1 PASS.

Operator-action preconditions (REQUIRED before tag push)

Two follow-up actions are needed in the GitHub/PyPI/Marketplace UI BEFORE pushing the v0.3.0 tag. Without these, the first execution of the new tombstone publish jobs will fail.

1. Configure four PyPI Trusted Publishers

PyPI Trusted Publishing is per-project, not per-workflow. Two new entries (one per registry) are needed for agentops-toolkit:

# Registry Project Workflow Environment
1 https://test.pypi.org/manage/project/**agentops-accelerator**/settings/publishing/ agentops-accelerator release.yml staging
2 https://pypi.org/manage/project/**agentops-accelerator**/settings/publishing/ agentops-accelerator release.yml release
3 https://test.pypi.org/manage/project/**agentops-toolkit**/settings/publishing/ agentops-toolkit release.yml staging
4 https://pypi.org/manage/project/**agentops-toolkit**/settings/publishing/ agentops-toolkit release.yml release

(For all four: owner=Azure, repo=agentops.)

Without entries 3 and 4, the tombstone OIDC handshake fails with "no Trusted Publishers registered for this project."

2. Verify VSCE_PAT scope covers BOTH publishers

The current VSCE_PAT was created for the AgentOpsAccelerator publisher. The tombstone VSIX publishes under AgentOpsToolkit. Run:

vsce ls-publishers -p $VSCE_PAT

Expected output must list BOTH AgentOpsAccelerator AND AgentOpsToolkit. If only one appears (different AzDO accounts own them):

  1. Create a second secret VSCE_PAT_LEGACY (Marketplace: Manage scope on the AgentOpsToolkit-owning AzDO account)
  2. Update publish-tombstone-vsix (release.yml) and publish-tombstone-vsix-prerelease (staging.yml) to reference secrets.VSCE_PAT_LEGACY instead of secrets.VSCE_PAT

What this PR does NOT do (out of scope)

  • v0.3.0 tag pushcut-release.yml is still operator-triggered; nothing in this PR cuts the release.
  • Microsoft CDN deprecation request — the runbook is shipped at tombstones/vscode/CDN_DEPRECATION_REQUEST.md. The actual request must be filed by a maintainer after the tombstone VSIX goes live so VS Code clients automatically surface the deprecation UX.
  • Brand strings — the display name "AgentOps Toolkit" in src/agentops/cli/app.py:428 (gated by tests/unit/test_cli_explain.py:25) belongs to Rebrand (Part 2/2): update generated templates, skills, and docs #182, deferred to a follow-up PR.

Preflight verifications (operator confirmed)

  • agentops-accelerator reserved on PyPI + TestPyPI
  • ✅ Marketplace publisher AgentOpsAccelerator created
  • ✅ OIDC Trusted Publishers registered for agentops-accelerator (PyPI + TestPyPI)
  • VSCE_PAT account is a member of the AgentOpsAccelerator publisher
  • ✅ PR Harden publish-vsix job ahead of agentops-accelerator rename (#181) #185 (release.yml publish-vsix hardening) — merged into develop (711b0a0); rebrand commits rebased onto post-merge develop.
  • NEW (required before tag push): Trusted Publishers for agentops-toolkit (PyPI + TestPyPI) — see Operator-action preconditions This repo is missing a license file #1
  • NEW (required before tag push): VSCE_PAT scope verification for AgentOpsToolkit publisher — see Operator-action preconditions Adding Microsoft SECURITY.MD #2

Developer migration note (now landed in CHANGELOG; reproduced here for reviewers)

After pulling, existing dev machines with prior editable installs must refresh metadata:

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

CI is unaffected (fresh installs every run).

Risk + mitigation matrix

Risk Mitigation Status
Tombstone build glitch blocks main release github-release only gates on publish-pypi + publish-vsix; tombstone artifact attach is conditional ✅ Implemented (release.yml github-release.if)
Broken tombstone redirect ships to PyPI publish-tombstone-pypi gated on verify-tombstone-testpypi (which pip show-checks the dep + import-tests the redirect) ✅ Implemented
Hardcoded version pins regress in v0.3.1+ Tombstone version resolved at build time from tombstones/pypi/pyproject.toml via tomllib → propagated through job outputs; zero literal 0.3.0 in the workflow ✅ Implemented
First-run OIDC failure on agentops-toolkit Setup docstrings in release.yml + staging.yml document the 4 required Trusted Publishers explicitly ✅ Documented
VSCE_PAT scope insufficient for AgentOpsToolkit Setup docstrings document vsce ls-publishers -p $VSCE_PAT verification + VSCE_PAT_LEGACY fallback path ✅ Documented
User on legacy install never sees migration PyPI tombstone README is the project landing page; VSCode tombstone prompts on every activation until resolved ✅ Implemented
Tombstone VSIX activator hangs the editor Activator is non-blocking (single info modal, dismiss-on-X, try/catch per branch) ✅ Implemented + critic-validated

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.
@Dongbumlee Dongbumlee force-pushed the feature/rebrand-agentops-accelerator branch from 471bad4 to ede205f Compare May 28, 2026 21:04
DB Lee and others added 13 commits May 28, 2026 14:19
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)
@Dongbumlee Dongbumlee changed the title Rebrand: rename agentops-toolkit -> agentops-accelerator (PR-2 of 3, #181) Rebrand: agentops-toolkit → agentops-accelerator + deprecation tombstones (#181) May 28, 2026
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).
@Dongbumlee Dongbumlee marked this pull request as ready for review May 28, 2026 23:21
@Dongbumlee Dongbumlee merged commit f099947 into develop May 28, 2026
12 checks passed
Dongbumlee added a commit that referenced this pull request May 28, 2026
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.
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.

1 participant