Skip to content

release: v5.10.0 — attune-author extraction + CVE sweep#139

Open
silversurfer562 wants to merge 8 commits intomainfrom
release/v5.10.0
Open

release: v5.10.0 — attune-author extraction + CVE sweep#139
silversurfer562 wants to merge 8 commits intomainfrom
release/v5.10.0

Conversation

@silversurfer562
Copy link
Copy Markdown
Member

Summary

  • Extract attune-author library into a sibling package (packages/attune-author/) housing the documentation authoring code (generator, manifest, staleness, polish, doc-gen pipeline). The package is workspace-only for v5.10.0; PyPI publication will happen as a separate release.
  • Clear all known CVEs (pip-audit 11 → 0). Direct: PyJWT >=2.12.0 in backend/enterprise/all. Lockfile: cryptography, langchain-core, langgraph, langgraph-checkpoint, mcp 1.12.4 → 1.27.0, pygments, requests, pydantic 2.10.6 → 2.12.5, plus dev-only black 26.1.0 → 26.3.1.
  • Drop the hidden cross-package dep: attune.help.__init__.py's unused attune_author re-exports were removed (no caller in src/, plugin/, or tests/ consumed them) and attune-author>=0.1.0 was removed from core deps. Verified import attune works with attune_author blocked on sys.meta_path.
  • Refresh README counts for v5.10.0: 14 skills (was 13), 36 MCP tools (was 38), 633 templates (was 540), 14,929 tests passing (was 15,446), and rename learn skill reference to coach.
  • CHANGELOG entries for both 5.9.0 (which shipped without one) and 5.10.0.
  • Capture session lessons learned (pip-audit pyenv shim trap, broken SDK security-audit subagent aggregation, hidden re-export deps, MetaPathFinder verification trick).

Version bumped to 5.10.0 across all 7 canonical files (pyproject.toml, plugin manifests, marketplace JSONs, plugin core, CLAUDE.md).

Test plan

  • pip-audit clean: 0 known vulnerabilities
  • Bandit (medium+) on src/ + packages/: 0 issues
  • Full unit suite: pytest tests/unit/11,013 passed, 0 failed, 129 skipped, 5 xfailed (66s)
  • Full test suite: pytest tests/14,929 passed, 1 unrelated failure in tests/test_production_smoke.py::test_debug_wizard_page_loads (live website content check, post-redesign drift)
  • Plugin version-match test: tests/unit/plugins/test_plugin_config_validation.py::test_all_versions_match — passing
  • Synthetic isolation: import attune + every attune.help.* submodule succeeds when attune_author is blocked via sys.meta_path
  • CI workflows green on this PR
  • Manual verification post-publish via python scripts/qa_post_release.py

Files NOT in this PR

The packages/attune-author/plugin/ work (Claude Code plugin scaffold + MCP server + 6 skills + agent + hook + 733 lines of new tests) is intentionally deferred to a follow-up PR. It's complete on local disk but the plugin tests can't run without the new [plugin] extra (in stash), the smoke test against claude --plugin-dir hasn't been executed, and attune-author 0.1.0 isn't on PyPI yet. Shipping it under a CVE-sweep release would muddle the narrative.

🤖 Generated with Claude Code

silversurfer562 and others added 8 commits April 6, 2026 11:01
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extract documentation authoring (generator, manifest, staleness,
polish, doc-gen pipeline, maintenance, preamble, bootstrap, CLI)
into a new sibling package `packages/attune-author/`. The
`attune.help` module re-exports these types for backward
compatibility, keeping existing imports stable.

Adds:
- `packages/attune-author/` — standalone authoring library with
  its own pyproject, tests, and Jinja2 meta templates
- 254 lines of test coverage for MCP help handlers
- New MCP smoke tests (`test_server.py`, `test_tool_schemas.py`)
- `coach` plugin skill (replaces `learn` after the rename)
- `scripts/qa_post_release.py` for post-publish validation
- Refreshed help template content with better trigger keywords

Updates:
- `attune.help.preamble` — contextual rendering improvements
- `attune.help.manifest` — `**` glob handling and trailing-slash
  resolution
- `plugin/hooks/help_on_error.py` — minor UX polish

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bumps dependency floors and refreshes the lockfile to clear
every vulnerability surfaced by `pip-audit` (11 → 0).

Direct dep changes (pyproject.toml):
- PyJWT: >=2.8.0 → >=2.12.0 in `backend`, `enterprise`, `all`
  extras (GHSA-752w-5fwx-jx9f)

Lockfile-only upgrades (transitive or already-allowed by spec):
- cryptography 46.0.4 → 46.0.6 (CVE-2026-26007, CVE-2026-34073)
- langchain-core 1.2.7 → 1.2.26 (CVE-2026-26013)
- langgraph 1.0.7 → 1.0.10 (CVE-2026-28277)
- langgraph-checkpoint 3.0.1 → 4.0.1 (CVE-2026-27794)
- mcp 1.12.4 → 1.27.0 (CVE-2025-66416)
- pygments 2.19.2 → 2.20.0 (CVE-2026-4539)
- pyjwt 2.10.1 → 2.12.1 (matches the new floor)
- requests 2.32.5 → 2.33.1 (CVE-2026-25645)
- pydantic 2.10.6 → 2.12.5 (transitive via mcp)
- pydantic-core 2.27.2 → 2.41.5 (transitive via pydantic)

Also refreshes `.secrets.baseline` to drop stale paths from
the pre-`empathy → attune` rename and rescans the current tree
(274 findings across 107 files, all confirmed false positives).

Smoke-tested core imports and ran the full unit suite
(11013 passed, 0 failed) with the new versions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Bumps attune-ai to 5.10.0 across all 7 canonical version
files (pyproject, plugin manifests, marketplace JSONs,
plugin core, CLAUDE.md). Adds CHANGELOG entries for both
5.9.0 (which shipped without one) and 5.10.0.

Highlights of this release:
- New `attune-author` sibling package extracts doc
  authoring (generator, manifest, staleness, polish,
  doc-gen pipeline) into a standalone library
- All 11 known CVEs cleared (pip-audit clean)
- 254 lines of new MCP help handler test coverage
- Full unit suite green: 11013 passed, 0 failed

Website is bumped from 5.9.0 to 5.10.0 to match.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removes the hidden cross-package dependency that would break
`pip install attune-ai` from PyPI:

1. Deletes the unused `attune_author` re-exports from
   `src/attune/help/__init__.py`. Nothing in `src/`,
   `plugin/`, or `tests/` imports the re-exported names
   (`GeneratedTemplate`, `FeatureManifest`, `check_staleness`,
   etc.) — every consumer imports the local submodules
   (`attune.help.bootstrap`, `attune.help.generator`,
   `attune.help.manifest`, `attune.help.staleness`, …)
   directly. Those submodules are self-contained and do
   not depend on `attune_author`.

2. Removes `attune-author>=0.1.0` from core dependencies in
   `pyproject.toml`. `attune-author` remains a workspace
   source under `[tool.uv.sources]` for in-repo development
   but is no longer a runtime requirement.

Verified by importing `attune`, `attune.help`, every help
submodule, the CLI, and the MCP server with a `MetaPathFinder`
that blocks `attune_author` imports — all succeed. Full unit
suite still green: 11013 passed, 0 failed.

Also captures lessons learned from the v5.10.0 prep session
in `.claude/CLAUDE.md` (pip-audit pyenv shim trap, broken
SDK security-audit subagent aggregation, dev vs developer
extra split, stash-pop schema-version revert, detect-secrets
"fake" placeholder pragma).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dev-only dependency. Surfaced by pip-audit after the previous
CVE sweep — black is in the `dev` extra and not part of any
end-user install path, but bumping it keeps the audit clean
for future automation runs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds three new lessons from the release prep session:

- Unused `__init__.py` re-exports become invisible runtime
  deps. This was the latent release blocker (lesson #3 from
  the previous session) — `attune.help.__init__.py` did
  `from attune_author.foo import Bar` purely as
  "backward-compat" re-exports that no caller in src/,
  plugin/, or tests/ ever consumed, but the import-time
  cost still required `attune_author` to exist for
  `import attune` to work.

- Verify optional dep boundaries with a MetaPathFinder
  rather than uninstalling. Includes a copy-pasteable
  snippet for blocking a target package on `sys.meta_path`
  so `import my_pkg` is exercised against a missing dep
  without mutating the venv.

- Removing one workspace dep can cascade to remove others.
  Dropping `attune-author` from core deps also evicted
  `attune-help` from the lockfile because the latter was
  only pulled in transitively. Always check what `uv lock`
  removes and verify the corresponding code paths have
  try/except fallbacks (in our case, `attune.help.preamble`
  already did).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Updates stale counts to match the actual state of the v5.10.0
codebase, verified against the source:

- Tests: 15,446 → 14,929 passing (`pytest tests/ -q -n auto`,
  189 skipped, 5 xfailed; one production-smoke test against
  the live website is unrelated and excluded)
- Skills: 13 → 14 (verified via `ls plugin/skills/`)
- MCP tools: 38 → 36 (verified via `tool_schemas.py`:
  workflow=20, utility=7, help=5, memory=4)
- Templates: 540 → 633 (verified in
  `packages/attune-help/src/attune_help/templates/`)
- `learn` skill → `coach` (the skill was renamed to avoid
  collision with Claude Code's built-in `/help`; the README
  still pointed at the old name)

Also rewrites the "MCP Tools" section. The old listing
totalled 33 tools across 7 categories — both the count and
the categorisation were stale. The new section reflects the
actual 4-category split exposed by `tool_schemas.py` and
includes the 3 new help endpoints (`help_init`,
`help_status`, `help_update`) added during v5.10.0 prep.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 7, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
attune-ai Error Error Apr 7, 2026 7:38am
website Ready Ready Preview, Comment Apr 7, 2026 7:38am

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 7, 2026

Codecov Report

❌ Patch coverage is 97.72727% with 1 line in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
src/attune/help/manifest.py 93.75% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core dependencies documentation Improvements or additions to documentation tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant