Skip to content

Install-path testing: install.sh smoke tests, CI, and dev docs#9

Merged
alexkroman merged 13 commits into
mainfrom
install-path-testing
Jun 5, 2026
Merged

Install-path testing: install.sh smoke tests, CI, and dev docs#9
alexkroman merged 13 commits into
mainfrom
install-path-testing

Conversation

@alexkroman

Copy link
Copy Markdown
Collaborator

What

Hardens install.sh with real coverage and lands supporting CI/dev-tooling and the in-repo design docs.

install.sh testing

  • Shell-logic unit tests (tests/test_install_sh.py) with an AAI_SPEC seam so the script's branching is testable without a real install.
  • Real install-and-run smoke test (tests/test_install_script_smoke.py, install_script marker) that actually installs and boots the CLI.
  • shellcheck of install.sh wired into scripts/check.sh.
  • install-smoke CI job exercising install.sh end-to-end.

CI / tooling

  • CI runs on every push, not just main.
  • .mcp.json: GitHub MCP server authenticated via a ${GITHUB_PAT} header.
  • release-prep Claude skill + team-shared .claude automations.
  • mypy annotation fix on the wheels list.

Docs

  • CLAUDE.md agent/dev guide.
  • Track docs/superpowers/{plans,specs} in version control.

Note on merge

This branch predates the just-merged #8, so it overlaps on ci.yml, install.sh, pyproject.toml, scripts/check.sh, and tests/test_install_sh.py. A rebase onto current main is likely needed before merge to resolve those.

🤖 Generated with Claude Code

alexkroman-assembly and others added 13 commits June 4, 2026 19:54
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
These design plans and specs were gitignored, so the rationale behind
major features lived on disk but not in history. Tracking them makes the
"why" available via git and to anyone who clones the repo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Captures the dev commands (uv run + check.sh), test markers and the
90% coverage gate, naming/packaging gotchas (aai_cli vs aai-cli vs aai,
committed templates with renamed dotfiles), architecture, and the
errors-to-stderr/data-to-stdout convention so a fresh agent has the
in-repo context that previously lived only outside the repo.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Track the shareable parts of .claude/ (settings, agents, skills, commands)
and add .mcp.json, narrowing .gitignore to only ignore settings.local.json.

- settings.json: format/lint-on-edit (PostToolUse ruff) and a lock/secret-file
  write guard (PreToolUse); a conservative committed permission allowlist
  (uv/ruff/mypy/pytest/pre-commit/check.sh + read-only git/gh + docs MCP) plus
  a deny block on reading .env/keys.
- agents/: security-reviewer (auth/credential/subprocess) and
  template-contract-reviewer (aai init templates + wheel packaging).
- skills/: /check (full gate) and /release-prep (version+build+smoke), user-only.
- commands/: /review-changes wires both reviewers, scoped to the diff.
- .mcp.json: GitHub remote MCP server (per-user OAuth, no token committed).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The bare http config made Claude Code attempt OAuth dynamic client
registration, which api.githubcopilot.com rejects ("does not support
dynamic client registration"). Pass a token via the Authorization
header instead, read from ${GITHUB_PAT} so no credential is committed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolve conflicts in pyproject.toml and scripts/check.sh: keep both the
install_script (install.sh smoke test) and install (per-template dep install)
pytest markers, and exclude all three slow marker sets from the default gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… [dev] extra

Dev deps are a PEP 735 dependency-group, not an optional extra, so
`pip install -e ".[dev]"` installed no dev deps (pip just warns the extra is
missing) and pytest was absent — `python -m pytest` failed with "No module
named pytest". Mirror the lint/test job: upgrade pip (>= 25.1 for --group) and
install with `--group dev`.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The merge with main raised the minimum Python to 3.11 (install.sh +
pyproject), but the install.sh shell-logic tests still asserted the old
"Python 3.10+ is required" message — update them to 3.11. Also add the
trailing newline end-of-file-fixer wanted on the account-commands plan doc.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@alexkroman alexkroman merged commit 8d0b58c into main Jun 5, 2026
13 checks passed
@alexkroman alexkroman deleted the install-path-testing branch June 5, 2026 03:52
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