{"version":"2026-07-06","name":"Visa Atlas SEO/GEO release gate contract","description":"Audit-ready release gate for shipping Visa Atlas SEO/GEO changes: compile, source audits, freshness, optional liveness, production build, rendered crawler output, outcome-claim boundaries and private-evidence proof controls.","datasetUrl":"/api/public/seo-geo-release-gate","humanUrl":"/research/seo-geo-release-gate-contract-2026","runnerPath":"scripts/seo-geo-release-gate.mjs","docsPath":"docs/seo-geo-release-gate.md","license":"CC BY 4.0","attribution":"Visa Atlas","sourceDatasets":["/api/public/seo-geo-release-gate","/api/public/technical-seo-controls","/api/public/seo-geo-audit-evidence","/api/public/execution-readiness","/api/public/seo-geo-production-queue","/api/public/seo-geo-page-action-map","/api/public/seo-geo-measurement-run-queue","/api/public/seo-geo-dominance-gap-ledger","/api/public/battlecard-retrieval-coverage","/api/public/crawler-access","/api/public/visibility-metrics"],"methodology":{"technicalSeoControlsVersion":"2026-07-04","seoGeoAuditEvidenceVersion":"2026-07-05","executionReadinessVersion":"2026-07-04","productionQueueVersion":"2026-07-04","pageActionMapVersion":"2026-07-04","measurementRunQueueVersion":"2026-07-06","crawlerAccessAuditVersion":"2026-07-03","visibilityMetricsVersion":"2026-07-03","sourceOfTruth":"This contract is generated from the local SEO/GEO release runner, release-gate documentation, technical SEO controls, audit evidence pack and measurement/proof gate surfaces. It is a public checklist for deploy governance, not a publication of private evidence.","defaultCommand":"npm run audit:seo-geo","releaseSignoffCommand":"npm run audit:seo-geo -- --include-liveness","privateEvidencePolicy":"Raw Search Console exports, analytics exports, server logs, source-refresh liveness output, AI answer transcripts, screenshots, reviewer notes and third-party publication evidence stay local unless separately reviewed, redacted and approved for publication.","noGoPolicy":"Do not deploy growth-facing SEO/GEO changes, or publish ranking, traffic, backlink, AI-visibility, reviewer-trust, market-share or 500k/month claims, unless the matching required gate has passed and any private evidence used for a public claim has reviewed approval metadata.","caveats":["This contract proves the release checks that must pass before growth-facing SEO/GEO changes ship; it does not prove rankings, traffic, backlinks, AI citations, market share or the 500k/month planning target.","The default release gate is offline and deterministic; run the sign-off command with --include-liveness when source-refresh or release approval requires live government-source probes.","Passing the gate blocks overclaiming by keeping public outcome claims tied to reviewed proof gates rather than raw private evidence."]},"summary":{"stepCount":8,"requiredStepCount":7,"optionalNetworkStepCount":1,"commandCount":8,"sourceDatasetCount":11,"blocksPublicOutcomeClaims":true,"planningTargetMonthlyVisits":500000},"steps":[{"id":"typescript-compile","label":"TypeScript app/runtime compile","stepClass":"compile","status":"required","command":"npm run typecheck","runnerOrder":1,"sourceSurfaces":["tsconfig.json","src/**",".next/types/**"],"proves":["Application and route-handler TypeScript compile without shipping-time type regressions.","Generated Next types are compatible with the current source tree."],"privateEvidenceBoundary":"No private evidence is read; this is a local compile gate.","failureBlocks":["Any SEO/GEO release, public dataset update, MCP tool update or rendered-surface deployment."],"caveats":["Script files are exercised by the audit commands they define rather than the app compile gate."]},{"id":"source-template-audits","label":"Source/template SEO-GEO audits","stepClass":"source-audit","status":"required","command":"npm run audit:all","runnerOrder":2,"sourceSurfaces":["scripts/audit-*.ts","/api/public","/data","/ai-agents","/llms.txt","/llms-full.txt","/mcp"],"proves":["Public data, AI retrieval, competitor, content, page-action, measurement, proof-gate and trust surfaces stay wired.","Outcome-claim boundaries remain blocked unless their matching proof gates have reviewed evidence.","The 500k/month traffic runway reconciles to battlecards, target pages, production tickets and search-demand actions."],"privateEvidenceBoundary":"Raw Search Console exports, analytics exports, server logs, source-refresh liveness output, AI answer transcripts, screenshots, reviewer notes and third-party publication evidence stay local unless separately reviewed, redacted and approved for publication.","failureBlocks":["Growth-facing deploys and any public SEO/GEO outcome claim."],"caveats":["Source audits prove wiring and fail-closed logic; they do not prove external adoption or live traffic outcomes."]},{"id":"freshness-sla","label":"Freshness SLA audit","stepClass":"freshness","status":"required","command":"npm run audit:stale","runnerOrder":3,"sourceSurfaces":["/freshness","/api/public/freshness","src/data/**"],"proves":["Dated public immigration facts remain inside their freshness SLA thresholds before release."],"privateEvidenceBoundary":"No private evidence is read; source review dates and public data records are checked locally.","failureBlocks":["Any release that would publish stale government fees, thresholds, processing times or policy facts."],"caveats":["The check proves local freshness metadata, not live government-source availability."]},{"id":"government-source-liveness","label":"Government source liveness audit","stepClass":"network-liveness","status":"optional-network","command":"npm run audit:seo-geo -- --include-liveness --liveness-timeout=8000 --liveness-concurrency=30 --liveness-progress=250 --liveness-out=.tmp/seo-geo-liveness-report.json","runnerOrder":4,"sourceSurfaces":["scripts/audit-liveness.ts",".tmp/seo-geo-liveness-report.json"],"proves":["Release sign-off can include live source reachability without committing raw liveness output.","Inconclusive live checks are separated from deterministic source/template gates."],"privateEvidenceBoundary":"Network probe output and source-refresh notes stay in .tmp or another local evidence path unless reviewed.","failureBlocks":["Source-refresh sign-off when live government-source probing is required."],"caveats":["This step can be skipped for offline code-only changes; it requires network access and may be affected by government WAFs."]},{"id":"production-build","label":"Production build","stepClass":"build","status":"required","command":"NEXT_PUBLIC_SITE_URL=https://visaatlas.org NODE_OPTIONS=--max-old-space-size=8192 npm run build","runnerOrder":5,"sourceSurfaces":["next.config.ts",".next/server/app",".next/build-manifest.json",".next/app-build-manifest.json"],"proves":["The production Next.js app renders with the canonical site URL used for JSON-LD, canonical links and OpenGraph URLs.","Static pages, public feeds and route handlers can be generated for deployment."],"privateEvidenceBoundary":"Build artifacts are local generated output; no private analytics, GSC or source-refresh evidence is read.","failureBlocks":["Any deploy to production."],"caveats":["Static-generation retries are warnings when the final build exits successfully; failed builds block release."]},{"id":"postbuild-rendered-audits","label":"Post-build rendered SEO/GEO and performance artifact audits","stepClass":"rendered-audit","status":"required","command":"npm run audit:postbuild","runnerOrder":6,"sourceSurfaces":[".next/server/app",".next/static/chunks",".next/build-manifest.json",".next/app-build-manifest.json","scripts/audit-rendered-seo-surface.ts","scripts/audit-build-performance-budgets.ts"],"proves":["Rendered crawler-facing pages, JSON feeds, LLM indexes, data citation surfaces and MCP discovery text are present after build.","Representative JS, CSS, rendered HTML and public feed payload budgets remain inside explicit thresholds."],"privateEvidenceBoundary":"Rendered output is public build output; private evidence must not appear in public artifacts.","failureBlocks":["Any deploy that changes discovery, crawlability, public datasets, LLM indexes or data-heavy pages."],"caveats":["Rendered audits prove current build artifacts, not production traffic or third-party indexing."]},{"id":"public-outcome-claim-boundaries","label":"Public outcome-claim boundary audit","stepClass":"claim-boundary","status":"required","command":"npm run audit:traffic-outcome-proof && npm run audit:public-outcome-claims && npm run audit:release-gate","runnerOrder":7,"sourceSurfaces":["scripts/traffic-outcome-proof.ts","scripts/audit-public-outcome-claims.ts","scripts/audit-seo-geo-release-gate.ts","/api/public/seo-geo-measurement-run-queue"],"proves":["Traffic, ranking, backlink, AI-visibility, reviewer-trust and market-share claims stay blocked without reviewed proof files.","The release gate remains documented and wired into visibility metrics and OpenAPI discovery."],"privateEvidenceBoundary":"Raw Search Console exports, analytics exports, server logs, source-refresh liveness output, AI answer transcripts, screenshots, reviewer notes and third-party publication evidence stay local unless separately reviewed, redacted and approved for publication.","failureBlocks":["Any public claim of 500k/month traffic, dominance, market share, rankings, AI visibility, backlinks or reviewer trust."],"caveats":["This step protects public claims; it does not itself create or approve the private evidence."]},{"id":"execution-proof-gates","label":"Execution proof gate audit","stepClass":"evidence-proof","status":"required","command":"npm run audit:seo-geo-page-action-map && npm run audit:seo-geo-traffic-runway && npm run audit:execution-proof","runnerOrder":8,"sourceSurfaces":["/api/public/seo-geo-page-action-map","/api/public/seo-geo-production-queue","/api/public/traffic-forecast","scripts/execution-proof.ts"],"proves":["Execution tickets, page-action rows, target pages, evidence gates and the 500k/month forecast runway remain joined.","Completion claims require reviewed local ticket evidence rather than intent or unreviewed work logs."],"privateEvidenceBoundary":"Raw Search Console exports, analytics exports, server logs, source-refresh liveness output, AI answer transcripts, screenshots, reviewer notes and third-party publication evidence stay local unless separately reviewed, redacted and approved for publication.","failureBlocks":["Any claim that the SEO/GEO execution plan is complete or release-ready."],"caveats":["Execution proof supports completion of audited work items; it does not prove downstream rankings or traffic outcomes."]}]}