Skip to content

Gates are non-bypassable

Atlas distinguishes two kinds of judgment calls. A classification is a decision: Atlas examines a task and declares it analytical or transactional, core or BTP. A gate is a condition: given the plan in front of it, a gate asks whether a specific, testable property holds. You can disagree with a decision and take responsibility for a different one; that is what override is for. You cannot disagree with a condition by asserting it is not true. What you can do is either fix the cause or declare, in writing, why the condition is acceptable as it stands.

That distinction is the whole design.

What happens when a gate runs Gate runs against plan condition is precise and testable passes fails Plan advances result recorded in evidence Plan is held at validate no bypass; only two exits Resolve · fix the cause swap the entity, change the binding, adjust the plan — gate re-runs clean Override · with a reason --reason ≥20 chars, stored on evidence and the transport Resolve hides the failure. Override carries it forward in writing. There is no third exit.
What happens when a gate runs — two exits on failure, both legible.

Each gate is a small, explicit predicate over the plan graph. Does this analytics view read a physical table directly? Does any emitted binding land on a P_ view? Does any amount field lack a currency annotation? Because a gate is a predicate, its result is deterministic — given the same plan, it always produces the same answer — and therefore its failure is reviewable. The reviewer can look at the plan and check Atlas’s work.

A gate’s job is to protect an invariant that downstream consumers will rely on. When the gate fires, it is telling you the invariant is in danger. Resolving the gate means removing the danger. Overriding the gate means accepting the danger and writing down why accepting it is reasonable in this specific case.

The third exit would be skip this check, no reason needed. The moment a system accepts that exit, every downstream consumer of that system’s output has to re-litigate whether the check was meaningful. The invariant the gate was protecting stops being an invariant; it becomes a polite suggestion. Atlas is in the business of trust under evidence, and trust depends on the invariants actually holding or actually being written down when they do not. A silent skip breaks both conditions at once.

This is why overriding requires a reason — a 20-character minimum is the contract. A two-word excuse is not a reason; a sentence is. Your release manager will see it on the transport, and your auditor will see it in the evidence trail.

An override is not free, but it is legible. Every override shows up on the plan’s evidence summary, on the transport description, and in the evidence trail any reviewer or auditor reads. An override that reads “we decided not to fix this” costs you more later than an override that reads “I_Customer is not released in target system 2020; correction will land with the 2023 upgrade.” One of those is a reason. The other is an outage waiting to happen.

Where the reason goes after you write it VALIDATE Gate fails onvalidate Atlas holds the plan.Two exits only. AUTHOR Reason iswritten --reason "…", 20-charminimum, stored on theevidence node. TRANSPORT Travels on theTR Reason appears in thetransport descriptionthat release reviews. COMPLIANCE Landed in theaudit Included in atlasevidence --formatjsonld. Auditor seesit. The reason you write at step 2 is the sentence your auditor reads at step 4. There is no silent skip.
An override's journey — author, transport, audit, all reading the same 20 characters you wrote.

No matter how politely you ask, Atlas will not delete a gate result from evidence after the gate has run. It will not silently redefine a gate without producing a new plan generation. There is no --skip-validate flag; the flag does not exist and never will. These are not limits Atlas is reluctant about — they are the reason anyone downstream of Atlas can rely on what the gate results mean.

Once you have lived with the rule for a while, you will notice a second thing it does. When someone inherits your project six months later, every override they find is a note from the past that explains something non-obvious — a release-window constraint, a temporary workaround, a missing upstream view. The overrides you wrote to pass validate today become the documentation the next engineer thanks you for tomorrow. That is the payoff from the 20-character minimum.