Actually add the pnpm workspace skeleton (T1, re-landing after #125 was mislabelled) - #126
Merged
Merged
Conversation
The admin dashboard (M4) requires a separate TypeScript/Node.js build parallel to the Rust gateway. This commit establishes the foundation per the architecture plan: - pnpm workspace with admin/ (the deployable) and packages/* (shared libraries) - turbo for task orchestration (build, lint, typecheck, test) - Biome 2.5.7 for formatting and linting (copied from cratestack house style, 2-space indent, 100 char line width) - TypeScript 5.9.3 pinned via .pnpmrc (compatible with Next 15.5, newer than would be otherwise required) - Node >=22, pnpm 11.18.0 (frozen) - .gitignore amendments to exclude workspace artifacts (.next/, .turbo/) and service worker builds The workspace is empty of applications and packages at this stage; no admin/ or packages/ contents are committed. pnpm install succeeds, cargo check --workspace passes undisturbed by the presence of the root JS config files (Cargo.toml uses an explicit members list, not globs), and the biome configuration is ready to lint on first use. This task precedes T2-T21 on the critical path and enables parallel TypeScript work. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
|
Without this, every `pnpm run <script>` in the workspace fails. pnpm 11 blocks dependency postinstall scripts by default, and `pnpm run` performs a deps-status check that re-runs `pnpm install` — so an unapproved build script takes down not just installs but every script, behind a stack trace that looks like an internal pnpm crash rather than a configuration gap. A subagent hit exactly that and concluded pnpm was broken, recommending `npm run` as a workaround; that would have quietly abandoned the pnpm workspace this repo is meant to use. The spelling is the trap. pnpm 10 called this `onlyBuiltDependencies` and took a list; pnpm 11 renamed it to `allowBuilds` and takes a map. The old key is not an error — it is silently ignored, and pnpm rewrites this file with an `allowBuilds` placeholder that is easy to miss. Both forms were tried against a clean `node_modules` before settling here. Verified from a clean install: `sharp install: Done`, then `pnpm --filter admin run build` compiles successfully. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4 tasks
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.
Summary
Lands the pnpm workspace skeleton that PR #125 claimed to add but did not: root
package.json,pnpm-workspace.yaml,turbo.json,biome.json,tsconfig.base.json,.npmrc,.pnpmrc,.nvmrc, plus workspace-aware.gitignoreamendments.Intent
PR #125 carried the title "Add the pnpm workspace skeleton for the admin dashboard (T1)" but was opened from head branch
claude/claim-loop-regression-tests— the same branch as #124. Its only changed file wascrates/sms-worker/tests/claim_live_postgres.rs, and because #124 had already merged that content, merging #125 produced an empty diff (git diff d1d8d29 4389947 --statreturns nothing). The commit4389947onmaintherefore has a title that describes work it does not contain.The actual T1 work was pushed correctly to
claude/dashboard-t1-workspaceand never had a PR. This is that PR, rebased onto currentmain.Caught by the next agent in the chain, which refused to start T3 on a workspace that did not exist rather than fabricating the missing skeleton under a different task's PR. Source of truth: #125, #124, and
git ls-remote --heads origin claude/dashboard-t1*.Scope
The skeleton only. No
admin/, nopackages/*, no application code, no CI job — later tasks own those.pnpm-workspace.yaml—packages: ["admin", "packages/*"]package.json— private rootvsms-workspace,packageManager: pnpm@11.18.0,engines.node >=22, turbo-delegating scriptsturbo.json,biome.json— shaped from~/dev/cratestack's equivalents so the user's repos stay consistenttsconfig.base.json—strict,noUncheckedIndexedAccess,exactOptionalPropertyTypes(matching the generated client's own tsconfig),verbatimModuleSyntax.pnpmrccarries the TypeScript 5.9.3 override (pnpm 11 no longer readspackage.json'spnpmfield).gitignore:/node_modules→node_modules/, plus.next/,.turbo/,admin/public/sw*.js. Existing*.pem/*.keyentries deliberately preserved.Verification
pnpm installsucceeds on the empty workspace;pnpm biome check .clean.cargo check --workspacepasses — the Cargo workspace uses an explicitmemberslist, so root JS config cannot disturb it.main;git diff origin/main...HEAD --statshows exactly the ten files above and nothing else. This time the diff was inspected before opening the PR, not just CI.Screenshots/Evidence
N/A — configuration only.
Risk Assessment
Low. Additive configuration; no Rust, no CI, no application code. The stale-titled empty commit
4389947is left onmainrather than rewriting shared history — this PR's description is the record of what happened.AI Usage Declaration
Authored by a Claude Code subagent (Haiku 4.5) and re-landed by Claude Opus 5 after the mislabelled merge was detected.
git ls-remoteshowed it intact on the remote).cargo check --workspacestill passes.main, and green CI is not evidence that a PR contains what it says.Reviewer Focus
Whether leaving the stale-titled empty commit
4389947onmainis acceptable, versus reverting it for a clean history. I chose not to rewrite shared history for a cosmetic title.