Skip to content

test: rehearse the v1 to v2 upgrade with v1.4.0's own plugin - #64

Closed
mauricios wants to merge 2 commits into
mainfrom
test/upgrade-from-v1
Closed

mauricios wants to merge 2 commits into
mainfrom
test/upgrade-from-v1

Conversation

@mauricios

Copy link
Copy Markdown
Contributor

The v2.0.0 release skipped the pre-release session evals (evals/dynamic/README.md § Cost considerations). This PR adds a suite that rehearses the upgrade every v1 team now runs, and records its first run.

Result: v1.4.0's /aplyca-adf:upgrade takes a v1.4.0 project to v2.0.0 correctly in all three cases. 51 checks passed, 0 failed, $3.39 on Sonnet 5.5. No defect found in v2.0.0, so no patch release is needed. Report: evals/dynamic/reports/2026-10-09-upgrade-from-v1.md.

Why a new suite

The existing upgrade suite starts at v1.0.0 and runs this checkout's /adf:upgrade. A v1 team has the v1.4.0 plugin, aplyca-adf, so the skill they run is v1.4.0's, against the v2.0.0 release. Nothing tested that combination.

The suite (evals/dynamic/fixtures/upgrade-from-v1/)

  • project.sh builds a committed adoption at v1.4.0 from that tag, with the Cursor and Gemini layers.

  • packaged.sh turns a run's copy into a packaged one, following v1.4.0's docs/SETUP.md, with or without the parallel-agents module. Both packaged starts pass every check in v1.4.0's own check-packaged.sh.

  • Three cases:

    • committed;
    • packaged;
    • packaged-parallel-agents, which starts in a worktree on the upgrade's branch, because v1.4.0's /upgrade won't run in the hub.
  • inspect.sh checks what v2.0.0 asks of a v1 project:

    • the stamp on AGENTS.md;
    • no CLAUDE.md or GEMINI.md;
    • the Claude Code rule;
    • adf@aplyca and no aplyca-adf: names;
    • committed: the machinery as build-committed.py writes it at the release;
    • packaged: check-packaged.sh at the release;
    • with the module: ops/agent/, and no worktree scripts.

    Run against the untouched v1.4.0 starts, every check the upgrade has to change fails. The machinery check passes on a correct v2.0.0 build.

  • run-session-evals.sh learns <!-- run: plugin-dir vX.Y.Z -->, which loads the core plugin from that release's tag.

What the run showed

  • Claude Code renames the plugin before the skill runs when the machine's aplyca marketplace is already at v2.0.0. The marketplace's renames map leaves an uncommitted adf@aplyca in .claude/settings.json. Every session folded it into the upgrade.
  • The sessions read the release from the runner's copy of the checkout, not a GitHub clone. The tag is the same, but the fixtures and README now say what actually happens.
  • Two minor slips in the sessions' wording:
    • only one case showed the PR body;
    • the packaged case put the developers' steps "before the PR" instead of after the merge.
  • One wrong expectation in my fixture: the packaged case doesn't need to offer the committed install. That invariant is fixed.

The change is to evals and docs only, so it needs no changelog entry. ./evals/run-evals.sh passes.

🤖 Generated with Claude Code

mauricios and others added 2 commits October 9, 2026 18:50
A new session-eval suite, upgrade-from-v1, runs the path every v1 team
takes: a project adopted at v1.4.0 runs /aplyca-adf:upgrade with the
plugin as v1.4.0 shipped it. The existing upgrade suite starts at
v1.0.0 and runs this checkout's /adf:upgrade, so it never ran the old
skill against the new release.

- project.sh builds a committed adoption at v1.4.0 from that tag.
  packaged.sh turns a run's copy into a packaged one, as v1.4.0's
  SETUP.md says, with or without the parallel-agents module. Both
  packaged starts pass v1.4.0's own check-packaged.sh.
- Three cases: committed, packaged, and packaged-parallel-agents. The
  last starts in a worktree on the upgrade's branch, because v1.4.0's
  /upgrade won't run in the hub.
- The runner learns <!-- run: plugin-dir vX.Y.Z -->, which loads the
  core plugin from that release's tag.
- inspect.sh checks what v2.0.0 asks of a v1 project: the stamp on
  AGENTS.md, no CLAUDE.md or GEMINI.md, the Claude Code rule, adf@aplyca
  and no old names. The committed case also needs the machinery
  build-committed.py writes, and the packaged ones check-packaged.sh at
  the release, plus ops/agent/ with the module.

First run, on Sonnet 5.5: 51 checks passed, 0 failed, $3.39. No defect
in v2.0.0; the report is in evals/dynamic/reports/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mauricios mauricios closed this Oct 15, 2026
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