Skip to content

Actually add the pnpm workspace skeleton (T1, re-landing after #125 was mislabelled) - #126

Merged
stephane-segning merged 2 commits into
mainfrom
claude/dashboard-t1-workspace
Aug 8, 2026
Merged

Actually add the pnpm workspace skeleton (T1, re-landing after #125 was mislabelled)#126
stephane-segning merged 2 commits into
mainfrom
claude/dashboard-t1-workspace

Conversation

@stephane-segning

Copy link
Copy Markdown
Contributor

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 .gitignore amendments.

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 was crates/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 --stat returns nothing). The commit 4389947 on main therefore has a title that describes work it does not contain.

The actual T1 work was pushed correctly to claude/dashboard-t1-workspace and never had a PR. This is that PR, rebased onto current main.

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/, no packages/*, no application code, no CI job — later tasks own those.

  • pnpm-workspace.yamlpackages: ["admin", "packages/*"]
  • package.json — private root vsms-workspace, packageManager: pnpm@11.18.0, engines.node >=22, turbo-delegating scripts
  • turbo.json, biome.json — shaped from ~/dev/cratestack's equivalents so the user's repos stay consistent
  • tsconfig.base.jsonstrict, noUncheckedIndexedAccess, exactOptionalPropertyTypes (matching the generated client's own tsconfig), verbatimModuleSyntax
  • .pnpmrc carries the TypeScript 5.9.3 override (pnpm 11 no longer reads package.json's pnpm field)
  • .gitignore: /node_modulesnode_modules/, plus .next/, .turbo/, admin/public/sw*.js. Existing *.pem / *.key entries deliberately preserved.

Verification

  • pnpm install succeeds on the empty workspace; pnpm biome check . clean.
  • cargo check --workspace passes — the Cargo workspace uses an explicit members list, so root JS config cannot disturb it.
  • Rebased cleanly onto current main; git diff origin/main...HEAD --stat shows 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 4389947 is left on main rather 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.

Reviewer Focus

Whether leaving the stale-titled empty commit 4389947 on main is acceptable, versus reverting it for a clean history. I chose not to rewrite shared history for a cosmetic title.

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>
@changeset-bot

changeset-bot Bot commented Aug 8, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: 502c8dd

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

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>
@stephane-segning
stephane-segning merged commit a51f21a into main Aug 8, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant