Validation: Communications tab (lead/client): contact methods

validation-52-2026-07-17 Doc

validation fail

Verdict: FAIL

Ticket

#52 Communications tab (lead/client): contact methods — Role-branched contact methods tab with DM, Email, and Appointment cards. Lead sees locked DM; client sees active DM link. Admin sees incoming management placeholder.
Merged PR: #82 (commit 4656364)
Board item: #1822 on board-iss

Environment

Production cluster, namespace intelligentstaffingsystems, URL https://intelligentstaffingsystems.ai
ArgoCD application: intelligentstaffingsystems — Synced / Degraded

Tiers Executed

Tier 1 (local/CI review) + Tier 3 (production). Per arch:rails label mapping.

Checks

# Criterion How Verified Result Evidence
1 CI pipeline green for merge commit Woodpecker pipeline #78 (push event for PR #82 merge) FAIL Pipeline #78: clone success, all other steps skipped. Pipeline #90 (latest main push): test step fails with <code>cannot load such file -- minitest/mock (LoadError)</code>, build-and-push skipped.
2 New image tag propagated to pod <code>kubectl get pods -o jsonpath</code> for image tags FAIL Running pod image: <code>93b9a79b8a88cbb07a7f8fda1b6d85803580cbbb</code> = commit <code>93b9a79</code> ("fix: align pipeline push repo with Argo CD Image Updater annotation"), which predates the Communications tab merge at commit <code>4656364</code>. No new image was built because CI test step fails.
3 Pod running and ready, restarts = 0 <code>kubectl get pods -n intelligentstaffingsystems</code> PARTIAL Old pod <code>6d6896dd95-ls9k4</code>: 1/1 Running, 0 restarts, 11h. New pod <code>8474c67bc8-nxphp</code>: 0/1 Init:CrashLoopBackOff — init container <code>migrate</code> fails with <code>PLACEHOLDER_POSTGRES_HOST</code>. ArgoCD reports Degraded.
4 /communications route returns 200 <code>curl -s -o /dev/null -w "%{http_code}" https://intelligentstaffingsystems.ai/communications</code> FAIL Returns HTTP 404. The running pod is on the pre-Communications-tab image; the route does not exist in that version.
5 Production root URL healthy <code>curl https://intelligentstaffingsystems.ai</code> PASS Returns HTTP 200. The old pod is still serving the landing page.
6 Lead sees 3 contact cards (DM locked, Email, Appointment) Cannot verify — code not deployed FAIL N/A — /communications returns 404
7 Client sees 3 contact cards with active DM link Cannot verify — code not deployed FAIL N/A — /communications returns 404
8 Admin sees incoming management view Cannot verify — code not deployed FAIL N/A — /communications returns 404

Regression Check

Production root URL (https://intelligentstaffingsystems.ai) still returns 200. The old pod continues to serve existing functionality. No regression from the merge itself — the new code simply has not deployed.
However, a separate issue exists: a new replica set pod is crash-looping due to PLACEHOLDER_POSTGRES_HOST in the deployment config (init container migrate cannot connect to database). This is a deployment configuration problem independent of the Communications tab code.

Discovered Issues

  • CI pipeline broken — minitest/mock LoadError. Pipeline #90 (latest push to main) fails at the test step because minitest/mock cannot be loaded. This blocks all image builds. The minitest-mock gem may need to be added to the Gemfile or the CI base image updated. This is the primary blocker preventing deployment of any merged code.
  • CrashLoopBackOff pod with PLACEHOLDER_POSTGRES_HOST. Pod intelligentstaffingsystems-8474c67bc8-nxphp has a deployment config referencing PLACEHOLDER_POSTGRES_HOST instead of the real database host. This appears to be a kustomize overlay or secret configuration issue in pal-e-deployments.
  • Dev environment unreachable. dev.intelligentstaffingsystems.ai returns connection refused (HTTP 000). ArgoCD app intelligentstaffingsystems-dev not found. Dev overlay may not be deployed yet.

Code Review (supplementary)

Although production validation fails, the merged code appears correctly implemented based on local review:
  • CommunicationsController has role branching (admin vs lead/client) with correct helpers
  • _contact_cards.html.erb renders 3 cards: DM (locked/active based on role), Email (clipboard Stimulus controller), Appointment (links to booking_path)
  • communications.css provides dedicated styling (144 lines)
  • Route defined at GET /communications in config/routes.rb
  • 16 controller tests cover authentication, role branching, card rendering, and Stimulus attributes
  • clipboard_controller.js Stimulus controller for email copy functionality

Blockers to Re-validation

  • Fix the minitest/mock LoadError in CI (add gem to Gemfile or update base image)
  • Trigger a successful pipeline build to push a new image to Harbor
  • Verify ArgoCD Image Updater picks up the new tag
  • Fix the PLACEHOLDER_POSTGRES_HOST in the deployment config (separate from this ticket)
  • Re-run this validation once the new image is live