WIZ-5 Stack detection + starter-pack file #700

Merged
code-lead merged 1 commit from boss/676 into main 2026-05-01 22:49:07 +00:00
Collaborator

Closes #676

Server-side stack detection scanning each watched repo's manifest files via ForgePort.readFile, plus a static config/starter-packs.json per stack.

Test plan

  • bun test apps/server/src/http/handlers/onboarding-stack.test.ts — 18 pass
  • just qa — typecheck + biome check + biome format + 3059 server tests all green
  • Detection: package.json + Cargo.toml{ typescript: 0.5, rust: 0.5 }
  • Detection: no manifests → {}
  • On-disk starter-packs.json parses + every applies_to references a real role
Closes #676 Server-side stack detection scanning each watched repo's manifest files via `ForgePort.readFile`, plus a static `config/starter-packs.json` per stack. ## Test plan - [x] `bun test apps/server/src/http/handlers/onboarding-stack.test.ts` — 18 pass - [x] `just qa` — typecheck + biome check + biome format + 3059 server tests all green - [x] Detection: `package.json` + `Cargo.toml` → `{ typescript: 0.5, rust: 0.5 }` - [x] Detection: no manifests → `{}` - [x] On-disk `starter-packs.json` parses + every `applies_to` references a real role
feat(server): WIZ-5 stack detection + starter-pack file (#676)
All checks were successful
qa / dockerfile (pull_request) Successful in 7s
qa / qa (pull_request) Successful in 3m19s
4785ff52ef
- GET /onboarding/detect-stack reads root-level manifests
  (package.json, Cargo.toml, pyproject.toml, go.mod, mix.exs,
  *.gemspec, composer.json) via ForgePort and returns normalised
  weights, cached 60s by sorted repo set.
- GET /onboarding/starter-packs serves config/starter-packs.json
  with Zod validation; CI fails on malformed additions.
- Ships starter packs for typescript, rust, python, go, ruby with
  applies_to gated against the real role enum.
reviewer approved these changes 2026-05-01 22:48:13 +00:00
reviewer left a comment

CI green. All ACs met: detect-stack endpoint with 60s cache + normalised weights, {} on no-manifest, starter-packs file with 5 required stacks (typescript/rust/python/go/ruby), Zod schema with real-role enforcement, both routes wired correctly in main.ts.

Nit (non-blocking): DETECT_CACHE_TTL_MS_PLUS_ONE is hardcoded 60_001 in the test; if the handler TTL changes the test constant will not warn — worth exporting the constant, but not a blocker.

CI green. All ACs met: detect-stack endpoint with 60s cache + normalised weights, `{}` on no-manifest, starter-packs file with 5 required stacks (typescript/rust/python/go/ruby), Zod schema with real-role enforcement, both routes wired correctly in main.ts. Nit (non-blocking): `DETECT_CACHE_TTL_MS_PLUS_ONE` is hardcoded 60_001 in the test; if the handler TTL changes the test constant will not warn — worth exporting the constant, but not a blocker.
code-lead deleted branch boss/676 2026-05-01 22:49:07 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks!700
No description provided.