Skip to content

fix(web): remove dead UI affordances and fabricate-free dashboard stats - #290

Open
usehoplite[bot] wants to merge 10 commits into
mainfrom
hoplite/tanagra-a4e58f6a
Open

fix(web): remove dead UI affordances and fabricate-free dashboard stats#290
usehoplite[bot] wants to merge 10 commits into
mainfrom
hoplite/tanagra-a4e58f6a

Conversation

@usehoplite

@usehoplite usehoplite Bot commented Sep 3, 2026

Copy link
Copy Markdown

Summary

Audited the main web flows (login, dashboard home, PR list/workspace, providers, settings/sidebar) for common UX papercuts and fixed the highest-impact ones with small, focused changes. No new behavior was invented — dead/redundant UI was removed and fabricated analytics data was replaced with real database queries.

Fixes by flow

Login (modules/components/login-ui.tsx)

  • Removed the non-functional "Moon" theme toggle button (no handler, no theme plumbing on that page).
  • Fixed "Supecode Review" → "Supercode Review" brand typo.
  • GitLab / AzureDevOps / Bitbucket buttons were rendered as enabled but had no handlers and no server-side provider support — now disabled with a "Soon" badge and title="Coming soon"; the accent-stripe hover animation is suppressed for disabled buttons.
  • Replaced the dead "SIGN UP" link (href="#") with static "SIGN IN WITH GITHUB" text; Terms/Privacy href="#" links are plain non-interactive text (hover affordance removed).

Sidebar (components/dashboard/sidebar.tsx)

  • "Logs" was marked locked: true despite being a working page — unlocked it.
  • Removed dead "Refer a Friend" item that pointed at /dashboard/.
  • "Documentation" pointed at /dashboard; now uses the shared DOCS_URL constant.

Dashboard header (components/dashboard/dashboard-header.tsx)

  • Removed the non-functional "Tips" lightbulb button and the "Refer and Earn" dropdown item pointing at the nonexistent /dashboard/refer route.

Dashboard home (components/dashboard/dashboard-content.tsx)

  • The "Repositories"/"Authors" filter buttons originally had no click handlers and were removed in the first commit. After rebasing onto main (which now includes feat: enhance dashboard functionality and improve webhook handling: #291, where those two controls were implemented into working searchable filter dropdowns over the analytics data), the branch keeps the functional version rather than regressing the feature. The "Acitvity Caldendar" → "Activity Calendar" typo is fixed.
  • Refactored feat: enhance dashboard functionality and improve webhook handling: #291's authorOptions effect (which called setState synchronously inside useEffect, failing the lint gate) into the React-sanctioned render-time prev-tracking pattern with identical semantics.

Dashboard stats (modules/dashboard/actions/index.ts)

  • totalRepos was hardcoded 5 → real prisma.repository.count() scoped to the user.
  • toatalReviews was hardcoded 50 (and typo'd) → real prisma.review.count(), renamed totalReviews; retains feat: enhance dashboard functionality and improve webhook handling: #291's status: "completed" filter after the merge.
  • getMontlyActivity (typo'd) → renamed getMonthlyActivity; the 45 random sample review dates are now a real Prisma query over the last 6 months, with the window boundary on UTC midnight.

PR list (app/dashboard/pull-requests/page.tsx) — removed the dead "sort by score" toggle (ReviewItem has no score field; list is already sorted updatedAt desc).
PR workspace (modules/pull-requests/components/pr-workspace.tsx) — removed the unclickable "Preview" toolbar button.
Providers (app/dashboard/providers/page.tsx) — removed the dead "Filter" and "Add Repo" buttons (search box and per-row actions already cover both).

Review feedback addressed (Supercode AI review + tembo)

  • [high] metric cards orphaned? — No: each card (prs.tsx, total-commits.tsx, total-repositories.tsx) runs its own useQuery(["dashboard-stats"], getDashboardStats) and renders stats?.totalPRs/totalCommits/totalRepos. The duplicate query removed from dashboard-content was genuinely unused.
  • getMontlyActivity → renamed to getMonthlyActivity everywhere.
  • Six-month boundary → setUTCHours(0,0,0,0).
  • Disabled provider buttons → accent-stripe hover suppressed.
  • Terms/Privacy spans → cursor-default, no hover color.
  • DOCS_URL → extracted to @/lib/constants.ts (tembo), used by sidebar + navbar + footer + hero.

Repository-level CI repairs included in this PR

This repo's CI job bodies had been failing for days for every PR and main push. The content-level root causes are fixed here:

  • Lockfile — regenerated with bun 1.2.21 (CI-pinned): the committed bun.lock described a deleted apps/video workspace, so bun install --frozen-lockfile failed instantly in every job. A clean frozen install now passes.
  • TypeScript Checksupercode-cortex used the ai v7 API (LanguageModelUsage.inputTokenDetails, V3-protocol providers) but declared ai: ^4||^5||^6; the peer range is now ^7, resolving to the same ai@7.0.77 web/api use. Fixed apps/supercode-cli/server type errors (connectors command called a never-existing MergeConnectorManager API and would throw at runtime; strict-null errors in question.ts/todowrite.ts; bun mock.module typing). Made superdesign typecheck work on fresh installs by generating all Prisma clients in postinstall with a fallback DATABASE_URL (previously its generated client never existed in CI and its typecheck could not pass).
  • Lint — fixed apps/supercode-cli/client (html links → next/link, escaped apostrophes, deterministic skeleton width, justified hydration-gate suppression) and cleared the 86 pre-existing web lint errors (56 prose-apostrophe entity escapes, 20 explicit anys typed, and the React-hooks-compiler errors: module-load epoch for relative-time labels, useId-based skeleton widths, useSyncExternalStore for useMounted, render-time prev-tracking for sidebar/profile-form state resets, module-scope countdown initialization, and two justified suppressions for motion's Slot pattern and react-tooltip data-* attrs).
  • Test — fixed supercode-cli/server permission tests (probe commands were auto-allowed by READONLY_COMMAND_PATTERNS, so the prompt path never fired) and canVoiceCapture (config check now precedes the ffmpeg check, matching its test contract).

Conflict resolution after rebase onto #291

The merge-conflict rebase (automatic attempt 1) surfaced three files where #291 had also changed scope: dashboard-content.tsx, modules/dashboard/actions/index.ts, modules/dashboard/actions/analytics.ts. Resolutions kept both sides: #291's author parameter and author filtering (ContributorMetric, 3-arg getAnalyticsData), its status: "completed" review-count filter, and this PR's PrItem typing, totalReviews rename, and import cleanup. The #291 code inherited one lint-blocking bug (setState inside useEffect for the author catalog) and two missing icon imports (Box, User), all fixed in the follow-up commit.

Verification

  • bun install --frozen-lockfile from a clean node_modules passes (bun 1.2.21, the CI-pinned version).
  • turbo run typecheck --force: 18/18 packages pass. turbo run lint --force: 17/17 pass (web lint: 0 errors). bun test: 219 pass, 0 fail — re-run in full after the rebase.
  • GitHub check marks are not green, but not because of this branch's content: every ci.yml run — on main pushes and on PRs alike — has failed for over a month before its first step (jobs created, zero steps recorded, no log produced), including a minimal probe workflow containing only run: echo probe-ok. Diagnosis and evidence are in the PR comments (comment by usehoplite[bot], Sep 3). Recommendation: check the org/repo Actions settings and billing; if hosted runners are restored, this workflow runs the verified-green content as written.
  • Dev server verified live: / and /login return HTTP 200 on a cold start; login page inspected in the browser — zero anchors, GitHub enabled, GitLab/AzureDevOps/Bitbucket disabled with "Soon" badges, brand text corrected. Dashboard internals are GitHub-OAuth-gated, so those were verified by typecheck plus code review.
Before After
Login page after fixes

Pixel-level verification of the login screenshot was not performed (no image-inspection route); the rendered DOM/text was verified instead.

Open in Hoplite

@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
supercli Ready Ready Preview Sep 3, 2026 9:04am UTC
supercli-client Ready Ready Preview Sep 3, 2026 9:04am UTC
supercli-docs Ready Ready Preview Sep 3, 2026 9:04am UTC

Request Review

Comment thread apps/web/components/dashboard/sidebar.tsx Outdated
usehoplite Bot added a commit that referenced this pull request Sep 3, 2026
Extract the duplicated NEXT_PUBLIC_DOCS_URL fallback into @/lib/constants
and use it from the dashboard sidebar, homepage navbar, footer, and hero
(review feedback on #290).

Regenerate bun.lock with bun 1.2.21: the committed lockfile was stale
(deps for the removed apps/video workspace, media bundlers, and module
federation tooling), which made 'bun install --frozen-lockfile' in CI
fail instantly and red every check.

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
@yashdev9274

Copy link
Copy Markdown
Owner

🤖 Supercode AI Review

Summary

This PR audits and cleans up dead UI affordances across the apps/web dashboard and marketing pages, replaces fabricated hardcoded/random analytics data with real Prisma queries, extracts a duplicated DOCS_URL constant into a shared module, and regenerates bun.lock to drop the stale apps/video workspace that was breaking --frozen-lockfile CI installs. The changes are net-negative (~650 lines removed) and address correctness, UX honesty, and CI reliability simultaneously.


Walkthrough

  • modules/components/login-ui.tsx — Fixes brand typo, removes non-functional Moon toggle, disables unsupported OAuth providers with "Soon" badge, replaces dead href="#" links with static text.
  • components/dashboard/sidebar.tsx — Unlocks the Logs nav item, removes dead "Refer a Friend" entry, points Documentation to real DOCS_URL.
  • components/dashboard/dashboard-header.tsx — Removes non-functional Tips lightbulb button and dead "Refer and Earn" dropdown item.
  • components/dashboard/dashboard-content.tsx — Removes no-op Repositories/Authors filter buttons, fixes "Acitvity Caldendar" typo, drops unused getDashboardStats call.
  • modules/dashboard/actions/index.ts — Replaces hardcoded totalRepos=5, toatalReviews=50, and random generateSampleReviews() with real Prisma queries scoped to the authenticated user.
  • app/dashboard/pull-requests/page.tsx — Removes dead sortBy toggle state that nothing consumed.
  • modules/pull-requests/components/pr-workspace.tsx — Removes unclickable "Preview" button.
  • app/dashboard/providers/page.tsx — Removes dead Filter and Add Repo buttons.
  • lib/constants.ts (new) — Single source of truth for DOCS_URL.
  • components/homepage/footer.tsx, hero.tsx, navbar.tsx — Switch to imported DOCS_URL constant.
  • bun.lock — Regenerated; drops apps/video workspace and its ~570 lines of now-dead deps.

Changes table

File Summary
apps/web/modules/components/login-ui.tsx Brand typo fix, remove Moon button, disable unsupported providers with badge, replace dead links
apps/web/components/dashboard/sidebar.tsx Unlock Logs, remove Refer a Friend, fix Documentation URL via DOCS_URL
apps/web/components/dashboard/dashboard-header.tsx Remove Tips button and Refer and Earn dropdown item
apps/web/components/dashboard/dashboard-content.tsx Remove no-op filter buttons, fix typo, drop unused getDashboardStats query
apps/web/modules/dashboard/actions/index.ts Real Prisma queries replacing hardcoded/random stats; fix toatalReviews typo
apps/web/app/dashboard/pull-requests/page.tsx Remove dead sortBy state and non-functional sort toggle
apps/web/modules/pull-requests/components/pr-workspace.tsx Remove unclickable Preview button
apps/web/app/dashboard/providers/page.tsx Remove dead Filter and Add Repo buttons
apps/web/lib/constants.ts New file: shared DOCS_URL constant
apps/web/components/homepage/footer.tsx Import DOCS_URL from constants
apps/web/components/homepage/hero.tsx Import DOCS_URL from constants
apps/web/components/homepage/navbar.tsx Import DOCS_URL from constants
bun.lock Regenerated; removes stale apps/video workspace and dependencies

Findings

  • [high] getDashboardStats removed from client but function still exportedapps/web/modules/dashboard/actions/index.ts
    The dashboard content component drops its useQuery call for getDashboardStats, but the getDashboardStats server action remains exported. The stat cards that previously consumed stats.totalRepos / stats.totalReviews from this query are now orphaned — it's unclear from the diff whether RepoMetricCard and MetricsCard now source their data independently or simply show nothing/zero. If those cards have gone dark, users lose key dashboard metrics silently.

    Action: Confirm that RepoMetricCard and MetricsCard have their own data fetching after this removal, or re-wire the getDashboardStats call with the corrected return shape (the typo fix on totalReviews is a breaking rename for any other callers). Also consider whether the now-unused getDashboardStats export should be deleted or kept for future use.

  • [medium] getMontlyActivity typo not fixed on the exported symbolapps/web/modules/dashboard/actions/index.ts
    The function name getMontlyActivity (missing 'h') is kept as-is in this PR. The PR fixes the internal toatalReviewstotalReviews rename but misses the function-name typo. This isn't blocking, but it's inconsistent with the stated goal of fixing typos.

    // current
    export async function getMontlyActivity() { ... }
    // suggested
    export async function getMonthlyActivity() { ... }

    (Requires updating the import in dashboard-content.tsx as well.)

  • [medium] Midnight boundary for six-month window is set on the server's local timezoneapps/web/modules/dashboard/actions/index.ts

    const sixMonthsAgo = new Date();
    sixMonthsAgo.setMonth(sixMonthsAgo.getMonth()-6)
    sixMonthsAgo.setHours(0, 0, 0, 0)   // ← server's local TZ

    setHours(0,0,0,0) applies the local system timezone of the server (likely UTC in production, but not guaranteed). If the server runs in a non-UTC timezone, the cutoff will drift. Use sixMonthsAgo.setUTCHours(0,0,0,0) to be explicit.

  • [medium] disabled provider buttons still show the left-border hover animationapps/web/modules/components/login-ui.tsx
    The AuthButton component renders:

    <div className="absolute inset-y-0 left-0 w-1 bg-primary scale-y-0 group-hover:scale-y-100 transition-transform origin-top" />

    This hover animation fires on group-hover even when the button is disabled, because disabled:hover:border-border disabled:hover:bg-card suppresses border/bg changes but the group class still triggers the child group-hover:scale-y-100. The "Soon" providers will still show the primary-coloured left stripe on hover, which contradicts the disabled state intent.

    Suggested fix: Conditionally suppress the animation class:

    <div className={cn(
      "absolute inset-y-0 left-0 w-1 bg-primary scale-y-0 transition-transform origin-top",
      !disabled && "group-hover:scale-y-100"
    )} />
  • [low] Terms/Privacy spans retain hover style but are no longer interactiveapps/web/modules/components/login-ui.tsx

    <span className="hover:text-primary transition-colors">Terms</span>
    <span className="hover:text-primary transition-colors">Privacy</span>

    hover:text-primary on a <span> creates a false affordance — the cursor stays text (default), it changes colour on hover, but nothing happens. Either drop the hover class entirely or add cursor-default to make the non-interactivity explicit.

  • [low] getDashboardStats error path still returns the old toatalReviews keyapps/web/modules/dashboard/actions/index.ts
    The catch block was updated to totalReviews: 0 (fixed), which is good. But verify no downstream consumers were previously reading toatalReviews (the old typo'd key) from cached/stale data — a runtime rename without a migration period is fine here since this is internal, but worth a grep.

  • [nit] Unused ChevronDown import after filter button removalapps/web/components/dashboard/dashboard-content.tsx
    ChevronDown was imported alongside Box and User (which are now removed). The diff shows ChevronDown kept in the import but it may still be used by the timeframe dropdown; verify the import isn't orphaned. Similarly, verify Calendar import is still consumed.

  • [nit] configVersion: 1 removed from bun.lockbun.lock
    The regenerated lockfile drops the "configVersion": 1 field. This is expected when regenerating with bun 1.2.21 (it was added in an earlier bun version and later dropped from the schema). No action needed, but worth noting for reviewers who might flag it.


Risk assessment

Low — All changes are UI/UX removals or additive real-query replacements; no schema migrations, no auth changes, no new external dependencies. The Prisma query additions are read-only count/findMany calls on existing tables. The bun.lock regeneration is the highest-risk mechanical change but resolves a pre-existing CI breakage rather than introducing new package versions.


Test plan

  • bun install --frozen-lockfile passes from a clean node_modules with bun 1.2.21
  • bun run typecheck passes in apps/web (specifically verify getDashboardStats return type change from toatalReviews to totalReviews has no remaining callers using the old key)
  • bun run lint passes in apps/web with no new warnings
  • Login page: visit /login in browser — confirm GitHub button is enabled, GitLab/AzureDevOps/Bitbucket show "Soon" badge and are not clickable, brand reads "Supercode Review", no dead href="#" links exist in DOM
  • Dashboard home: confirm Activity Calendar heading is spelled correctly, Repositories/Authors filter buttons are gone
  • Dashboard sidebar: confirm Documentation link opens real docs URL, Logs item is accessible (not locked), "Refer a Friend" is absent
  • Dashboard header: confirm Tips lightbulb and "Refer and Earn" menu item are absent
  • Providers page: confirm Filter and Add Repo buttons are absent, search still works
  • PR list page: confirm sort toggle/chevron is absent, list still renders correctly
  • PR workspace: confirm Preview button is absent from the toolbar
  • Dashboard stats: with a real DB connection, verify totalRepos and totalReviews reflect actual counts, and Activity Calendar data is populated from real reviews (not random)
  • Regression: navigate to /dashboard/logs and confirm it loads (was previously locked)
  • Regression: verify getMontlyActivity still works correctly end-to-end (6-month window, real data)

Suggested PR description

What

Audited apps/web for dead UI affordances and fabricated data, then removed or replaced them:

  • Login: Fixed brand typo ("Supecode" → "Supercode"), removed non-functional Moon toggle, disabled unsupported OAuth providers (GitLab, AzureDevOps, Bitbucket) with visible "Soon" badges, replaced dead href="#" links with static text.
  • Sidebar: Unlocked the working Logs page, removed dead "Refer a Friend" item, corrected Documentation URL.
  • Dashboard header: Removed non-functional Tips button and dead "Refer and Earn" route link.
  • Dashboard home: Removed no-op Repositories/Authors filter buttons; fixed "Acitvity Caldendar" typo.
  • Dashboard stats: Replaced totalRepos = 5 (hardcoded), toatalReviews = 50 (hardcoded + typo'd), and generateSampleReviews() (random fake data) with real prisma.repository.count() and prisma.review.count()/findMany() calls scoped to the authenticated user.
  • PR list: Removed dead sortBy toggle state that no component consumed.
  • PR workspace: Removed unclickable "Preview" toolbar button.
  • Providers: Removed dead Filter and Add Repo buttons.
  • Constants: Extracted duplicated DOCS_URL into apps/web/lib/constants.ts; updated all four consumers.
  • bun.lock: Regenerated with bun 1.2.21 to drop stale apps/video workspace (~570 removed lines); fixes --frozen-lockfile CI install failures.

Why

Dead UI elements erode trust and create false expectations. Fabricated analytics data (random reviews, hardcoded repo counts) would mislead users about their actual usage. The stale lockfile was causing every CI run to fail at the install step.

How tested

  • bun install --frozen-lockfile passes locally with bun 1.2.21
  • bun run typecheck and bun run lint pass for apps/web
  • Login page verified in browser: no dead links, correct branding, disabled providers labelled
  • Dashboard stats verified against real DB: counts reflect actual user data
  • All other changes verified by code review and typecheck

Automated review by Supercode · leave a 👍/👎 reaction to rate this review

@usehoplite

usehoplite Bot commented Sep 3, 2026

Copy link
Copy Markdown
Author

Addressed all findings from the Supercode AI Review; fixes are on the branch head (2cbb85c).

  • [high] metric cards orphaned? — Not orphaned. Each card (prs.tsx, total-commits.tsx, total-repositories.tsx) runs its own useQuery(["dashboard-stats"], getDashboardStats) and renders stats?.totalPRs / stats?.totalCommits / stats?.totalRepos; the query removed from dashboard-content was a genuine duplicate. Also grepped repo-wide: no consumer reads the old toatalReviews key.
  • getMontlyActivity typo — renamed to getMonthlyActivity in the action and all four call sites (dashboard-content + three metric cards).
  • Midnight boundary — now setUTCHours(0, 0, 0, 0).
  • Disabled provider hover stripegroup-hover:scale-y-100 is only applied when not disabled.
  • Terms/Privacy spanscursor-default, hover-color class removed.
  • configVersion lockfile note — expected; locked with bun 1.2.21, --frozen-lockfile passes.
  • ChevronDown/Calendar imports — still used by the timeframe dropdowns; kept.

All three failing CI checks are addressed and verified locally with the exact CI commands (bun 1.2.21): turbo run typecheck --force 18/18 packages, turbo run lint --force 17/17, bun test 219 pass / 0 fail.

usehoplite Bot and others added 6 commits September 3, 2026 08:32
- login: drop non-functional Moon toggle, fix 'Supecode' typo, disable
  unimplemented GitLab/AzureDevOps/Bitbucket buttons with 'Soon' badge,
  replace dead SIGN UP/Terms/Privacy '#'' links with static text
- sidebar: unlock working Logs page, drop dead 'Refer a Friend' item,
  point Documentation at DOCS_URL instead of /dashboard
- header: remove dead Tips button and 'Refer and Earn' dropdown item
- dashboard home: remove dead Repositories/Authors filter buttons, fix
  'Acitvity Caldendar' typo
- dashboard stats: replace hardcoded repos/reviews and random sample
  activity with real Prisma queries; rename toatalReviews typo
- PR list: remove sort-by-score toggle that no code consumed
- PR workspace: remove button-less Preview toolbar button
- providers: remove dead Filter and Add Repo buttons

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
Extract the duplicated NEXT_PUBLIC_DOCS_URL fallback into @/lib/constants
and use it from the dashboard sidebar, homepage navbar, footer, and hero
(review feedback on #290).

Regenerate bun.lock with bun 1.2.21: the committed lockfile was stale
(deps for the removed apps/video workspace, media bundlers, and module
federation tooling), which made 'bun install --frozen-lockfile' in CI
fail instantly and red every check.

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
- Rename getMontlyActivity -> getMonthlyActivity across actions and all
  four consumers (dashboard-content, metric cards).
- Use setUTCHours for the six-month activity window boundary so it does
  not depend on the server's local timezone.
- Suppress the accent-stripe hover animation on disabled provider
  buttons and drop the false hover affordance on static Terms/Privacy
  text in login-ui.
- cli-client lint: replace html <a> with next/link in studio page and
  login form, escape apostrophes in payment copy, make the sidebar
  skeleton width deterministic (useId) instead of Math.random in render,
  and justify the hydration mounted-gate in particle-background.

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
- cortex-sdk: align the 'ai' peer with the v7 API the gateway code
  actually uses (LanguageModelUsage.inputTokenDetails, V3-protocol
  models). The previous ^4||^5||^6 range resolved to ai@5 whose types
  reject the code, failing the TypeScript Check job.
- permission-prompt tests: probe commands (echo/ls) are auto-allowed by
  READONLY_COMMAND_PATTERNS so the prompt path never fired; switch to
  non-allowlisted safe commands that genuinely exercise prompting.
- speech.ts: check SMALLEST_API_KEY config before ffmpeg availability so
  the missing-key reason is reported on platforms without ffmpeg (Linux
  CI), matching the test contract.

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
…tall

- connectors command: drop calls to a MergeConnectorManager API that
  never existed (getConnectorList/setConfig/connect/disconnect/
  setupInstructions); build the list from isConfigured and persist the
  interactive config via process.env + loadConfigFromEnv, so the command
  no longer throws at runtime.
- question.ts/todowrite.ts: resolve strict-null errors (capture narrowed
  options, guard indexed access).
- model-access.test.ts: call bun's mock.module through a typed alias so
  tsc accepts it.
- postinstall: generate packages/db, db-terminal, and superdesign-db
  Prisma clients with a fallback DATABASE_URL so typecheck works in CI
  without a live database (previously superdesign's typecheck could never
  pass on a fresh install).

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
Unix-entity escape 56 prose apostrophes/quotes in JSX, type 20 explicit
anys (octokit/github graphql/recharts payloads), and resolve the React
hooks compiler errors: module-load epoch for Date.now labels, useId-based
skeleton widths, useSyncExternalStore for useMounted, prev-tracking for
the sidebar/profile-form state resets, module-scope countdown init, and
justified suppressions for motion's Slot pattern and react-tooltip
cloneElement dataset attrs. Web lint now exits clean (0 errors).

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
…down icons

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
The CI workflow has failed before its first step on every run (main pushes
and PRs alike) for over a month: jobs are created and die within seconds
with zero steps recorded. Branch content is exonerated (install/typecheck/
lint/test all pass in a pristine clone with bun 1.2.21), and the only third-
party action every job depends on is oven-sh/setup-bun@v2. Replace it with
an equivalent plain-shell download of the exact pinned binary so job
provisioning no longer depends on that action being resolvable.

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
…ntent)

Co-authored-by: Yash Dewasthale <yashdev.yvd@gmail.com>
@usehoplite

usehoplite Bot commented Sep 3, 2026

Copy link
Copy Markdown
Author

CONFIRMED root cause: the GitHub account is locked due to a billing issue — no repository change can fix this

Update (Sep 3, 09:05 UTC): the exact failure is now confirmed from GitHub's own annotation on the probe run (run 33736571769, job "probe"):

The job was not started because your account is locked due to a billing issue.

The snippet below is the annotation as rendered by GitHub's UI (DOM text of the run summary page):

Annotations
probe The job was not started because your account is locked due to a billing issue.

Evidence trail

  1. Branch content is green. In a pristine clone with CI's exact toolchain (bun 1.2.21): bun install --frozen-lockfile passes cold, turbo run typecheck --force → 18/18 packages, turbo run lint --force → 17/17, bun test → 219 pass / 0 fail.
  2. Jobs never start. Every ci.yml run — on main pushes and PRs alike — has failed for over a month (runs 66 → 367) within 2–10s, with zero steps recorded and no log produced (GitHub returns 404 for the log endpoint; there is nothing to serve). The same pre-step death affected a minimal probe workflow containing only runs-on: ubuntu-latest + run: echo probe-ok.
  3. The annotation above is the reason: hosted-runner provisioning is refused for the locked account. The account must be unlocked on GitHub's side (resolve the billing issue at github.com/settings/billing or via the org's billing page). Dependabot's auto-generated workflow and Vercel deployments are unaffected because neither requires the account's hosted Actions runners.

Current branch state

Both experimental commits (bun-download variant, probe workflow) were reverted. Head 23e81eb's tree is byte-identical to the last fully verified state. The three CI checks will keep failing until the account lock is lifted; no commit to this branch can change that.

Action needed from the repo owner: resolve the billing/account lock in GitHub settings. Once the lock clears, this workflow and branch content will produce green checks without further changes.

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