AppForge v1.0: rescue the stranded publication series + fix the three v1.0 follow-ups - #10
Merged
Conversation
The project has been AppForge since the MCP engine rewrite, but the
package metadata, prompts, config comments, and UI still said
DevTeam.AI. Rename the product and package everywhere in active code,
and point the placeholder project URLs at the real repository.
- pyproject: name devteam-ai -> appforge, version 0.1.0 -> 1.0.0,
classifier Alpha -> Production/Stable, your-repo URLs -> adbarc92
- frontend: package version 0.0.0 -> 1.0.0, page title "frontend" ->
"AppForge" (backend/main.py already declared 1.0.0)
- prompts, config/*.yaml, agents, tests, CI, phase briefs: DevTeam.AI
-> AppForge; DEVTEAM_PHASE -> APPFORGE_PHASE
- uv.lock regenerated for the rename + version
docs/superpowers/{plans,specs} are left untouched: they are dated
design records that quote code verbatim, so rewriting them would
falsify history.
Declare the project complete for now at v1.0 and give it a single accurate entry point. - docs/STATUS.md: new canonical, living status doc (state summary + newest-first session log). Supersedes the dated Status-*.md snapshots, which still described the retired LangGraph orchestrator. - README: CI/version/tests/coverage/python/license badges; a Configuration table for the env vars read by backend/config.py; the CLI flag table for run.py; frontend test command; v1.0 framing. - README: rebuild the architecture diagram, whose box borders were 41/42/43 chars on different lines and whose worker stems did not line up. Entry point now shows the invocation that actually works (python -m backend.engine.run) rather than the appforge console script, which is declared but not installed. - CLAUDE.md: replace the stale "Active session pickup" block, which pointed new sessions at Status-2026_06_02.md and Phase 6 work that the engine rewrite made moot; flag the LangGraph-era sections as historical.
…d config
Three loose ends left by the v1.0 stamp.
1. `[project.scripts] appforge` was declared but never installed: with
no `[build-system]`, uv skips entry points ("Skipping installation
of entry points because this project is not packaged"). Added a
hatchling build backend packaging `backend/`, so
`uv run appforge run "<idea>"` works. Verified with a real 2-worker
run driving all six phases to complete.
2. Dependency metadata corrected rather than just trimmed:
- `langchain-core` is imported directly by four agents but was only
present transitively — now declared.
- `langchain` (meta) and `langchain-openai` are imported nowhere —
dropped.
- `langchain-community` is test-only (FakeListChatModel) — moved to
the dev group.
- stale `crewai`/`mem0ai`/`streamlit` mypy overrides and the
`langchain`/`crewai` keywords removed; keywords now describe what
this actually is (mcp, multi-agent, orchestration).
3. `ENABLE_PHASE4` was dead: read into Config and covered by two tests,
but nothing branched on it. Removed from `backend/config.py`,
`tests/unit/test_config.py`, and `e2e/playwright.config.ts` — which
also still set a `SQLITE_PATH` dropped back in cde5ab7.
Docs follow the code: the README CLI section and architecture diagram
now show `appforge run`, and the test count moves 154 -> 152 (the two
removed tests only covered the deleted flag).
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.
mainA merge-order accident stranded five commits. PR #8 (
feat/engine-plan-d-web-bridge→main) was merged at 17:20:39; PR #9 (publication-prep→feat/engine-plan-d-web-bridge) was merged at 17:20:49, ten seconds later. PR #9's content therefore landed on a branch that had already been merged into main.Nothing from the publication series is in
maintoday — not even the README rewrite and MIT LICENSE from #9's original scope:This PR targets
maindirectly, so merging it recovers the whole series and adds the follow-up fixes. No commits are lost and nothing needs re-doing by hand.Carried commits:
26c806e(README + LICENSE) ·ee758b6(rename + v1.0.0) ·5a68448(status doc + badges) ·ba82ca8(badge link) ·8509f6a(#9 merge) ·8916fbc(the fixes below).What was already reviewed in #9
docs/runs/2026-07-24/.config/*.yaml, agents, tests, CI, phase briefs, and the UI; placeholderyour-repoURLs → the real repository.docs/superpowers/{plans,specs}deliberately untouched — dated records that quote code verbatim.pyproject0.1.0→1.0.0, classifier Alpha → Production/Stable,frontend/package.json0.0.0→1.0.0.docs/STATUS.md— new canonical living status doc superseding the datedStatus-*.mdsnapshots, which still described the retired LangGraph orchestrator.backend/config.pyactually reads, a CLI flag table, and a rebuilt architecture diagram (its box borders ran 41/42/43 chars on three different lines).New in this PR — the three follow-ups
1. The
appforgeCLI now actually exists[project.scripts] appforgewas declared but never installed — with no[build-system], uv skips entry points entirely. Added a hatchling build backend packagingbackend/:2. Dependencies corrected — not merely trimmed
My note on #9 said the LangChain deps were "left over from the retired orchestrator". That was wrong, and the correction matters:
langchain-coreclarifying_pm,solution_architect,tech_lead,uiux_designer— but only present transitivelylangchain-anthropicChatAnthropicby those four agentslangchain-communityFakeListChatModel)langchain(meta)langchain-openaiRemoving all LangChain deps — what my earlier note implied — would have broken real-agent mode and four test files.
Also dropped the stale
crewai/mem0ai/streamlitmypy overrides and replaced thelangchain/crewaikeywords with ones describing what this is (mcp,model-context-protocol,multi-agent,orchestration).3.
ENABLE_PHASE4removedbackend/config.pyread it intoConfig.enable_phase4andtests/unit/test_config.pyasserted its default, but nothing branched on it — a no-op knob, the same shape as theSQLITE_PATHconfig dropped in cde5ab7. Removed from config, tests, ande2e/playwright.config.ts, which also still set that already-deadSQLITE_PATH. Both values were inert, so the e2e harness behaves identically.Docs kept in step
README CLI section and diagram now show
appforge run "<idea>"(geometry re-verified: box rectangular at cols 8/51, entry arrows under their rules at 24/46, worker stems aligned at 15/29/43). Test count 154 → 152 across badge, README, anddocs/STATUS.md— the two removed tests only covered the deleted flag.Verification
uv run pytest tests/cd frontend && npm testcd frontend && npm run builduv run ruff check backend/ tests/uv run black --check backend/ tests/uv sync --frozen --group devuv run appforge run … --workers 2154referencesCI note: the
e2eandvalidate-configjobs run plainuv sync(no dev group). They need onlylangchain-core/langchain-anthropic, both still main dependencies, so movinglangchain-communityto dev does not affect them.Found, not fixed
A
CancelledErrortraceback prints on CLI teardown when the state-server task is cancelled. Pre-existing (this PR touches no engine code) and cosmetic — the run reportsdoneand exits 0 — but noisy. Logged indocs/STATUS.mdas a known gap and next step.After merge
The
v1.0.0tag is still held locally atba82ca8. Because this stack uses merge commits, that commit becomes reachable frommainonce this lands, so the tag can be pushed as-is — or moved to the merge commit if you'd rather v1.0.0 include the follow-up fixes.