Skip to content

Production Deployment 4.2.0#248

Merged
taterhead247 merged 27 commits into
F3-Nation:mainfrom
High-Country-Dev:staging
Apr 22, 2026
Merged

Production Deployment 4.2.0#248
taterhead247 merged 27 commits into
F3-Nation:mainfrom
High-Country-Dev:staging

Conversation

@dnishiyama

Copy link
Copy Markdown
Collaborator

👋 TL;DR

(coming soon)

🔎 Details

(coming soon)

✅ How to Test

(coming soon)

🥜 GIF

lack-of-hustle

BigGillyStyle and others added 18 commits April 8, 2026 20:37
* Upgrade pnpm from v8 to v10

- Update packageManager field to pnpm@10.33.0 via corepack
- Migrate `resolutions` to `pnpm.overrides` (canonical pnpm field)
- Add `pnpm.onlyBuiltDependencies` for esbuild, sharp, and @sentry/cli
  (pnpm v10 blocks lifecycle scripts by default)
- Update playwright.yml from pnpm/action-setup@v2 (pinned v8) to @v4
- Update AGENTS.md and README.md to reflect pnpm 10 and corepack usage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Remove unnecessary type assertions flagged by no-unnecessary-type-assertion lint rule

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Andy Pickler <apickler@andys.macbook.air.lan>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Andy Pickler <apickler@ggj6gqtx00.lan>
…-Nation#223)

* feat: add /logs Claude Code skill for auth app

Adds a skill to query Cloud Run logs for the f3-auth service with
deterministic bash scripts for argument parsing and output formatting.

Supports environment selection (staging/prod), severity filters,
time ranges, entry limits, and custom gcloud filters.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: escape pipe chars in log table and simplify time range handling

- Escape | chars in textPayload/jsonPayload via jq gsub to prevent
  markdown table corruption
- Replace redundant TIME_FILTER + --freshness with --freshness only,
  which is simpler and sufficient for gcloud logging read

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: accept all gcloud duration suffixes (s, m, h, d, w) in freshness regex

Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: promote /logs skill to monorepo top-level with multi-app support

Move from apps/auth/.claude/skills/logs/ to .claude/skills/logs/ so it
works for any Cloud Run app in the monorepo (auth, api, map). App config
is driven by apps.conf — add two lines to register a new app.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: add gcloud guard and fix array expansion bug in fetch-logs

Address preflight code review findings:
- P1: replace unsafe ${CUSTOM_FILTERS[*]:-} with explicit loop join
- P3: check gcloud CLI is installed before exec

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: add jq dependency guard in format-logs.sh

Matches the gcloud guard pattern in fetch-logs.sh for consistency.

Co-Authored-By: Claude <noreply@anthropic.com>

* docs: enrich /logs skill with categorized examples and tested configs

Add organized example sections (basic, app-specific, volume/time,
advanced filters), supported time units, and a tested configurations
table showing verified app+env combinations.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: promote argument-hint to top-level frontmatter so Claude Code renders placeholder text

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Tackle <damon.vinciguerra@gmail.com>
Prevents Claude Code agent worktrees from being tracked in version control.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…on#229)

* Auth app: SSO logout endpoint, onboarding prefill, and fixes

- Add /api/oauth/logout endpoint for SSO session termination
- Add GET /api/onboarding with isExistingUser flag for prefilling
- Fix JWT extractable key for JWKS export
- Fix add-client.ts CJS/ESM interop and DATABASE_PORT support
- Redirect authorize to /login/email

* Bump f3-auth version to 1.1.1

* Fix lint: use nullish coalescing in onboarding route

* Apply suggestions from code review

Co-authored-by: Patrick Taylor <1963845+pstaylor-patrick@users.noreply.github.com>

* Remove duplicate code blocks from reviewer merge

* Address PR review comments

- Validate logout redirect against registered client origins instead
  of same-origin only, so cross-origin SSO clients work correctly
- Init prefilling as false; set true at fetch start so unauthenticated
  visitors don't see Loading... indefinitely
- Use session?.user?.id consistently in useEffect guard and deps

---------

Co-authored-by: Patrick Taylor <1963845+pstaylor-patrick@users.noreply.github.com>
…e helper (F3-Nation#227)

* chore: install commitlint packages

* chore: add commitlint conventional config

* chore: add lefthook commit-msg hook for commitlint

* chore(repo): enforce monorepo scopes in commitlint config

Require scope on all commits with an allowlist mapped to apps, packages,
tooling, and cross-cutting concerns (deps, ci, repo, release).

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(repo): document conventional commit scopes in AGENTS.md

Replace the old free-form commit guidelines with the enforced
conventional commit framework: required scopes, scope table,
choosing heuristics, and examples.

Co-Authored-By: Claude <noreply@anthropic.com>

* chore(repo): add commitizen interactive commit helper via pnpm run commit

Uses @commitlint/cz-commitlint adapter so the interactive prompts
read scopes directly from commitlint.config.mjs — single source of truth.

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(repo): add tailwind scope to commitlint config docs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(repo): address PR review feedback — add tailwind scope, pin cz version

- Add 'tailwind' to commitlint scope-enum (R1)
- Pin @commitlint/cz-commitlint to exact version for consistency (R2)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat(repo): enable multiple scopes in commitizen prompt

Allows selecting more than one scope during `pnpm commit` for
cross-cutting changes (e.g., `feat(api,auth): ...`).

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(repo): regenerate pnpm lockfile to match package.json

CI was failing because --frozen-lockfile found the lockfile out of date.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(repo): remove stray debug text from AGENTS.md

Addresses R1 from code review — "arbitrary change made again" was
leftover test text that should not be merged.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Andy Pickler <apickler@andys.macbook.air.lan>
Co-authored-by: Patrick Taylor <1963845+pstaylor-patrick@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
* fix(auth): allow calls directly to /login/email

* chore(auth): version bump to 1.1.2
F3-Nation#230)

* chore: add db:proxy script for local Cloud SQL Auth Proxy

Registers `pnpm db:proxy` as a convenience script for starting
the Cloud SQL Auth Proxy against the non-prod instance. This is
a shared concern for all local developers.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add local development setup guide

Step-by-step guide covering prerequisites, GCP auth, secrets, Cloud SQL
Auth Proxy, migrations, and dev server startup for new contributors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs(repo): incorporate background proxy service from database-helpers

Addresses review feedback from @taterhead247 on PR F3-Nation#230.
Adds macOS (launchd) and Linux (systemd) instructions for running
Cloud SQL Auth Proxy as a persistent background service.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs(repo): address review findings on local dev setup guide

- Create root .env.example with all required variables
- Complete the secret mapping table (was missing EMAIL_*, GOOGLE_*, etc.)
- Add me app (port 3003) to dev servers table
- Fix gcloud version command in prerequisites
- Improve secrets script to write directly to .env file

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(repo): add deterministic env generation script

- scripts/generate-env.sh pulls staging secrets from GCP Secret Manager
  and generates a complete .env with sane local-dev defaults
- Symlinks .env.local into each app directory for shared config
- Never pulls from production — staging only
- Add pnpm scripts: env:generate, env:generate:dry-run
- Update LOCAL_DEV_SETUP.md to recommend the script as primary path

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(repo): auto-install gcloud and cloud-sql-proxy in db:proxy script

pnpm db:proxy now auto-detects and installs missing dependencies:
- gcloud CLI (via Homebrew on macOS, SDK installer on Linux)
- cloud-sql-proxy (via Homebrew on macOS, direct binary on Linux)
Also checks GCP auth and detects port conflicts before starting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(repo): use port 5433 for Cloud SQL proxy to avoid Docker conflict

Port 5432 conflicts with Docker Desktop's Postgres. Default to 5433
for the Cloud SQL Auth Proxy across all scripts and docs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(repo): add db:proxy:install for background daemon setup

- pnpm db:proxy:install — sets up launchd (macOS) or systemd (Linux)
  so the Cloud SQL proxy auto-starts on login, no terminal tab needed
- pnpm db:proxy:status — check if the daemon is running
- pnpm db:proxy:uninstall — remove the background service
- pnpm db:proxy — still works for one-off foreground usage
- Fix port 5432 → 5433 in launchd/systemd configs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(repo): rewrite generate-env.sh for macOS bash 3.2 compatibility

Replace declare -A (bash 4+) and associative arrays with plain
variables. macOS ships with bash 3.2 which doesn't support them.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(repo): address review findings on db-proxy scripts

- Fix header comment: default port 5432 → 5433
- Fix port-conflict suggestion: 5433 → 5434 (5433 is the default)
- Add sudo for Linux binary install in db-proxy.sh
- Fix remaining lsof port references in docs: 5432 → 5433

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore(repo): add /dev-setup Claude Code skill for local environment

Interactive skill that walks through docs/LOCAL_DEV_SETUP.md steps:
- Checks/installs prerequisites (node, pnpm, gcloud, cloud-sql-proxy)
- Generates .env from GCP staging secrets
- Starts Cloud SQL proxy (foreground or background daemon)
- Runs migrations and starts dev servers with health checks

Modes: default (full setup), status, fix, reset

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(repo): pull Google Maps key and GCS secrets from GCP in env generation

The map and api apps require NEXT_PUBLIC_GOOGLE_API_KEY and
GOOGLE_LOGO_BUCKET_* vars that weren't in GCP Secret Manager.
Created these secrets in f3-authentication-staging and wired
generate-env.sh to pull them automatically. All 3 apps now
start cleanly after `pnpm env:generate`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* [MOUNT-57] Update modals and add mobile filter sheet (#21)

* Update modals and add mobile filter sheet

- Updated various modal components to improve layout and responsiveness, including adjustments to class names for better styling.
- Introduced a new MobileFilterSheet component for mobile devices to manage filters more effectively.
- Integrated MobileFilterSheet into AOsTable, AreasTable, and other relevant components to enhance user experience on smaller screens.
- Adjusted filter handling logic to accommodate the new mobile filter interface.

* Enhance admin layout with titles and z-index adjustments

- Added a title prop to the Layout component for better page identification across various admin pages.
- Updated the z-index for the header to ensure proper stacking context.
- Adjusted padding for content areas to improve layout consistency.
- Modified several admin pages to utilize the new title feature, enhancing user experience and accessibility.

* Add scrollbars in the admin sidebar. (#19)

* Update event category handling in forms and modals (#18)

- Introduced EVENT_CATEGORY_OPTIONS and EVENT_CATEGORY_LABEL_MAP constants for better management of event categories.
- Updated LocationEventForm, AdminEventTypesModal, and AdminWorkoutsModal to utilize the new constants for displaying event category labels.
- Improved label formatting to include category descriptions where applicable.

* Enhance Google Map component by adding draggable marker and improving center handling logic (#2)

* - Updated user router to allow role changes while preventing profile modifications for users outside the admin's managed home region.
- Refactored user update logic to streamline authorization checks and ensure existing user data is preserved when unauthorized edits are attempted.
- Enhanced tests to validate the new behavior, ensuring that profile fields remain unchanged while roles can still be updated.

* Update role uniqueness validation in user management modals and API

* fix user tests
… handling (#28)

- Replaced individual workout type filters with a national event type filter in the map component.
- Updated filter state management to accommodate national event type IDs.
- Enhanced the filter data function to check against selected national event types.
- Introduced a new API query to fetch active national event types for filtering.
- Refactored the UI to use a select component for time and event type filters, improving user experience.
- Added sorting state management to AreasTable, SectorsTable, AllUsersTable, and MyUsersTable components.
- Updated query parameters to include sorting options for better data retrieval.
- Introduced new sorting schema in the API for consistent handling of sorting across various tables.
- Adjusted columns in the workouts table to reflect changes in data structure and sorting capabilities.
… instead of specific options for better maintainability. (#30)
…31)

* Update URL validation schemas and enhance modal functionality

- Updated the `AdminAOsModal` to simplify query invalidation after updating AOs.
- Introduced comprehensive URL validation schemas for website, Facebook, Instagram, and Twitter in the validators package.
- Added tests for the new URL schemas to ensure proper validation of various URL formats.

* Updated the `render` prop in `FormField` components for Twitter, Facebook, and Instagram to include explicit TypeScript type definitions for the `field` parameter, enhancing type safety and clarity.

* Update URL validation schemas for Facebook, Instagram, and Twitter to improve clarity and validation logic, ensuring proper handling of optional URLs and enhancing user experience with more descriptive error messages.

* chore(validators): update error messages in URL validation schemas
* Implement admin positions management

- Added new `AdminPositionsModal` for managing positions, including creation and editing functionalities.
- Introduced `AssignmentsTable` to display and manage user assignments for positions.
- Created `PositionsTable` for listing all positions with filtering and pagination capabilities.
- Updated `modal-switcher` to include the new positions modal.
- Enhanced the API to support position assignments and retrieval with pagination and filtering options.
- Added navigation links for positions in the admin panel.
- Updated relevant tests to cover new functionalities and ensure robust validation.

* Updated tests in `position.test.ts` to create a database-backed admin session, improving test reliability and setup.

* style(map): update position assignment tab
@taterhead247

Copy link
Copy Markdown
Contributor

@dnishiyama , did you mean to go from your high country dev for right into main?

@dnishiyama

Copy link
Copy Markdown
Collaborator Author

No this is what I intended and what I did last time. I made a staging deployment and then made a production PR. Seems like we are nearly ready to migrate to tag based deployments which would be much better.

@taterhead247

Copy link
Copy Markdown
Contributor

Huh. I see some commits in there that were made to the Nation dev branch. So this PR has everything dev has?

@taterhead247 taterhead247 moved this from Draft to In review in F3 Nation Tech (Pull Requests) Apr 21, 2026
@dnishiyama

Copy link
Copy Markdown
Collaborator Author

Huh. I see some commits in there that were made to the Nation dev branch. So this PR has everything dev has?

Yes, there isn't a good, clean way to get around that. That happens with trunk deployments too. We can talk about some alternatives on the call today

…utes (F3-Nation#194)

* bringing in the cascade service

* added cascade service to event and org routes, added test suite for service

* setting cascade isActive to match the series data

* added cascade integration test for org deletion

* handle cascade where recurrencePattern is not set (defaults to weekly event)

* using getCurrentDate as from date in cascade

* fixing cascade cleanup

* added event integration tests for event cascading

* supporting multiple event type propogation

* moving webhook notification to after cascade

* applying copilot suggestion on org checking before cascading

* test cleanups

@taterhead247 taterhead247 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I ran through maps and api in staging and all looks good. It'd be nice to see a change long. But I won't hold things up for that.

@taterhead247 taterhead247 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just saw the test ci failed. Can this be corrected? And adding the change long while you're at it would be great.

@taterhead247 taterhead247 changed the title Production Deployment 4.1.0 Production Deployment 4.2.0 Apr 22, 2026
evanpetzoldt and others added 5 commits April 22, 2026 06:11

@taterhead247 taterhead247 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good now!

@taterhead247 taterhead247 merged commit f8a964d into F3-Nation:main Apr 22, 2026
8 checks passed
@github-project-automation github-project-automation Bot moved this from In review to Merged in F3 Nation Tech (Pull Requests) Apr 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Merged

Development

Successfully merging this pull request may close these issues.

6 participants