FE-843: Toolchain profile expansion — TS runtimes + live profile selection#198
FE-843: Toolchain profile expansion — TS runtimes + live profile selection#198kostandinang wants to merge 4 commits into
Conversation
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
PR SummaryLow Risk Overview Registry: Selection at plan time: Architect: Optional Docs/tests: Reviewed by Cursor Bugbot for commit 8837e9b. Bugbot is set up for automated code reviews on this repo. Configure here. |
|
Follow-on work tracked in FE-864 — Orchestrator enhancements: brownfield feature delivery from spec. This branch's deferred items (structured spec-profile field, outstanding |
…ard queue Co-authored-by: Claude <noreply@anthropic.com>
…t/deno profiles Profiles are now data literals (path templates + argv template + conventions prose) compiled into the unchanged Toolchain interface — adding a runtime is one data entry. Registry invariants pinned enumerably across all profiles. Co-authored-by: Claude <noreply@anthropic.com>
…d into plan.yaml brunch plan gains --profile=<id> (validated via parseProfileId); the emitter resolves the chain once and stamps the id on both the authored and fallback plans, so cook always reads the profile the emitter used. resolveToolchain now throws UnknownProfileError on a typo'd id instead of silently running bun; absent stays lenient for hand-authored fixtures. Co-authored-by: Claude <noreply@anthropic.com>
architectPlan's schema gains an optional profile enum (registry ids, null when the spec is silent); the emitter chain becomes flag ≫ spec profile ≫ architect-classified ≫ bun. A hallucinated profile fails the schema parse and rides the existing deterministic fallback. D160-K intact — classification reads projected spec prose only. Queue exhausted: CARDS.md retired; PLAN frontier marked branch-complete. Co-authored-by: Claude <noreply@anthropic.com>
c5efb9a to
8837e9b
Compare
a6b27a5 to
81e0833
Compare

Stack Context
Expands the FE-829 toolchain contract so
brunch cookcan build on more technologies than bun, and so the profile selection path actually works.What?
project-profile.ts) — profiles are data literals (path templates + argv template + conventions prose) compiled into the unchangedToolchaininterface. Addsnode-vitest,node-test,node-jest,denoalongsidebun/brunch; registry invariants pinned enumerably over every entry. Adding a runtime = one data entry.brunch plan --profile=<id>(validated); the emitter resolves the chain once (--profileflag ≫ specprofile≫ architect-classified ≫bun) and stamps the resolved id intoplan.yamlon both the authored and fallback paths, so cook always reads the profile the emitter used (I130-K).resolveToolchainnow throwsUnknownProfileErroron a typo'd id instead of silently running bun; absent stays lenient for hand-authored fixtures.architectPlanschema (nullwhen the spec is silent); a hallucinated id fails schema parse and rides the existing deterministic fallback. No host introspection (D160-K intact).Why?
Before this branch both implemented profiles were TypeScript and the selection path was dead — nothing populated
snapshot.profile, so every cook run silently resolved to bun, and a typo'd profile id silently defaulted rather than erroring. Adding profiles without live selection changes nothing at runtime; live selection without strictness hides real misconfiguration.Deliberately not included (recorded in PLAN as follow-ons): a harness install verb (the cook agent scaffolds + installs per A98), fail/infra test-outcome split, brownfield drift-check at cook open,
brunch detect. Outer-loop validation outstanding: a greenfield cook smoke with--profile=node-vitestas the conventions-prose oracle.🤖 Generated with Claude Code