Repository navigation
chore: stabilize, document, and rebrand before the frontend phase (9.5) - #15
Merged
Merged
Conversation
Adds scripts/dev.sh: starts backend (uv run fastapi dev), frontend (bun run dev, guarded to skip cleanly if package.json ever lacks a dev script), Postgres/Redis via docker compose (idempotent up, skips if already running), and a window tailing compose logs for db/redis (the backend has no LOG_FILE by default, so its own reload window already shows its stdout logs live). All windows live in one botpit-dev tmux session; re-running the script attaches to the existing session instead of duplicating it. Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
Backend (uv lock --upgrade): 30 packages bumped within their existing pyproject.toml ranges (fastapi, sqlalchemy, sqlmodel, starlette, uvicorn, pydantic, alembic, psycopg, etc.) -- full suite (753 tests) and ruff/mypy/ty all green after. Frontend (bun update): within-range bumps to react-query/router, react, react-hook-form, lucide-react, tailwindcss, biome, vite, and others -- build and lint clean after (aside from pre-existing template-logo lint findings a parallel rebranding task resolves). Deliberately not bumped (documented in docs/development/dependency-audit.md once that file lands): @tanstack/react-table (v8->v9, a major bump needing real code migration in DataTable.tsx/columns.tsx -- deferred to Phase 10, which will likely touch those files anyway) and typescript (v6->v7, same reasoning); axios/form-data (exact-pinned, not caret -- left untouched rather than overriding what looks like a deliberate pin without knowing why). Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
Moves every botpit-relevant doc under docs/ per the target structure:
- docs/architecture/phase-{01..09,02b}-*.md: one historical snapshot per
completed phase, mined from PROGRESS.md's own build log plus the actual
code/tests from each phase; docs/architecture/latest_architecture.md is
a fresh, current-state snapshot read directly from backend/app/.
- docs/api/api-reference.md: generated from the actual routes, Pydantic
models, and event schema in backend/app/, including the event
visibility/filtering rules.
- docs/development/setup.md and docs/deployment/{staging,production}.md:
botpit-specific rewrites folding in the real operational content from
the template's own root deployment.md/deployment-docker-compose.md/
development.md (now deleted), stripped of template branding. Staging
and production are documented as planned, not live, per the standing
no-server-until-local-is-done constraint.
- docs/stack.md: consolidates docs/research/stack-choices.md (now
deleted, along with the empty research/ dir) with DECISIONS.md's
reasoning into one technology-surface reference.
- docs/persistence.md rewritten: it still described Phase 1's async
SQLAlchemy/SQLite-dual-dialect design, superseded at Phase 2b by the
template's sync SQLModel/Postgres-only persistence layer.
- release-notes.md (the upstream template's own changelog) deleted.
Every other pre-existing docs/*.md file was reviewed and left in place —
none were stubs.
Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
Renames backend/pyproject.toml and frontend/package.json off their template-inherited "app"/"frontend" placeholder names; replaces the Full-Stack-FastAPI-Project title/favicon/logo/footer credits across frontend/index.html and frontend/src/ with a plain botpit wordmark and a link to the real repo; deletes the now-unreferenced template logo/favicon SVGs. Rewrites README.md (marketing-facing, links out to docs/ instead of inlining technical detail) and CONTRIBUTING.md (real branch/PR conventions and gate commands, not the template's). Adds LICENSE (MIT), CODE_OF_CONDUCT.md (Contributor Covenant v2.1), SECURITY.md (private GitHub advisory reporting, given real auth/RBAC now exists), and llms.txt (a factual project summary for crawlers/LLM tools). Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
… audit doc Renaming backend/pyproject.toml's project name off "app" broke hatchling's default wheel file-selection heuristic (it looks for a source directory matching the project name; the actual tree is still app/) -- fixed with an explicit [tool.hatch.build.targets.wheel] packages = ["app"]. Renaming frontend/package.json's name off "frontend" broke every `bun run --filter frontend ...` call site outside .github/workflows/ (root package.json's dev/lint/test scripts, scripts/generate-client.sh) -- updated to --filter botpit-frontend. .github/workflows/deploy.yml has the same stale reference but stays untouched, matching the standing decision (PROGRESS.md, Phase 2b) to leave template CI/deploy workflows as-is until Phase 14. Also adds docs/development/dependency-audit.md, recording the Phase 9.5 dependency-upgrade pass already committed on this branch. Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
…hots PROGRESS.md: fix stale "PR pending" text on Phases 6-9's status rows (all merged, PR numbers known) and record Phase 9.5 in full. img/: nine full-stack-fastapi-template dashboard/login/mailpit screenshots, unreferenced by the rewritten README -- the last piece of carried-over template branding this phase's other tasks didn't have in their explicit scope. Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
service.leave() calls self.get(room_id) first, which raises LookupError (-> 404) for an unknown room -- the doc said "always 200," missing that path. Caught by the python-reviewer round on PR #15. Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
README overclaimed "real time" spectator visibility; it's HTTP polling, per this repo's own llms.txt and latest_architecture.md. Softened and linked to the API reference instead. latest_architecture.md drifted within its own phase: written before the rebranding commit touched frontend/'s title/favicon/logo/footer, then never updated to say so. Added one clause noting that touch was cosmetic only. Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
The rebranding commit renamed frontend/package.json's name from
"frontend" to "botpit-frontend" but never re-ran `bun install`, so
bun.lock still had the workspace entry keyed "frontend" -- CI's
`bun install --frozen-lockfile` correctly caught the mismatch
("lockfile had changes, but lockfile is frozen") and failed the
pre-commit job. Regenerated via a plain `bun install`; frontend
build/lint verified clean after.
Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
Same class of regression as the earlier hatchling fix: the rebrand renamed the backend's uv package off "app", but the Dockerfile's two `uv sync ... --package app` invocations were never updated, breaking every docker-compose-based CI job (test-docker-compose, all 4 test-playwright shards) with "error: Could not find root package `app`". Verified locally: docker compose build, prestart.sh, and up --wait backend adminer all succeed; both CI health-check curls pass against the running stack. Claude-Session: https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A deliberate pause between backend work and Phase 10 (frontend): stabilize, document, and rebrand everything built so far. No new game features.
docs/development/dependency-audit.md): 30 backend packages upgraded within existing ranges (uv lock --upgrade), ~20 frontend packages within range (bun update). Two major bumps deliberately deferred to Phase 10 (@tanstack/react-tablev8→v9,typescriptv6→v7 — both need real code migration in files Phase 10 will touch anyway);axios/form-data's exact pins left alone (unknown reason, not worth the risk).docs/:docs/architecture/gets one historical snapshot per completed phase (00–9, plus 2b for the template pivot) plus an always-currentlatest_architecture.md;docs/api/api-reference.mdgenerated from the real route/model code;docs/stack.md,docs/development/setup.md,docs/deployment/{staging,production}.mdconsolidated from scattered/stray root docs (all deleted).DECISIONS.md/PROGRESS.mdstay at root as the project's permanent logs.scripts/dev.sh: one-command tmux dev launcher (backend, frontend, Compose, logs), idempotent, actually run twice to verify.DECISIONS.md/PROGRESS.md/.github/workflows/*deliberately untouched (legitimate history / a standing, recorded Phase-14 deferral).README.mdrewritten marketing-facing,CONTRIBUTING.mdrewritten with real conventions, addedLICENSE(MIT),CODE_OF_CONDUCT.md(Contributor Covenant),SECURITY.md,llms.txt.backend/pyproject.toml's package broke hatchling's wheel file-selection (fixed with explicitpackages = ["app"]); renamingfrontend/package.json's package broke everybun run --filter frontend ...call site this repo's own tooling depends on (fixed in rootpackage.jsonandscripts/generate-client.sh;.github/workflows/deploy.yml's identical stale reference left alone per the Phase 14 deferral).robots.txt/sitemap.xml/OG tags — they only make sense once a deployed, crawlable frontend exists, and neither does yet.Process note
Used git worktrees + parallel subagents for the three genuinely independent pieces (docs reorg,
scripts/dev.sh, rebrand+root-files), per the brief. Planned directly rather than through a separate planner-agent call — full context of all nine prior phases was already in hand from having built them this session, so a fresh planner subagent would only re-derive it from this same PROGRESS.md at real cost, not add judgment.Verification
ruff check/mypy app/ty check appclean, full suite 753 tests green.bun run build/bun run lintclean.prek run --all-filesclean across the whole repo.docs/exceptREADME.mdand the standard root files (LICENSE,CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md) plusDECISIONS.md/PROGRESS.md(permanent project logs, not "documentation to reorganize").https://claude.ai/code/session_01PVbV8Fd3gk6zGDabt8AWP8