Supplier SEO night readiness — staging/noindex only
This is the operator order after thegtm-fabrica single writer finishes. Its
only successful outcome is ready for human review in staging while all 58
supplier pages remain noindex. It never authorizes production, deployment,
index approval, a global indexing flag, or a second warehouse writer.
The machine gate is offline:
Stop conditions
Stop immediately and leave the prior pages/indexing state untouched when any of these is true:- the writer is queued, in progress, cancelled, skipped, timed out or failed;
- another job holds
staging-market-data-writer; - less than 15 minutes have elapsed since the writer completed;
- RDS metrics have no datapoints or have not returned to their pre-writer baseline/stable-low state;
- the warehouse is not exactly
gtm_vault_stagingasmarket_intelligence_consumer, TLS, transaction read-only and unable to write any user relation; - plan-only does not cover exactly 58 launch candidates in batches
[50, 8]; - any page fails, is indexable, leaks contact/source data or enters a sitemap;
SEO_INDEXING_ENABLEDis not exactlyfalse/unset for this operation.
1. Prove the writer is terminal
The authoritative writer is jobstructured-sync in workflow
Staging Structured Market Data from joseluistello/gtm-fabrica. It must be a
full run on branch staging, conclusion success; migration-only is not
supplier-corpus evidence.
Owner/operator commands (read-only; run later, not during code review):
structured-sync job, all its steps, the source/serving E2Es, relation
statistics, supplier projection status, five-question smoke and blind probe.
Record the run id, SHA, job start/completion times and
artifactsVerified=true only after that inspection. Check current Actions runs and record
otherWriterActive=false; do not infer it from this run alone.
2. Cool down and inspect RDS metrics
Start the clock at the terminalcompletedAt. Wait at least 15 minutes with no
other writer. Capture a window that includes a pre-writer baseline and the full
cooldown. The validator requires these six AWS/RDS metrics for DB instance
driftless-gtm-vault, region us-east-1, period at most 300 seconds:
CPUUtilizationDatabaseConnectionsFreeableMemoryReadIOPSWriteIOPSDiskQueueDepth
aws cloudwatch get-metric-data or six get-metric-statistics calls with
Dimensions=[{Name=DBInstanceIdentifier,Value=driftless-gtm-vault}]. Retain the
raw read-only JSON outside the repo. Mark a metric recovered=true only when it
has datapoints and the post-writer tail is at/better than its pre-writer
baseline or is stably low. Do not invent a numeric threshold when there is no
baseline; keep the gate blocked.
3. Run the exact staging/read-only handshake and plan-only calibration
Use the fixed secret name; never paste its value:--analyze. The command opens one connection, starts a
REPEATABLE READ transaction, immediately sets it READ ONLY, applies strict
timeouts and always rolls back. Its built-in preflight proves:
- database
gtm_vault_staging; - role
market_intelligence_consumer; - TLS active and transaction read-only;
- SELECT on
market_data_serving.supplier_search; - no INSERT/UPDATE/DELETE/TRUNCATE or write privilege on any user relation;
- current supplier projection, DENUE coverage and required indexes.
mode=plan-only, cohort.name=launch,
cohort.candidates=58, cohort.batchSizes=[50,8], planPassed=true,
calibrationPassed=false and gateDigest=null. Copy only its hashes and
bounded summary into the night ledger.
4. Materialize the launch cohort in staging, still noindex
First run the same path as a dry-run and require the supplier launch report to pass. Then, and only then, run the staging materialization. This is the first and only intended write in this runbook; it writes the Driftless staging app database, never the warehouse and never production.SUPABASE_URL came from
the staging environment. Do not copy the URL into the ledger. Require all of:
- 58 candidates and 58 materialized pages;
- zero failed, zero indexable, 58 noindex;
- zero contact leaks and
safetyPassed=true; - every candidate still has
indexingApproved=false; - stored supplier publication state is
noindex.
seo:supplier-approve-indexing,
seo:supplier-reconcile-publication, seo:indexation or any command carrying
--confirm-production.
5. Privacy, semantics, UI and sitemap QA
Run focused deterministic suites from this checkout:SEO_SUPPLIER_PREVIEW_ENABLED=true. The web app honors it only when
VERCEL_ENV=preview; it does not add held pages to build seeds or sitemaps and
production refuses the flag.
While indexing remains off, the sitemap gate is intentionally strict:
- zero supplier URLs discovered in sitemap index/segments;
- zero supplier URLs indexable;
- all 58 routes render a robots noindex posture.
noindex.
6. Rehearse rollback without applying it
The emergency path is the existing family-wide revocation. Validate its target and reason in offline default mode; it must print that no database/network was opened:dryRunValidated=true, applyPerformed=false,
databaseOrNetworkOpened=false and cache family proveedores. If a later
human-visible staging fault requires the real rollback, the owner/operator must
repeat the command with the exact staging target/gates and --apply; that is an
incident action, not part of readiness.
