chore: unify pnpm into a single root workspace#103
Conversation
Switch the TPS Area interpolation from `linear` to `monotone` so the Transaction volume chart renders as a smooth curve instead of connected straight segments between data points.
Revert line interpolation to linear and enable Recharts' built-in animation so newly arriving data points ease into the chart instead of snapping in. This is the smoothing that was actually requested: the visible motion of new points appearing, not the line shape.
Switch the X axis to a continuous time scale with a [now - 5min, now] domain advanced each animation frame, so new points slide in smoothly from the right edge instead of popping into discrete category slots. Keeps isAnimationActive disabled to avoid Recharts re-animation loops on each TPS event. Clamp the domain's left edge to the oldest point so the chart fills immediately instead of showing an empty 5-minute lead-in. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replaces frontend/pnpm-lock.yaml with main's lockfile minus the duplicate keys introduced by PR #97 (so pnpm 10 can parse it). No package versions change vs main; pnpm install --frozen-lockfile passes. The previous commit on this branch ran a non-frozen pnpm install, which silently re-resolved every floating semver in package.json and produced ~2000 lines of incidental lockfile churn. This commit reverses that.
Addresses 6 of the 8 clippy findings surfaced by the new rust CI job: - needless_return (server.rs) - match_like_matches_macro (server.rs) - ptr_arg: &Vec<T> -> &[T] (event_filter.rs) - needless_borrow (event_filter.rs) - manual_is_multiple_of (event_listener.rs) - clone_on_copy (serializable_event.rs) Remaining (require manual judgment, deferred): large_enum_variant (server.rs), should_implement_trait for from_str (event_listener.rs).
- large_enum_variant: box the 640-byte Event variant of EventDataOrMetrics (Event(Box<EventData>)). Since From::from infers its parameter type from the argument (deref coercion does not apply), the match-site call passes &*event_data to select From<&EventData>; construction uses Box::new(..). - should_implement_trait: rename inherent EventName::from_str -> from_name (and its single caller) so it no longer shadows std::str::FromStr::from_str.
Surfaced once the lib compiled clean: timestamp_ns is u64, so the (u64 - u64) as u64 casts are redundant; drop the cast and parens.
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
Greptile SummaryThis PR unifies the repo into a single pnpm workspace by moving
Confidence Score: 5/5Safe to merge on the code side; Vercel dashboard settings must be updated out-of-band before production deploys will work, as explicitly documented in the PR description. The workspace unification is mechanically straightforward: lockfile paths updated in CI, delegating scripts added to root package.json, workspace settings faithfully ported to the new root pnpm-workspace.yaml. The unified lockfile correctly tracks both root and frontend importers. No functional logic is changed. No files require special attention from a correctness standpoint. The Vercel deployment concern is purely a dashboard configuration step, not a code defect.
|
| Filename | Overview |
|---|---|
| .github/workflows/ci.yml | Correctly drops working-directory: frontend and updates cache-dependency-path to root lockfile for typecheck and build jobs; lint job was already running from root and is unchanged. |
| package.json | Adds workspace name, private flag, and delegating scripts; no packageManager field to pin pnpm 10 locally (CI pins it via action). |
| pnpm-workspace.yaml | New root workspace config with packages: [frontend] and all security/release settings faithfully ported from the deleted frontend/pnpm-workspace.yaml. |
| pnpm-lock.yaml | New unified lockfile (lockfileVersion 9.0) covering both root (biome) and frontend importers; replaces the deleted frontend/pnpm-lock.yaml. |
| frontend/pnpm-lock.yaml | Deleted — superseded by the unified root pnpm-lock.yaml. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[CI: pnpm install --frozen-lockfile\nat repo root] --> B[root pnpm-lock.yaml\ncovers . + frontend]
B --> C{Job}
C -->|typecheck job| D[pnpm typecheck\nroot package.json]
C -->|build job| E[pnpm build\nroot package.json]
C -->|lint job| F[biome ci --linter-enabled\n--formatter-enabled\nno pnpm needed]
D -->|pnpm --filter frontend typecheck| G[frontend/\ntsc --noEmit]
E -->|pnpm --filter frontend build| H[frontend/\nnext build]
style A fill:#e8f5e9
style B fill:#e8f5e9
style F fill:#fff3e0
Reviews (5): Last reviewed commit: "Merge branch 'reopen/100-unified-workflo..." | Re-trigger Greptile
| "build": "pnpm --filter frontend build", | ||
| "start": "pnpm --filter frontend start", | ||
| "typecheck": "pnpm --filter frontend typecheck", | ||
| "lint": "biome check ." |
There was a problem hiding this comment.
lint script diverges from CI behavior
The CI lint job runs biome ci --linter-enabled=true --formatter-enabled=true directly (via biomejs/setup-biome), while the new root lint script runs biome check .. biome check without --write exits non-zero on violations like biome ci does, but the flag set differs — biome ci hard-enables both linter and formatter regardless of biome.json, whereas biome check . inherits defaults from config. If biome.json disables one of those by default, pnpm lint locally will pass on code that CI rejects, defeating the point of the script.
Prompt To Fix With AI
This is a comment left during a code review.
Path: package.json
Line: 9
Comment:
**`lint` script diverges from CI behavior**
The CI `lint` job runs `biome ci --linter-enabled=true --formatter-enabled=true` directly (via `biomejs/setup-biome`), while the new root `lint` script runs `biome check .`. `biome check` without `--write` exits non-zero on violations like `biome ci` does, but the flag set differs — `biome ci` hard-enables both linter and formatter regardless of biome.json, whereas `biome check .` inherits defaults from config. If `biome.json` disables one of those by default, `pnpm lint` locally will pass on code that CI rejects, defeating the point of the script.
How can I resolve this? If you propose a fix, please make it concise.- Add root pnpm-workspace.yaml (packages: [frontend]) and move the pnpm 10 settings (minimumReleaseAge, minimumReleaseAgeExclude, onlyBuiltDependencies, allowBuilds) up from frontend/. - Add root package.json scripts delegating to the frontend workspace (dev/build/start/typecheck) plus a biome lint script. - Delete frontend/pnpm-workspace.yaml and frontend/pnpm-lock.yaml; the repo now has a single root pnpm-lock.yaml covering root (biome) + frontend. - ci.yml: typecheck/build install once at the repo root (no working-directory, cache-dependency-path: pnpm-lock.yaml) and run the root pnpm scripts. Verified locally with pnpm 10: frozen install, pnpm typecheck, pnpm build pass.
2b1f545 to
d0b4c2a
Compare
Next 16 removed the built-in ESLint integration (next lint), and ESLint wasn't wired into CI or the build, so eslint-config-next's @next/next rules weren't being enforced anyway. Biome (run in the CI lint job) owns linting + formatting + import organization going forward. - Remove the 'lint': 'eslint' script and the eslint / eslint-config-next devDependencies from frontend/package.json. - Delete frontend/eslint.config.mjs. - Drop 'eslint.enable' from .vscode/settings.json (Biome is the formatter). - Update root pnpm-lock.yaml (removes eslint + 300 transitive deps). Verified locally: frozen install, pnpm typecheck, and biome ci all pass.
|
Want your agent to iterate on Greptile's feedback? Try greploops. |
Addresses 6 of the 8 clippy findings surfaced by the new rust CI job: - needless_return (server.rs) - match_like_matches_macro (server.rs) - ptr_arg: &Vec<T> -> &[T] (event_filter.rs) - needless_borrow (event_filter.rs) - manual_is_multiple_of (event_listener.rs) - clone_on_copy (serializable_event.rs) Remaining (require manual judgment, deferred): large_enum_variant (server.rs), should_implement_trait for from_str (event_listener.rs).
- large_enum_variant: box the 640-byte Event variant of EventDataOrMetrics (Event(Box<EventData>)). Since From::from infers its parameter type from the argument (deref coercion does not apply), the match-site call passes &*event_data to select From<&EventData>; construction uses Box::new(..). - should_implement_trait: rename inherent EventName::from_str -> from_name (and its single caller) so it no longer shadows std::str::FromStr::from_str.
Surfaced once the lib compiled clean: timestamp_ns is u64, so the (u64 - u64) as u64 casts are redundant; drop the cast and parens.
# Conflicts: # .github/workflows/ci.yml # frontend/package.json
This reverts commit af8a877.
Addresses 6 of the 8 clippy findings surfaced by the new rust CI job: - needless_return (server.rs) - match_like_matches_macro (server.rs) - ptr_arg: &Vec<T> -> &[T] (event_filter.rs) - needless_borrow (event_filter.rs) - manual_is_multiple_of (event_listener.rs) - clone_on_copy (serializable_event.rs) Remaining (require manual judgment, deferred): large_enum_variant (server.rs), should_implement_trait for from_str (event_listener.rs).
- large_enum_variant: box the 640-byte Event variant of EventDataOrMetrics (Event(Box<EventData>)). Since From::from infers its parameter type from the argument (deref coercion does not apply), the match-site call passes &*event_data to select From<&EventData>; construction uses Box::new(..). - should_implement_trait: rename inherent EventName::from_str -> from_name (and its single caller) so it no longer shadows std::str::FromStr::from_str.
Surfaced once the lib compiled clean: timestamp_ns is u64, so the (u64 - u64) as u64 casts are redundant; drop the cast and parens.
Makes the repo root the single pnpm workspace, eliminating the two separate pnpm installs (root Biome-only + self-contained
frontend/).Changes
pnpm-workspace.yamlwithpackages: [frontend], moving the pnpm-10 settings (minimumReleaseAge,minimumReleaseAgeExclude,onlyBuiltDependencies,allowBuilds) up fromfrontend/.package.jsonscripts delegating to the workspace:dev/build/start/typecheck->pnpm --filter frontend ..., pluslint->biome check ..frontend/pnpm-workspace.yamlandfrontend/pnpm-lock.yaml. There is now a single rootpnpm-lock.yamlcovering root (Biome) + frontend.ci.yml:typecheck/buildinstall once at the repo root (droppedworking-directory: frontend;cache-dependency-path: pnpm-lock.yaml) and run the root scripts.Verification From Original PR
pnpm install --frozen-lockfilepnpm typecheckpnpm buildbiome ciVercel Coordination Required Before Merge
This moves the lockfile to the repo root and makes the project a pnpm workspace. The Vercel project settings (Root Directory, Install Command, lockfile detection) live in the dashboard, not this repo. They likely need updating or preview/production deploys can break.
Suggested Vercel settings:
frontendwith "Include files outside the root directory" enabled, so the root lockfile/workspace is available, or set Root Directory to repo root with build/output configured forfrontend.pnpm install --frozen-lockfilerun at the workspace root.Stack order: #109 -> #106 -> this -> #108.