diff --git a/CLAUDE.md b/CLAUDE.md index 9be0cf8..6c07a50 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -98,7 +98,7 @@ All shippable work commits **directly to `main`**; `main` is always equal to wha ### Live validation -Live validation of a user-facing feature must exercise the real UI/user flow end-to-end (e.g. connect → enroll → deploy), not shortcut via direct API/agent/CLI calls — a shortcut can give false confidence and leave the system inconsistent (see the F9 storage episode). Low-level mechanism tests where the direct call IS the mechanism are exempt. +Live validation of a user-facing feature must exercise the SERVER-SIDE PIPELINE a real user triggers, end-to-end (e.g. connect → enroll → deploy). The forbidden shortcut is BYPASSING that pipeline — e.g. raw agent guest-attach + hand-set state instead of the enrollment flow (the F9 episode) — which gives false confidence and leaves the system inconsistent. INVOKING THE EXACT ENDPOINT THE UI INVOKES — so the full server pipeline (gates, env injection, pre-create belts, compose generation) runs — is an ACCEPTABLE proxy when a browser-automation tool isn't available: it differs fundamentally from the F9 bypass because no server logic is skipped, only the browser rendering. The residual that proxy does NOT cover is purely client-side (progress panels, card/health rendering, client-side guards like checkBeforeDeploy); for strict end-to-end UI coverage use a real browser tool or a manual click-through — and SAY which was used. Low-level mechanism tests where the direct call IS the mechanism remain exempt. ## Workflow & artifacts