Skip to content

chore: backmerge main into develop after v0.8.0 release#483

Merged
Luis85 merged 14 commits into
developfrom
chore/backmerge-main-to-develop-v0.8.0
May 10, 2026
Merged

chore: backmerge main into develop after v0.8.0 release#483
Luis85 merged 14 commits into
developfrom
chore/backmerge-main-to-develop-v0.8.0

Conversation

@Luis85
Copy link
Copy Markdown
Owner

@Luis85 Luis85 commented May 10, 2026

Summary

Backmerge main into develop after the v0.8.0 release dispatch (run 25641268853) so develop's `package.json` and surface files catch up to the released state. Standard post-release housekeeping per ADR-0020.

What landed on main since v0.7.0

PR Subject
#477 feat(plugin): orphan `dist/claude-plugin` distribution via `git-subdir`
#478 chore(release): promote v0.8.0 to main
#479 chore(release): cut v0.8.0-rc.1 — TP smoke test
#480 fix(release): drop smoke job permissions override
#481 fix(release): pass `--tag next` when publishing a pre-release
#482 chore(release): cut v0.8.0 final (TP validated via rc.1)

The branch is fast-forward — develop has zero commits ahead of main (everything from develop got promoted into main via #478, then four release fixes landed on main only).

Released state

  • npm: `specorator@0.8.0` (latest), `specorator@0.8.0-rc.1` (next), sigstore provenance attestation on both.
  • GitHub Release: `v0.8.0` (stable, 987 kB tarball asset).
  • `dist/claude-plugin` orphan branch: live, rebuilt by `.github/workflows/publish-claude-plugin.yml` on every push to main.
  • npmjs.com Trusted Publishing: restored (ADR-0044), `NPM_TOKEN` repo secret decommissioned.

Test plan

  • CI green on this PR (develop's CI surface).
  • After merge: `npm view specorator dist-tags` still shows `latest: 0.8.0`, untouched.

🤖 Generated with Claude Code

Symprowire and others added 14 commits May 10, 2026 22:08
CHANGELOG entry summarises the v0.8.0 cycle:

- Plugin distribution moves to orphan dist/claude-plugin + git-subdir
  marketplace source (ADR-0043, closes #461 + #474).
- New: /issue:tackle conductor skill (#443), /specorator:onboard guided
  series (#460), GitHub remote MCP server in project default (#471),
  conductor-driven model-tier injection (#440), `specorator --version`
  / `-v` flag (#424, #419).
- Plugin install smoke test in CI (#427); operational-bot dry-run +
  drift checks (#438); ADR-0042 typed-artifact reader seam.
- Fixes for plugin command prefix (#420), /quality:status CLI usage
  (#426, #428), init no-git warning (#421), product-page deployment
  (#456), archive-sync git identity (#468), feature-tracker readFile
  race (#408), and historical-status normalisation (#439).
- ADR-0030 (repo-adoption) withdrawn — superseded by plugin packaging.
- README + docs/specorator.md status banner refreshed for v0.8.0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codex P2 on PR #478: scripts/lib/workflow-schema.ts treats `superseded` as a
valid workflow status, and v0.8.0 sets specs/repo-adoption-track/workflow-state.md
to `status: superseded` (ADR-0030 withdrawn). The Astro content schema's
StateStatusEnum was missing that value, so the feature-tracker loader silently
skipped superseded workflow-state files instead of ingesting them — dropping
them from product-page reporting.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Trusted Publisher activated on the specorator package on 2026-05-10,
closing #411. Switch release.yml step 10 back to OIDC + provenance:

- Drop NODE_AUTH_TOKEN env from publish step; OIDC token mints via
  id-token: write.
- Drop the NPM_TOKEN-not-set guard.
- Add --provenance to npm publish so every release ships with a
  sigstore attestation on the npmjs.com package page.
- Remove # zizmor: ignore[use-trusted-publishing] suppression — the
  audit passes by construction now.
- Refresh workflow header + permissions comment block.

ADR-0044 supersedes ADR-0041 (frontmatter status: superseded;
superseded-by: [ADR-0044]). ADR index regenerated.

Operator guide §1 (prereqs), §5 (publish step), §5.1 (provenance
posture), §7.1 (manual recovery) refreshed: NPM_TOKEN repo secret is
decommissioned; manual recovery now requires minting a fresh classic
Automation token on npmjs.com web UI and revoking after use.

scripts/lib/release-readiness.ts comment block flips id-token: write
narrative from "kept across the ADR-0041 fallback for the GitHub
Release tarball attestation" to "load-bearing for both OIDC paths
(npm publish + Release tarball attestation)".

CHANGELOG v0.8.0 entry adds the Trusted Publishing restoration line.

Closes #411

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codex P2 on PR #478: after the conditional-presence gate (ADR-0043), a
partial bundle (e.g. someone deletes claude-plugin/specorator/agents/
after running build:claude-plugin) silently passed check:claude-plugin
because each helper short-circuited on its own missing-file branch.

Replace per-helper guards with an outer all-or-nothing presence check
across the five generated artifacts (plugin.json, .mcp.json, agents/,
skills/, commands/). When 0 are present, skip cleanly (clean checkout).
When all 5 are present, run the full shape checks. When 1..4 are
present, fail closed with a "partial bundle detected" diagnostic naming
the missing paths.

New test exercises the partial-bundle rejection path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Codex P2 on PR #478: dropping `build:claude-plugin --check` from the
package.json `check:claude-plugin` script (per ADR-0043) was correct
for the verify gate on a clean develop/main checkout (no committed
bundle to drift against), but it removed the contributor-facing drift
detection too — a hand-edited or stale locally-built bundle silently
passes validation.

Restore drift detection inside `check-claude-plugin.ts`, gated on the
all-or-nothing bundle-present branch from the prior commit. When all
five generated paths are present, spawn `build-claude-plugin --check`
and propagate its diagnostics. When the bundle is absent (the typical
develop/main case), the drift step is skipped — the verify-gate
behavior promised by ADR-0043 is preserved.

Resolve the build script via this file's on-disk location rather than
repoRoot so the test harness's SPECORATOR_ROOT redirection still finds
the real script next to it.

New test exercises the drift rejection path; the existing "validates
manifest, marketplace, and generated directories" test now invokes
build-claude-plugin from a seeded fixture before check, which is a
more realistic shape for a successful run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
chore(release): promote v0.8.0 to main
Release-candidate dispatch slot for the v0.8.0 cycle. Smoke-tests the
restored npmjs.com Trusted Publishing path (ADR-0044, supersedes
ADR-0041) before the v0.8.0 final dispatch — exercises the OIDC
+ --provenance shape end-to-end on a low-stakes version.

Surface content unchanged from v0.8.0:
- README badge + status banner reframed as RC; references ADR-0044 and
  acknowledges v0.7.x shipped via the ADR-0041 NPM_TOKEN fallback.
- docs/specorator.md version line updated; v0.8.x publish-via-OIDC
  narrative replaces the earlier "deferred per ADR-0041" line.
- CHANGELOG adds a minimal [v0.8.0-rc.1] section above the planned
  [v0.8.0] entry.

Post-RC: bump back to 0.8.0 in a follow-up PR, tag, dispatch v0.8.0
final.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
chore(release): cut v0.8.0-rc.1 — Trusted Publishing smoke test
The v0.8.0-rc.1 dispatch (run 25639883562) failed Layer 1 readiness with
RELEASE_READINESS_WORKFLOW_PERMISSIONS — `jobs.smoke.permissions.contents`
was `read` but the readiness check enforces strict equality with the
top-level `contents: write` value (scripts/lib/release-readiness.ts
diagnosticsForPermissions, line ~852).

Drop the job-level `permissions:` block so smoke inherits the top-level
{ contents: write, attestations: write, id-token: write } block. The
reusable smoke-test workflow is read-only in practice (npm pack +
install + CLI smoke); the inherited write scopes are unused.

Comment block in release.yml header already says "job-level overrides
may only narrow, never widen" — the actual readiness check enforces
equality, not subset. The narrowing-allowed semantics is documented as
intent (line ~775) but the implementation is exact-match. Either the
comment is wrong or the check is too strict; aligning the workflow with
the implementation unblocks v0.8.0-rc.1 / v0.8.0 dispatch immediately.
A follow-up may relax the readiness check.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix(release): unblock v0.8.0 dispatch by dropping smoke job permissions override
The v0.8.0-rc.1 dispatch (run 25640431367, second attempt) failed at the
Publish step with:

  npm error You must specify a tag using --tag when publishing a
  prerelease version.

`npm publish` refuses to default a semver prerelease (`-rc.1`) to the
`latest` dist-tag because that would silently demote stable consumers
who pin `latest`. Without `--tag`, prereleases fail closed.

Parameterise the publish step on `inputs.prerelease`:

- prerelease=true  → `npm publish --provenance --tag next <tarball>`
- prerelease=false → `npm publish --provenance <tarball>` (defaults to
                     `latest`)

This is workflow plumbing — every other step (Layer 1+2 readiness,
build:claude-plugin, tarball provenance attestation, Release create
with asset upload) succeeded on the previous dispatch, so the
Trusted-Publishing config on npmjs.com is reachable end-to-end. This
fix unblocks the last gate before the OIDC publish actually runs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix(release): pass --tag next when publishing a pre-release
v0.8.0-rc.1 dispatch (run 25640962728) succeeded end-to-end on the
fourth attempt after the npmjs.com Trusted Publisher record was
completed (Environment field was empty; now set to `release` to match
release.yml's environment.name). The RC published to npmjs.com under
the `next` dist-tag with a sigstore provenance attestation
(https://registry.npmjs.org/-/npm/v1/attestations/specorator@0.8.0-rc.1).

Cut the v0.8.0 final:
- package.json: 0.8.0-rc.1 -> 0.8.0
- README badge + status banner: restore v0.8.0 framing, mention TP
  restoration alongside ADR-0043 plugin distribution as headlines.
- docs/specorator.md version line: restore v0.8.0 framing.
- CHANGELOG: both [v0.8.0-rc.1] (RC validation record) and [v0.8.0]
  (release content) entries retained.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
chore(release): cut v0.8.0 final (TP validated via rc.1)
@Luis85 Luis85 merged commit e3eedb6 into develop May 10, 2026
20 checks passed
@Luis85 Luis85 deleted the chore/backmerge-main-to-develop-v0.8.0 branch May 10, 2026 22:44
Luis85 added a commit that referenced this pull request May 11, 2026
…#485)

After install (or after any new install), users can confirm both halves
of the v0.8.0 surface independently in an empty directory:

1. CLI path — npm install -g specorator + specorator --version +
   specorator init (with --dry-run preview). Plus a one-liner to
   surface the sigstore provenance attestation on the published
   tarball.
2. Plugin path — /plugin marketplace add Luis85/agentic-workflow +
   /plugin install specorator@specorator-marketplace. This is the
   end-to-end test for the orphan dist/claude-plugin branch
   (git-subdir marketplace source per ADR-0043).

Helps adopters self-validate after npmjs.com or marketplace
configuration changes, and gives the next release operator a
fast post-publish smoke test.

ADR-0044 is referenced as an absolute main-branch URL because the
backmerge into develop is still in flight (PR #483).

Co-authored-by: Luis Mendez <hallo@luis-mendez.de>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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