5. Changelog
Formal changelog tracking starts with 0.6.0 — for anything earlier, see the commit history on GitHub.
5.1. 0.6.0b0
5.1.1. Added
dockertemplate activated: a single Dockerfile (installs through whichever package manager is active, non-root user, skips dev-only deps in production) and adocker-compose.ymlgenerated automatically from every deployable runner.mongodbtemplate.pipenv/uvpackage-manager templates, swappable withpoetryat any time (appcraft init uvorappcraft add_template pipenv), converting existing dependencies along the way.web_scrapingrebuilt 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.mdas the canonical, cross-tool project-instructions file (also read by Cursor, GitHub Copilot, Windsurf, Codex, and others), withCLAUDE.mdimporting it for full Claude Code semantics.Documentation moved to the repository root and versioned (
docs/<version>/), with a version-selector page.This Changelog and a Contact page.
LICENSEfile (the project has always been MIT-licensed per its package metadata; the license text itself was missing).
5.1.2. Changed
sqlalchemyadapter rebuilt aroundDatabasePort/ports/use-cases; the stale, unusedAppORM model removed.flasksplit into a shared, non-standalone base plusflask_api/flask_ui, composed viais_installed()instead of template-generation-time branching.Package-manager ownership of
pyproject.tomlmoved tobase;poetrydemoted from a hard dependency to a swappable (still default) template.Database/web-scraping
Providerfunctions (get_default_database_adapter(),get_default_interactive_adapter(), etc.) moved fromapplication/providers/toinfrastructure/<concept>/provider.py, correcting anapplication→infrastructurelayering inversion.web_scrapingrunners consolidated: one shareddocs_search/page_linksrunner per action (default adapter picked via config or direct injection) instead of one runner per engine.Repository/RepositoryBasenow derivemodel/new_modelautomatically from their generic subscript, matching howBaseMapperalready derivedmodel/schema— a concrete repository no longer redeclares either.Pydantic usage inside
domain/centralized to a single file (domain/models/core/pydantic.py); every otherdomain/file imports Pydantic-derived names from there instead ofpydanticdirectly, so dropping Pydantic later (e.g. for a MicroPython target) only means rewriting that one file.
5.1.3. Fixed
appcraft init <package-manager>-triggered template swaps (e.g.appcraft init uvon a fresh project) crashing on astr/Pathmismatch.HTTPXAdapter:RuntimeError: Event loop is closedraised fromfinish()when driven by synchronous code (a runner, or the benchmark tool).init/add_template --helptext hardcoding an outdated default-template list.SearchDocsUseCasenot actually working against async (Playwright) adapters despite its typing suggesting it did.A broken “Contribute” link in this README.
5.1.4. Removed
git/githubtemplates deactivated pending migration off the pre-Port/use_casesarchitecture (they still work, just hidden fromlist_templates/initunless--install-inactiveis passed).locales/logstemplates deactivated (their dependencies were declared Pipfile-only, so a default Poetry project silently never installed them).Per-engine
web_scrapingrunner files and several dead, unused type aliases left over from before the runner consolidation above.