Changelog
=============================
Formal changelog tracking starts with 0.6.0 — for anything earlier, see the `commit history `_ on GitHub.
0.6.0b0
----------
Added
~~~~~~~~
- ``docker`` template activated: a single Dockerfile (installs through whichever package manager is active, non-root user, skips dev-only deps in production) and a ``docker-compose.yml`` generated automatically from every deployable runner.
- ``mongodb`` template.
- ``pipenv``/``uv`` package-manager templates, swappable with ``poetry`` at any time (``appcraft init uv`` or ``appcraft add_template pipenv``), converting existing dependencies along the way.
- ``web_scraping`` rebuilt as a shared base template with interchangeable engine adapters (``selenium``, ``playwright``, ``httpx``, ``curl_cffi``), including session handoff between an interactive (browser) engine and a faster reading-only one.
- ``AGENTS.md`` as the canonical, cross-tool project-instructions file (also read by Cursor, GitHub Copilot, Windsurf, Codex, and others), with ``CLAUDE.md`` importing it for full Claude Code semantics.
- Documentation moved to the repository root and versioned (``docs//``), with a version-selector page.
- This Changelog and a Contact page.
- ``LICENSE`` file (the project has always been MIT-licensed per its package metadata; the license text itself was missing).
Changed
~~~~~~~~
- ``sqlalchemy`` adapter rebuilt around ``DatabasePort``/ports/use-cases; the stale, unused ``App`` ORM model removed.
- ``flask`` split into a shared, non-standalone base plus ``flask_api``/``flask_ui``, composed via ``is_installed()`` instead of template-generation-time branching.
- Package-manager ownership of ``pyproject.toml`` moved to ``base``; ``poetry`` demoted from a hard dependency to a swappable (still default) template.
- Database/web-scraping ``Provider`` functions (``get_default_database_adapter()``, ``get_default_interactive_adapter()``, etc.) moved from ``application/providers/`` to ``infrastructure//provider.py``, correcting an ``application`` → ``infrastructure`` layering inversion.
- ``web_scraping`` runners consolidated: one shared ``docs_search``/``page_links`` runner per action (default adapter picked via config or direct injection) instead of one runner per engine.
- ``Repository``/``RepositoryBase`` now derive ``model``/``new_model`` automatically from their generic subscript, matching how ``BaseMapper`` already derived ``model``/``schema`` — a concrete repository no longer redeclares either.
- Pydantic usage inside ``domain/`` centralized to a single file (``domain/models/core/pydantic.py``); every other ``domain/`` file imports Pydantic-derived names from there instead of ``pydantic`` directly, so dropping Pydantic later (e.g. for a MicroPython target) only means rewriting that one file.
Fixed
~~~~~~~~
- ``appcraft init ``-triggered template swaps (e.g. ``appcraft init uv`` on a fresh project) crashing on a ``str``/``Path`` mismatch.
- ``HTTPXAdapter``: ``RuntimeError: Event loop is closed`` raised from ``finish()`` when driven by synchronous code (a runner, or the benchmark tool).
- ``init``/``add_template --help`` text hardcoding an outdated default-template list.
- ``SearchDocsUseCase`` not actually working against async (Playwright) adapters despite its typing suggesting it did.
- A broken "Contribute" link in this README.
Removed
~~~~~~~~
- ``git``/``github`` templates deactivated pending migration off the pre-``Port``/``use_cases`` architecture (they still work, just hidden from ``list_templates``/``init`` unless ``--install-inactive`` is passed).
- ``locales``/``logs`` templates deactivated (their dependencies were declared Pipfile-only, so a default Poetry project silently never installed them).
- Per-engine ``web_scraping`` runner files and several dead, unused type aliases left over from before the runner consolidation above.