Skip to content

feat(framework): remove the architect (#545)#549

Merged
suleimansh merged 2 commits into
mainfrom
feat/remove-architect-545
Jul 15, 2026
Merged

feat(framework): remove the architect (#545)#549
suleimansh merged 2 commits into
mainfrom
feat/remove-architect-545

Conversation

@suleimansh

Copy link
Copy Markdown
Member

Closes #545. Second of two, after #548 (meta-select), which is merged.

A build no longer picks the stack. There is no architect turn, and nothing in the build prompt tells the agent what to build on: it reads the workspace and decides for itself, the way it would outside The Framework.

Doing stack guidance well is deep work. What we had was not designed, it accumulated, so it goes rather than half-ships.

What goes, and why it had to go together

The architect was not a detachable step. The build prompt interpolated its answer (Stack: ${plan.stack} plus its narration), and it was the only thing that ever fed the decisions ledger. So these go with it:

  • The plan-approval gate ("Approve this plan?" / "Use X instead") and re-architect. The agent-authored gates survive: a build turn that stops to ask still pauses the run with Approve / Decline, and Dashboard control channel: Stop + choice gates for runs the dashboard didn't start #344 steering still works (its test now steers the build's await-choices gate and still asserts the pick is attributed to the user).
  • The decisions ledger and DECISIONS.md. Nothing else ever wrote to it. MEMORY_FILES also drops its DECISIONS.md entry, which claimed the file was read-only because The Framework writes it - no longer true.
  • The "Stack & rationale" and "Decisions ledger" panels. Loop status, deploy, and session cards are unchanged.
  • agentArchitect, STACK_TRADEOFFS (the Vike-vs-Next tradeoff block), BootstrapSteps.architect, BootstrapOptions.ledger, the architect bootstrap event, the Architect* types, and the plan field on the build / loop / deploy contexts and on BootstrapResult. The flow is now scope -> build -> loop -> deploy.
  • driverArchitect, reArchitect, architectPrompt, parseArchitectPlan, architectPlan, decisionLedger, RunFrameworkResult.ledger, and bench:architect.

This does NOT finish the job on its own

The stack opinion outlives the architect. personas/library.ts still hard-instructs the data modeler to "Default to Prisma", and the Vike preset personas are stack-opinionated. A build still gets pushed toward a stack until the personas go in #547. The two need to land together to actually deliver "a build stops being opinionated about the stack" - flagging it so this isn't read as complete on its own.

Open question, not blocking

@gemstack/ai-autopilot's decisions/ module now has no feeder and no consumer. I left it exported rather than widen this PR into another published package's public API. Delete it too, or keep it as a seam? Worth knowing either way: loadLedger and record_decision were already exported-but-never-wired, so the DECISIONS.md round-trip the docs promised has never actually worked.

Changesets

Deleted 3 whose entire subject was the architect (architect-await-gate, architect-drop-vike-nudge, gate-refire-after-realternative), and edited 5 that describe surviving features in architect terms. None had shipped (#285 is still open).

Verify

  • framework 540 tests (539 pass / 0 fail / 1 skipped - the skip is a pre-existing Docker-unreachable case); ai-autopilot 316 pass; bootstrap-quickstart 2 pass
  • workspace typecheck + build clean (22/22)
  • framework --fake --no-dashboard runs the whole flow end to end with no architect phase: scope -> build -> checklist pass 1 -> improve -> checklist pass 2 -> deploy, production-grade in 2 passes, exit 0
  • the ai-autopilot example was run for real (pnpm start): streams scope -> build -> loop -> deploy, writes its files, lands the deploy URL

Two things that were load-bearing rather than cosmetic, in case they matter on review: the fake script's architect turn had to be removed or every scripted run desynced by one turn (that was the real cause of a serve-gate failure), and pnpm test compiles to dist-test/ where tsc leaves stale .js for deleted .ts - rm -rf dist-test before trusting a run.

A build no longer runs a turn to pick the app's stack, and no longer tells
the agent what to build on. The agent reads the workspace and decides for
itself. buildPrompt / extendPrompt / scaffoldPrompt take just the intent.

Gone with it, because the architect was their only source: the plan-approval
gate and re-architect, the decisions ledger in a run and the DECISIONS.md it
wrote, and the dashboard's Stack & rationale + Decisions ledger panels. The
agent-authored await gates a build turn raises are untouched.

The bootstrap flow is now scope -> build -> loop -> deploy.
parseArchitectPlan's JSON helpers (coerceStrings, FENCE, lastJsonObject)
had no callers left; noUnusedLocals is off, so tsc stayed quiet. Plus the
doc comments still describing scope -> architect -> build.
@suleimansh suleimansh self-assigned this Jul 15, 2026
@suleimansh suleimansh added the enhancement New feature or request label Jul 15, 2026
@suleimansh
suleimansh merged commit 9442761 into main Jul 15, 2026
2 checks passed
@suleimansh
suleimansh deleted the feat/remove-architect-545 branch July 15, 2026 16:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[The Framework] Remove meta-select + the architect

1 participant