Review: Scaffold SvelteKit adapter-node + TypeScript + ESLint
Verdict: NEEDS_REFINEMENT
Board item #1087 —
forgejo_admin/westside-admin#6 — column: backlog (review gate: backlog→todo).Template Completeness
Issue declares
### Type: Task, so reviewed against template-issue (base template with Scope, no File Targets).- [x] Type
- [x] Lineage
- [x] Repo
- [x] User Story
- [x] Context
- [x] Scope
- [x] Acceptance Criteria
- [x] Test Expectations
- [x] Constraints
- [x] Checklist
- [x] Related
All required sections present for Task type. Body is clear, scope is well-bounded, anti-scope is explicit.
Traceability
- [x] story:admin-row-crud — story name confirmed on project page
- [x] story note verified —
story-westside-admin-admin-row-crudexists, listed inproject-westside-adminuser-stories table - [ ] arch:sveltekit-server — no matching arch note exists. Project page lists exactly three arch notes:
arch-domain-westside-admin,arch-dataflow-westside-admin,arch-deployment-westside-admin. The labelarch:sveltekit-serverdoes not correspond to any of them. The issue body's Related section actually points toarch-deployment-westside-adminandarch-dataflow-westside-admin, which suggests the correct label isarch:deployment-westside-admin(orarch:dataflow-westside-admin). - [x] Forgejo issue — #6 open, valid, well-formed
- [x] type:infra — appropriate for scaffolding work
Board-wide observation (not blocking this ticket): 10 other items on board-westside-admin use component-style arch labels (
arch:scopeddb-helper, arch:keycloak, arch:hooks-server, arch:page-server, arch:postgres-grants, arch:woodpecker-ci, arch:deployment) that also have no backing arch notes. Either the convention here is "label = arch component (sub-element of an arch diagram)" — in which case the three diagram notes are the universe of arch notes and labels point INTO them — or these labels need 7+ new arch notes. This is a project-level scoping decision, not a fix for this single ticket. Flagging for Ava.File Targets
N/A — Type is Task. Scope section enumerates files to be CREATED in an empty repo (
forgejo_admin/westside-admin, README only). All paths are conventional SvelteKit scaffolding paths and don't need to be verified against the repo (it's empty by design).Repo Placement
OK. Issue filed on
forgejo_admin/westside-admin; scope is entirely in that repo. Does not touch pal-e-deployments, pal-e-platform, or basketball-api.Dependencies
None upstream — this is the first foundational ticket per Lineage ("First foundational ticket for westside-admin. No parent issue."). The scope explicitly defers
src/lib/server/db.ts (Drizzle), hooks.server.ts (Keycloak), Dockerfile, and .woodpecker.yaml to their own tickets — those tickets exist on the board (#1, #2, #7, #8 etc.) and are correctly downstream of this one. This ticket BLOCKS most/all other westside-admin repo tickets, which is correct sequencing.Acceptance Criteria
Six AC, all agent-verifiable via shell commands (
npm install, npm run check, npm run build, npm run dev, node build/index.js, lint/prettier). Concrete, testable, no ambiguity. Test Expectations adds a sensible build sanity check (node build/index.js responds 200 on /).Blast Radius
None. New empty repo, no consumers. The only interaction with existing systems is the "match package versions to
westside-app" constraint, which is advisory and easy to verify.Soft note on the constraint itself: westside-app uses
adapter-static + plain Svelte + jsconfig.json (no TypeScript) + vite.config.js + no ESLint/Prettier config. This ticket requires TypeScript + ESLint + adapter-node. So "match package versions where applicable" really only applies to @sveltejs/kit (^2.16.0), svelte (^5.19.0), svelte-check (^4.1.4), vite (^6.1.0). Dev agent should be told this explicitly so they don't go hunting for ESLint config in westside-app and find nothing. Minor [BODY] tightening, not blocking.Decomposition Assessment
6 AC, 1 repo, ~10 files of scaffolding, all conventional SvelteKit boilerplate. Estimated agent time: 5–10 minutes (mostly
npm create svelte, configure adapter, add ESLint). Borderline on the 5-minute rule but the work is highly cohesive (one repo, one PR, one commit) and decomposing scaffolding into sub-tickets would create more overhead than it saves. No decomposition needed.Recommendation
[LABEL]Changearch:sveltekit-servertoarch:deployment-westside-admin(matchesarch-deployment-westside-adminnote that the issue's Related section actually links to). OR adopt a component-label convention project-wide and create the matching arch notes — this is a project-level call for Ava, not a per-ticket fix.[BODY](minor) In Constraints, narrow "Match package versions to forgejo_admin/westside-app" to specifically:@sveltejs/kit ^2.16.0,svelte ^5.19.0,svelte-check ^4.1.4,vite ^6.1.0. Note that westside-app usesadapter-staticand has no TypeScript or ESLint config, so those areas have no reference to match.[SCOPE](board-wide, not this ticket) Decide on arch label convention for board-westside-admin. Either (a) labels reference the three diagram notes only (arch:domain-westside-admin,arch:dataflow-westside-admin,arch:deployment-westside-admin) and component-level grouping happens inside those notes, or (b) create component-level arch notes for the 7 currently-orphaned labels. Affects 10 other board items.
Once the arch label is corrected (single-line fix on the board item) this ticket is READY. Body refinement is nice-to-have, not blocking.