Repository navigation
Conversation
…(PR 0.1) (#1) * chore: migrate to pnpm, strict ESLint/Prettier, lefthook, commitlint PR 0.1 of docs/MILESTONES.md. Toolchain - pnpm 10 via corepack (packageManager, engines, pnpm-lock.yaml); npm lockfile removed. .npmrc hoists eslint/prettier plugins for eslint-config-next; onlyBuiltDependencies allow-list for postinstall scripts (SECURITY §2.12). - ESLint flat config: next/core-web-vitals + typescript-eslint strict/stylistic type-checked, no-console, no-explicit-any, no-non-null-assertion, import/order, and the ARCHITECTURE §1 layer rules as no-restricted-imports overrides. Legacy allowances are scoped and annotated with the PR that deletes them. - Prettier (+tailwind plugin), commitlint (conventional + "security" type), lefthook hooks calling local binaries; gitleaks/vitest guarded by scripts until installed. .gitattributes normalises LF (R19). - package.json scripts per AGENTS.md §5; .nvmrc; .vscode settings. - tailwind.config.js removed (Tailwind v4 uses @theme in CSS). Legacy code brought to lint-clean (356 → 0) - All console.* removed, including the session-cookie log in getCurrentUser (closes R1 early; P1.1 adds the structured logger). - Fixed B1 (await cookies() in profile update), B4 (duplicate keys), B12 (stateful /g regex), B13 (signIn return), B16 (single AgentProps). - Typed JSON boundaries instead of any; ?? instead of ||; void on fire-and-forget promises; onKeyDown instead of deprecated onKeyPress. - /api/vapi/generate: minimal shape validation and no error leakage (interim until P1.4 adds zod + session auth; R2 still open). - ci.yml: replaced invalid YAML flow mappings containing ${{ }}. Verified: pnpm lint, pnpm typecheck, next build all clean; hooks reject non-conventional messages. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * docs: update risk register, changelog, and contributing for PR 0.1 * ci: adopt milestone → dev → main promotion flow with pipeline gates - CI runs on every PR and on pushes to main, dev, and milestone/**. - New "Promotion guard" workflow: PRs into main must come from dev; PRs into dev must come from milestone/* or hotfix/*. Intended as a required status check alongside CI on both protected branches. - PROCESS.md documents the branching model; CONTRIBUTING.md, AGENTS.md, and docs/MILESTONES.md updated so work branches are cut from the current milestone branch, never from main. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: point issue template link at renamed repository * chore: add branch protection script for main and dev * ci: let pnpm/action-setup read the version from packageManager --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
… (PR 0.2) (#2) PR 0.2 of docs/MILESTONES.md. - tsconfig: target ES2022, noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride, noFallthroughCasesInSwitch, verbatimModuleSyntax. - next.config: removed ignoreBuildErrors and ignoreDuringBuilds (GUARDRAILS B10); reactStrictMode on; poweredByHeader off. - Fixed the 14 errors the flags surfaced without casts: guarded Firestore docs[0], messages.at(-1), tooltip payload[0]; optional props declared as `T | undefined`; RouteParams made generic so [id] pages get a typed `id`; firebase/admin fails fast on missing env instead of passing undefined to cert() (interim until config/env.ts in P0.3); sonner theme resolved without a cast. Verified: pnpm lint, pnpm typecheck, next build (now enforcing both). Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
….3) (#3) PR 0.3 of docs/MILESTONES.md. - config/env.ts (@t3-oss/env-nextjs + zod): server and client schemas for every variable in use; fails at boot with a readable message; SKIP_ENV_VALIDATION=1 for secret-less CI builds. Later-phase services are documented in .env.example but are added to the schema only by the PR that introduces them. - ESLint no-restricted-syntax bans `process.env` outside config/env.ts (GUARDRAILS B4). All seven prior usages migrated. - firebase/client.ts: config from NEXT_PUBLIC_FIREBASE_* env; fixed the `!getApps.length` bug (B3); Firestore client export removed (never used; data access is admin-only per SECURITY §2.7). - Gemini provider created explicitly with GEMINI_API_KEY instead of the SDK's implicit GOOGLE_GENERATIVE_AI_API_KEY lookup. - /api/news reduced to an empty stub (it only ever served fabricated example.com articles); widget shows an empty state until P3.5 deletes both. Verified: pnpm lint, pnpm typecheck, next build with valid env; build with FIREBASE_PROJECT_ID unset fails with the validation error. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…) (PR 0.4) (#4) * chore: remove dead dependencies, files, and exports flagged by knip - Removed pdfjs-dist, @types/pdfjs-dist, next-themes, lucide-react, @radix-ui/react-label (unused); tailwindcss-animate replaced by the Tailwind v4-native tw-animate-css import already in devDependencies. - Deleted unused shadcn files (form, label, sonner) — re-imported and adapted in P3.2 — plus dummyInterviews, tech mappings, getTechLogos. - knip.jsonc: eslint-config-next is referenced by string via FlatCompat; vitest/playwright binaries are ignored until P0.5 adds them. knip now exits 0. Verified: pnpm lint, pnpm typecheck. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: upgrade to Next 16.3, React 19.3, eslint-config-next 16 Read docs/app/guides/upgrading/version-16 before upgrading (RISKS R7). Applied: Turbopack is the default (dropped --turbopack); tsconfig jsx=react-jsx and .next/dev/types include as required by Next 16; eslint-config-next now ships native flat config, so FlatCompat and @eslint/eslintrc are removed; the Next-managed AGENTS.md block is committed so `next dev` leaves the tree clean. eslint-plugin-react-hooks v7 (React Compiler rules) surfaced five real issues, fixed idiomatically: derived lastMessage instead of mirrored state (Agent), pure fetch helper with state set only in promise callbacks (DailyLoginStar), no Date.now() during render (InterviewCard, AIChatbot), useSyncExternalStore clock (LiveDateTime). Not applicable here but noted for later phases: middleware.ts is now proxy.ts (P1.2), next lint is gone (CI/hook lint remains the gate). Verified: pnpm lint, pnpm typecheck, next build (Turbopack). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: upgrade AI SDK 4 -> 7 and @ai-sdk/google 1 -> 4 Read migration guides 5.0, 6.0, 7.0 before upgrading (RISKS R7). Applied: generateObject -> generateText with Output.object (read result.output); createGoogleGenerativeAI -> createGoogle; removed the per-model settings argument (structuredOutputs), which no longer exists. Model id unchanged pending the provider router in P2.3. Verified: pnpm lint, pnpm typecheck. A live structured-generation call reaches the Google API but is rejected with "API key not valid" — the stored key predates this work and must be regenerated (free) before the LLM path can be exercised end to end. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: upgrade zod 3 -> 4, @hookform/resolvers, react-hook-form Read the Zod 4 changelog before upgrading (RISKS R7). Applied the deprecations it introduces: z.string().email() -> z.email(), z.string().url() -> z.url(). Tuples, literals, transforms, and z.infer used in feedbackSchema and config/env.ts are unchanged. Verified: pnpm lint, pnpm typecheck, next build. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: upgrade firebase 11 -> 12 and firebase-admin 13 -> 14 Read the Admin SDK release notes before upgrading (RISKS R7): v14 requires Node 22 (pinned in .nvmrc/engines) and ES module entry points (already in use). No code changes were needed. Verified: pnpm lint, pnpm typecheck, next build; read-only smoke test against the real project with the service account (Firestore query and Auth listUsers succeed). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * chore: clear audit findings; pin @types/node 22; defer ESLint 10, TS 7 - pnpm override uuid@<11.1.1 -> >=11.1.1 (transitive via firebase-admin > @google-cloud/storage, a subpackage we never load). pnpm audit: 0 known vulnerabilities (was 27: 5 critical, 7 high). - @types/node pinned to 22.x to match the runtime. - Deferred with reasons: ESLint 10 (eslint-plugin-jsx-a11y and eslint-plugin-import do not yet declare support), TypeScript 7 (typescript-eslint caps at <6.1). - knip: eslint-config-next no longer needs ignoring now that it is a native flat-config import. Verified: pnpm lint, pnpm typecheck, knip, next build; firebase-admin smoke test still passes with the override. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix: initialise firebase-admin lazily so secret-less builds succeed CI's build job (SKIP_ENV_VALIDATION=1, no service account) failed because firebase/admin.ts created the Admin app at module scope while Next collected page data for route handlers. The app is now created on first use via getAdminAuth()/getDb(); importers updated. Verified: pnpm lint, pnpm typecheck; next build with .env.local moved aside (no secrets) succeeds; with secrets, next start serves /sign-in and /api/daily-login/streak performs a real Firestore read. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * docs: plan proxy.ts for Next 16; close R7; add R26 (Gemini key) --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
…e (PR 0.5) (#5) * ci: add vitest, Playwright, size-limit, first tests; complete pipeline PR 0.5 of docs/MILESTONES.md. - vitest.config.mts: unit + integration projects, v8 coverage with the docs/QUALITY.md thresholds on lib/, server/, config/ (legacy lib/actions and the Vapi wrapper excluded until their scheduled replacement). - playwright.config.ts: 375 / 768 / 1280 projects against a production build; PLAYWRIGHT_CHANNEL lets local runs use an installed Chrome. - tests/: skeleton (unit, integration, e2e, evals, fixtures); smoke e2e (public pages render, no horizontal overflow, anonymous redirect); unit tests for lib/utils and repository hygiene (R20: .env.example tracked, .env.local ignored, no build-error suppressions). - .size-limit.json: gzip ratchet on client chunks (560 kB; current 545 kB), to be lowered as legacy code is removed. - firebase.json: emulator config (auth, firestore) so CI can run emulators:exec; rules and indexes follow in P1.3. - ci.yml: local binaries instead of dlx; chromium only; e2e job builds with demo public env before running. - Removed the P0.5 guards: lefthook vitest script, knip ignoreBinaries. - tsconfig includes *.mts; tooling configs may read process.env. Verified: pnpm lint, pnpm typecheck, knip, vitest (4 tests, coverage gate), next build, size-limit, Playwright 9/9 on a production build. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * ci: install JDK 21 for the Firebase emulator jobs * docs: close R6 and R20; changelog for Phase 0 --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Phase 0 — toolchain and repo hygiene → dev
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch had an error being deployed
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
Promotion of
devintomainfor the Phase 0 release (v0.2.0). Contents: the engineering handbook, the five Phase 0 PRs (#1–#5), and the promotion-flow hotfix (#7). SeeCHANGELOG.md→ Unreleased for the full list.Release checklist (docs/QUALITY.md §5)
dev(all four jobs, including emulator integration and e2e)pnpm auditclean (0 findings)CHANGELOG.mdupdated; tagv0.2.0applied after mergedocs/RISKS.md: R6, R7, R19, R20, R25 closed; R26 open (Gemini key) and tagged for P2.3Known open items carried into Phase 1
/api/vapi/generateandcreateFeedbackstill unauthenticated (P1.4)GEMINI_API_KEYinvalid — LLM paths non-functional until replaced🤖 Generated with Claude Code