Skip to content

Latest commit

 

History

History
50 lines (34 loc) · 2.27 KB

File metadata and controls

50 lines (34 loc) · 2.27 KB

spec-kit (AppFolio Fork)

Read @FORK.md for full context on this fork.

Branch & Commit Strategy

  • af-main is the fork branch. It accumulates commits from PRs and releases.
  • On feature branches, squash to one commit before merge.
  • Before integrating an upstream release, squash all af-main commits since the fork baseline (see @FORK.md) into one commit, then merge the upstream tag. Resolve conflicts per @FORK.md.
  • Use Conventional Commits on feature branches: feat:, fix:, chore:, etc.

Git Rules (enforced by Claude unless user explicitly overrides)

  • Always work on a feature branch. Never commit directly to af-main without user confirmation.
  • Never push merge commits. If a pull or merge introduces a merge commit, rebase instead.
  • Before force-pushing af-main: confirm with the user first — this rewrites shared history.

Development

  • Install locally (dev): uv tool install . --force --reinstall
  • Install from release: uv tool install git+https://github.com/appfolio/spec-kit@af-stable --force
  • Test: specify-af version then specify-af init --here --ai claude in a scratch directory
  • Binary is specify-af, package is specify-af-cli
  • af-stable branch is the end-user install target — only updated when a release is tagged

Testing

Run tests before pushing. Also offer to run tests after completing a significant chunk of work, even if a push isn't imminent:

uv run --extra test python -m pytest tests/ --tb=no -q

For focused checks (see TESTING.md for details):

uv run --extra test python -m pytest tests/test_core_pack_scaffold.py -q    # packaging/scaffolding
uv run --extra test python -m pytest tests/test_agent_config_consistency.py -q  # agent config wiring

Known failures

  • tests/integrations/test_cli.py::TestForceExistingDirectory::test_without_force_errors_on_existing_dir — upstream test that fails when terminal width is narrow (Rich panel wraps "already exists" across lines). Safe to ignore.

Key Files (AF-specific)

  • src/specify_cli/af_init.py — extension auto-install and upgrade logic
  • extensions/af/ — bundled AF extension (lifecycle hooks)
  • extensions/catalog.json — extension registry (includes AF entries)
  • pyproject.toml — force-include for bundled extensions