Skip to content
AgencyProofby Intelliblitz

Field note

Decide what blocks a launch before the findings arrive

Every launch argument is the same argument: is this a blocker or a note? Held after the findings land, that conversation is a negotiation. Held before, it is a policy. Here are the six questions that turn a label into a decision, and who answers each one.

Balaji Ponnambalam7 min read
A brass gate arm is lowered across a sorting bench, holding one tray of identical blank tokens while the rest have passed. A canary perches on the held tray; an inspector works the lever.

A row on the screen says the contact form returned a server error, and the label beside it reads critical. The developer says the scan hit a rate limit and the form works. The account manager says a client cannot open a new site with a contact form nobody can trust. Same row, and neither of them has said anything about evidence yet.

That argument runs on every project and is usually settled by whoever is more senior or more tired. The way out is not a better label. It is agreeing what blocker means here, before any findings exist. Everything below is illustrative rather than reported.

AgencyProof derives its launch tier from severity: critical becomes a launch_blocker, high and medium should_fix, low and enhancement post_launch (src/lib/audit/classify.ts:39-53). The comment above it records the looser rule that came before: promoting every high finding to blocker "inflated blocker counts" and made the held verdict "cry wolf" (classify.ts:9-17). The canonical account of severity is equally blunt: "severity ratings from a single evaluator are too unreliable to be trusted." A scanner is one evaluator.

The product's own claim is narrow, and worth quoting exactly. AgencyProof produces an "AgencyProof Launch Readiness Score and a rules-based Hold, Conditionally ready, or Ready verdict." The third label carries a qualification wherever it appears: "Ready under the AgencyProof scoring model as of the scan timestamp." The limit is stated plainly: "Ready" is the result of the AgencyProof scoring model for the site as observed at scan time, not a guarantee of business, legal, security or launch outcomes. An open launch blocker holds the verdict at Hold however high the score climbs (src/lib/audit/verdict.ts:1-27).

So the definition of blocker belongs to people. The six questions below are this publication's editorial framework, not a product feature.

FactorThe questionAnswer that makes it a blockerAnswer that makes it a noteEvidence required
EvidenceHow completely was this observed?Directly observed, sufficient aloneInferred, or the probe was blockedRequest and response, captured
Affected journeyWhat the client sells breaks?Enquiry, booking, purchaseA route no visitor reachesThe path, walked by a person
ExposureWho meets it, and how soon?Every visitor, from hour oneAuthenticated, or linked from insideInbound links, indexability
ReversibilityWhat does undoing it cost?A release, migration or correctionAn edit anyone with access can makeWho deploys, how fast
OwnershipWho can change the condition?Nobody named, or nobody agreedA named person, dated taskName, discipline, date
ConsequenceWhat does shipping it cost?Revenue, an untrue statement, misrouted dataUntidiness nobody noticesOne sentence the client would use
Scroll for more →

What evidence do we actually have?

Severity is a property of the label. Disposition is a property of the finding, and the engine keeps them apart on purpose. The comment on the disposition type puts the split in one line: verification_status answers "how confirmed is the observation?", while disposition answers "is this actually a defect for THIS org?" (src/lib/types.ts:74-80).

ConfirmedObserved directly, and the observation is sufficient on its own. Needs confirmation Intentional

Three findings can carry the same severity and belong in those three places. The pipeline makes the first hard to reach: a detector must propose it, and the finalizer falls back to needs_confirmation under a comment reading "NEVER a defect from provenance alone" (src/lib/audit/classify.ts:414-431). Validation may only move a disposition down the defect scale, and a confirmed_defect survives only where the evidence contract came back complete (classify.ts:433-487, src/lib/types.ts:157-161).

Borrow the discipline, not the machinery. When the answer to what was observed is a captured request and its response, you have evidence. When it is a static signal standing in for behaviour nobody watched, you have a question wearing a red label.

Which journey does it break?

A finding without a journey attached is a fact about a page. With a journey attached it is a fact about the business, and only the second kind holds a launch. The product's high band is defined by that test: it "Moves revenue, trust, or launch readiness directly" (src/lib/constants.ts:375).

The client is the only reliable source, and the question is smaller than it sounds. Not "is this page important" but "if this stopped working on Monday, what would the business notice by Friday".

Who is exposed if it ships?

This factor is usually answered by how alarming a finding looks. A refused administrative route reads like a fire. Most of the time it is a door working.

Route /adminIntentional
GET /admin HTTP/1.1; response 403 Forbidden; anonymous request, no authenticated session attempted

EstablishesAn anonymous request to that route was refused by the origin server.

Does not establishWhether an authorised user can reach the page, and whether the resource exists at all.

Illustrative capture.

The two codes an automated check reads most confidently are both permitted to mean other than they appear. RFC 9110 defines 403 as a server that "understood the request but refuses to authorize it", adding that an origin server wishing to hide a forbidden resource "MAY instead respond with a 404 (Not Found) status code". The 404 definition carries the same escape hatch: the server "did not find a current representation for the target resource or is not willing to disclose that one exists."

Which is this test's honest limit from outside. It can say who is exposed anonymously, not whether an authorised person completes the journey. Until someone with an account walks the rest, the exposure row is an estimate and belongs in the record as one.

Can this be undone after launch?

Reversibility has no counterpart in the engine and should not have one. It is a fact about your release process, not about the site, and the distinction is between a thing you edit and a thing you retract. A wrong price in a content block is an edit. A wrong price a visitor acted on is a conversation. An email that fired because a form pointed at the wrong list has left the building.

Who owns the fix?

Two questions hide inside ownership, and the engine separates them because conflating them produces tasks nobody can do. Controllability records who can realistically change the condition, across customer_controlled, developer_controlled, platform_controlled and third_party_controlled, warning against handing a customer "a task their platform won't allow" (src/lib/types.ts:146-155). ActionRequirement records what is asked for, including confirm, an item that "deducts nothing but still asks for a runtime check" (src/lib/types.ts:116-125).

An unowned finding is not a note. It is a blocker with the argument still in front of it, because the first thing anyone does next meeting is rediscover it.

Inspection ticket
Critical blockerTrust

Contact form returns a server error on submit

FILED ON · /contact

Illustrative. Two submissions returned a server error with the typed message discarded; both responses captured. Journey: enquiry, the only lead path. Reversible: no, the handler ships with the release. Owner: named developer, dated.

What does it cost if we ship it anyway?

The last question is the one clients answer best and agencies ask least. It asks what the finding costs in the currency the client keeps score in. Sometimes they accept that cost, which produces a different document: a launch exception record stating what was observed and what was decided, without pretending the finding was resolved.

FindingEvidenceJourneyExposureReversibleOwnerCall
Contact form returns a server errorTwo responses capturedEnquiry, the only lead pathEvery visitor, hour oneNoDeveloper, datedConfirmed blocker
/admin returns 403 anonymouslyNo authorised attemptNone a visitor usesNobody outside the teamNot applicableNone neededIntentional control
Page states an award we have not seenCopy captured, no documentCredibility, converting pageEvery readerYes, an editClient marketing leadNeeds confirmation
Retired campaign URL returns 404Link live in an email footerReturn visits, paid campaignAnyone holding the linkYes, a redirectDeveloper, datedScheduled correction
Analytics request precedes the noticeLoad order, fixture captureEvery page viewAll visitorsYes, configurationClient, decision recordedAccepted exception
Scroll for more →

One severity label sits behind several of those rows and they end in five different calls. Nothing past the second column comes from a scan.

Put the test in the scope document, where the client signs it:

A finding holds the launch when the evidence is complete, it breaks a journey the client sells, and undoing it after release costs more than fixing it now. Everything else ships with a named owner and a date.

Both halves are load bearing. The first is what you will stop for. The second is the promise that everything you did not stop for is still somebody's job on Monday.

Provenance

Written by
Balaji PonnambalamFounder, AgencyProof
Technical review
Written and self-reviewed against the codebaseAgencyProof is a one-person engineering team; there is no second reviewer to claim.
Published
Evidence basis
Examples are illustrative and are labelled where they appear.

Every product claim in an article is checked against the AgencyProof source tree before publication, and traced to the code path that implements it. Where the article describes a method rather than a shipped behaviour, it says which it is.

A dispatch room at night: a corded parcel with an unstruck seal waits on a workbench under one hanging lamp, beside a closed iron dispatch hatch, with a run of small cabinet doors standing open along the left wall.Launch Manual
Manual5 min read

What to inspect before sending a website to the client

The best time to find a defect is before the client's attention shifts from the design to the mistake. A one-hour inspection for the first “finished” link.

By Balaji Ponnambalam