Skip to content

feat: add npm workspaces root config and align dependency versions (#1169, #1170) - #1226

Merged
Ejirowebfi merged 1 commit into
Haroldwonder:mainfrom
darcszn:feat/1169-1170-monorepo-workspaces-dependency-alignment
Jul 31, 2026
Merged

feat: add npm workspaces root config and align dependency versions (#1169, #1170)#1226
Ejirowebfi merged 1 commit into
Haroldwonder:mainfrom
darcszn:feat/1169-1170-monorepo-workspaces-dependency-alignment

Conversation

@darcszn

@darcszn darcszn commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Issue #1169 - Root workspace configuration

  • Add root package.json declaring npm workspaces for all 7 packages: backend, api, frontend, sdk, sdk/react-native, mobile, examples
  • Hoist shared dev dependencies to root: typescript ^5.8.3, eslint ^8.57.0, @typescript-eslint/{eslint-plugin,parser} ^8.0.0, vitest ^3.1.1, syncpack ^13, rimraf ^6
  • Add root scripts: build, test, lint, typecheck, clean, syncpack:check/fix
  • Replace file:../sdk reference in backend with workspace:* protocol
  • Delete redundant per-package lockfiles (backend/package-lock.json, backend/pnpm-lock.yaml, api/package-lock.json, frontend/package-lock.json, sdk/package-lock.json, examples/package-lock.json); root package-lock.json is now the single source of truth
  • Update .gitignore to explicitly ignore per-package lockfiles going forward
  • Rewrite backend, frontend, and api Dockerfiles to copy all workspace package.json manifests, then run npm ci --workspace=X from root so Docker layer caching works with the single root lockfile
  • Update all 16 CI workflows: remove cache-dependency-path pointing to per-package lockfiles; move npm ci to run at the repo root; keep working-directory: only for build/test/lint steps

Issue #1170 - Dependency version drift

  • Align @stellar/stellar-sdk on ^14.5.0 across backend, frontend, sdk, sdk/react-native (peer >=14.0.0), and examples (was ^12 in backend/ examples and ^13 in sdk — a major-version gap that caused transaction serialisation differences between services)
  • Align typescript on ^5.8.3 across all workspaces (was ^5.3.3 in backend, ^6.0.3 in api/frontend/sdk, ~5.8.3 in mobile, ^5.4.0 in react-native-sdk)
  • Align eslint on ^8.57.0 (was ^8.56.0 in backend and api)
  • Align @typescript-eslint/eslint-plugin and @typescript-eslint/parser on ^8.0.0 (was v7 in backend/api vs v8 in frontend; plugin was missing from frontend entirely)
  • Align vitest on ^3.1.1 (sdk had ^4.1.8)
  • Add typecheck script to backend, api, frontend, and sdk package.json
  • Add lint and typecheck scripts to frontend package.json (were missing)
  • Add .syncpackrc.json with sameRange version-group policies for @stellar/stellar-sdk, typescript, eslint, @typescript-eslint, vitest, and vite
  • Add .github/workflows/dependency-drift.yml: runs syncpack list-mismatches on every PR that touches any package.json; fails the job if drift is detected, preventing regressions

closes #1169
closes #1170

…aroldwonder#1169, Haroldwonder#1170)

Issue Haroldwonder#1169 - Root workspace configuration
- Add root package.json declaring npm workspaces for all 7 packages:
  backend, api, frontend, sdk, sdk/react-native, mobile, examples
- Hoist shared dev dependencies to root: typescript ^5.8.3, eslint ^8.57.0,
  @typescript-eslint/{eslint-plugin,parser} ^8.0.0, vitest ^3.1.1,
  syncpack ^13, rimraf ^6
- Add root scripts: build, test, lint, typecheck, clean, syncpack:check/fix
- Replace file:../sdk reference in backend with workspace:* protocol
- Delete redundant per-package lockfiles (backend/package-lock.json,
  backend/pnpm-lock.yaml, api/package-lock.json, frontend/package-lock.json,
  sdk/package-lock.json, examples/package-lock.json); root package-lock.json
  is now the single source of truth
- Update .gitignore to explicitly ignore per-package lockfiles going forward
- Rewrite backend, frontend, and api Dockerfiles to copy all workspace
  package.json manifests, then run npm ci --workspace=X from root so
  Docker layer caching works with the single root lockfile
- Update all 16 CI workflows: remove cache-dependency-path pointing to
  per-package lockfiles; move npm ci to run at the repo root; keep
  working-directory: <pkg> only for build/test/lint steps

Issue Haroldwonder#1170 - Dependency version drift
- Align @stellar/stellar-sdk on ^14.5.0 across backend, frontend, sdk,
  sdk/react-native (peer >=14.0.0), and examples (was ^12 in backend/
  examples and ^13 in sdk — a major-version gap that caused transaction
  serialisation differences between services)
- Align typescript on ^5.8.3 across all workspaces (was ^5.3.3 in backend,
  ^6.0.3 in api/frontend/sdk, ~5.8.3 in mobile, ^5.4.0 in react-native-sdk)
- Align eslint on ^8.57.0 (was ^8.56.0 in backend and api)
- Align @typescript-eslint/eslint-plugin and @typescript-eslint/parser on
  ^8.0.0 (was v7 in backend/api vs v8 in frontend; plugin was missing
  from frontend entirely)
- Align vitest on ^3.1.1 (sdk had ^4.1.8)
- Add typecheck script to backend, api, frontend, and sdk package.json
- Add lint and typecheck scripts to frontend package.json (were missing)
- Add .syncpackrc.json with sameRange version-group policies for
  @stellar/stellar-sdk, typescript, eslint, @typescript-eslint,
  vitest, and vite
- Add .github/workflows/dependency-drift.yml: runs syncpack list-mismatches
  on every PR that touches any package.json; fails the job if drift is
  detected, preventing regressions
@vercel

vercel Bot commented Jul 30, 2026

Copy link
Copy Markdown

@darcszn is attempting to deploy a commit to the Harold's projects Team on Vercel.

A member of the Team first needs to authorize it.

@drips-wave

drips-wave Bot commented Jul 30, 2026

Copy link
Copy Markdown

@darcszn Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Ejirowebfi
Ejirowebfi merged commit 2065c48 into Haroldwonder:main Jul 31, 2026
8 of 58 checks passed
Ejirowebfi pushed a commit that referenced this pull request Jul 31, 2026
Contract:
- resolve_dispute paid out the full remittance amount regardless of anything
  already sent by confirm_partial_payout, which drained other remittances'
  escrow (caught by the escrow-solvency property test). It now settles only the
  escrow still held, pays the agent the part of their net entitlement not yet
  disbursed, and accumulates the retained platform fee. It also honours the fee
  quoted at creation rather than re-pricing.

CI (#1226 moved the repo to npm workspaces and deleted every per-package
lockfile, leaving the workflows pointing at files that no longer exist):
- setup-node composite action installs at the repo root
- 29 npm ci steps pinned to the root working directory
- 31 cache-dependency-path entries repointed at the root lockfile
- 4 npm audit steps converted to root-scoped -w <pkg> form
- dependabot npm entries collapsed to a single workspace-root entry

Also includes in-progress repairs to the backend, api, sdk and mobile
workspaces. Those are NOT yet verified — their typecheck and test suites had
not been run to completion when this was committed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.

SR-100: Resolve dependency version drift across workspaces SR-099: Add a root workspace configuration for the monorepo

2 participants