Files
Charon/docs/plans/archive/caddy_import_firefox_assessment.md
akanealw eec8c28fb3
Some checks failed
Go Benchmark / Performance Regression Check (push) Has been cancelled
Cerberus Integration / Cerberus Security Stack Integration (push) Has been cancelled
Upload Coverage to Codecov / Backend Codecov Upload (push) Has been cancelled
Upload Coverage to Codecov / Frontend Codecov Upload (push) Has been cancelled
CodeQL - Analyze / CodeQL analysis (go) (push) Has been cancelled
CodeQL - Analyze / CodeQL analysis (javascript-typescript) (push) Has been cancelled
CrowdSec Integration / CrowdSec Bouncer Integration (push) Has been cancelled
Docker Build, Publish & Test / build-and-push (push) Has been cancelled
Quality Checks / Auth Route Protection Contract (push) Has been cancelled
Quality Checks / Codecov Trigger/Comment Parity Guard (push) Has been cancelled
Quality Checks / Backend (Go) (push) Has been cancelled
Quality Checks / Frontend (React) (push) Has been cancelled
Rate Limit integration / Rate Limiting Integration (push) Has been cancelled
Security Scan (PR) / Trivy Binary Scan (push) Has been cancelled
Supply Chain Verification (PR) / Verify Supply Chain (push) Has been cancelled
WAF integration / Coraza WAF Integration (push) Has been cancelled
Docker Build, Publish & Test / Security Scan PR Image (push) Has been cancelled
Repo Health Check / Repo health (push) Has been cancelled
History Rewrite Dry-Run / Dry-run preview for history rewrite (push) Has been cancelled
Prune Renovate Branches / prune (push) Has been cancelled
Renovate / renovate (push) Has been cancelled
Nightly Build & Package / sync-development-to-nightly (push) Has been cancelled
Nightly Build & Package / Trigger Nightly Validation Workflows (push) Has been cancelled
Nightly Build & Package / build-and-push-nightly (push) Has been cancelled
Nightly Build & Package / test-nightly-image (push) Has been cancelled
Nightly Build & Package / verify-nightly-supply-chain (push) Has been cancelled
Update GeoLite2 Checksum / update-checksum (push) Has been cancelled
Container Registry Prune / prune-ghcr (push) Has been cancelled
Container Registry Prune / prune-dockerhub (push) Has been cancelled
Container Registry Prune / summarize (push) Has been cancelled
Supply Chain Verification / Verify SBOM (push) Has been cancelled
Supply Chain Verification / Verify Release Artifacts (push) Has been cancelled
Supply Chain Verification / Verify Docker Image Supply Chain (push) Has been cancelled
Monitor Caddy Major Release / check-caddy-major (push) Has been cancelled
Weekly Nightly to Main Promotion / Verify Nightly Branch Health (push) Has been cancelled
Weekly Nightly to Main Promotion / Create Promotion PR (push) Has been cancelled
Weekly Nightly to Main Promotion / Trigger Missing Required Checks (push) Has been cancelled
Weekly Nightly to Main Promotion / Notify on Failure (push) Has been cancelled
Weekly Nightly to Main Promotion / Workflow Summary (push) Has been cancelled
Weekly Security Rebuild / Security Rebuild & Scan (push) Has been cancelled
changed perms
2026-04-22 18:19:14 +00:00

2.4 KiB
Executable File

Caddyfile Import Firefox Issue - Final Assessment

Issue: GitHub #567 Reported: January 26, 2026 Resolved: February 1, 2026 (Commit eb1d710f) Verified: February 3, 2026


FINAL VERDICT: ISSUE RESOLVED

Root Cause

API contract mismatch between frontend and backend:

  • Frontend sent: {contents: string[]}
  • Backend expected: {files: [{filename: string, content: string}]}

Fix Applied (Commit eb1d710f)

  1. API Client (frontend/src/api/import.ts):

    • Added CaddyFile interface with filename and content fields
    • Updated uploadCaddyfilesMulti() to send {files: CaddyFile[]}
  2. UI Component (frontend/src/components/ImportSitesModal.tsx):

    • Changed state from string[] to SiteEntry[] (with filename + content)
    • Updated form to construct proper CaddyFile[] payload
  3. Error Handling (frontend/src/pages/ImportCaddy.tsx):

    • Added warning extraction from 400 error responses
    • Improved UX for backend validation warnings

Why Firefox Was Affected

The bug was browser-agnostic (affected all browsers), but Firefox's stricter error handling and network stack behavior made the issue more visible to users.

Verification Evidence

Code Review:

  • API contract matches backend expectations exactly
  • Component follows new contract correctly
  • Button event handler has proper disabled/loading state logic

Test Coverage:

  • Comprehensive E2E tests exist (tests/tasks/import-caddyfile.spec.ts)
  • Tests validate full import flow: paste → parse → review → commit
  • Test mocks confirm correct API payload structure

Documentation Updated:

  • API documentation (docs/api.md) reflects correct contract
  • Changelog (CHANGELOG.md) documents the fix

Recommendation

Action: Close GitHub Issue #567

Rationale:

  1. Root cause identified and fixed
  2. Fix verified through code review
  3. Test coverage validates correct behavior
  4. No further changes needed

Follow-up (Optional):

  • Monitor production logs for any new import-related errors
  • Consider adding automated browser compatibility testing to CI pipeline

References

  • Frontend Analysis: docs/plans/caddy_import_frontend_analysis.md
  • Backend Analysis: docs/plans/caddy_import_backend_analysis.md
  • Fix Commit: eb1d710f504f81bee9deeffc59a1c4f3f3bcb141
  • GitHub Issue: #567 (Jan 26, 2026)

Status: Investigation Complete - Issue Confirmed Resolved