Skip to content

ci: fail the deploy when it cannot deploy, and prove the alias moved - #12

Merged
JasonColapietro merged 2 commits into
mainfrom
fix/deploy-fails-loudly
Sep 3, 2026
Merged

ci: fail the deploy when it cannot deploy, and prove the alias moved#12
JasonColapietro merged 2 commits into
mainfrom
fix/deploy-fails-loudly

Conversation

@JasonColapietro

Copy link
Copy Markdown
Collaborator

dna.suedeai.ai has not been serving main.

Live right now, the Organization node carries no foundingDate and the page ships two JSON-LD blocks. main sets foundingDate: '2024' and consolidated the graph in #11 (77b6721, 2026-08-31). The commit merged, the Actions tab went green, and nothing shipped.

That is the worst failure mode for this repo: every SEO fix merged here would have been invisible.

Two causes, both fixed.

1. The workflow skipped its way to success

The credential check set ready=false when VERCEL_TOKEN was missing, and every later step carried if: steps.creds.outputs.ready == 'true'. A job that skips all its work still passes.

It now checks all three secrets, writes which are missing to the step summary, emits ::error::, and exits 1. The nine now-dead per-step guards are gone with it.

A deploy workflow that cannot deploy is a failure, not a skip.

2. The verify step could never have caught this

Verify production is serving only asserted a 200. The host answered 200 throughout the entire period when main was never deployed.

Next chunk filenames are content-hashed, so the step now pulls the chunk set from both the deployment it just created and from dna.suedeai.ai, and requires them to match — which is the thing that actually matters: did the production alias move to this build. If the deployment URL cannot be read it warns rather than fails, so a genuine deploy is never failed by a flaky fetch.

Verification

  • Workflow parses as YAML; no step retains a stale if
  • The new verify step passes bash -n
  • Chunk-extraction logic dry-run against the live site: 7 chunks found, self-comparison matches

This does not by itself fix the deploy

The repository still has no VERCEL_TOKEN, VERCEL_ORG_ID or VERCEL_PROJECT_ID. Someone with admin on Suede-AI/dna needs to add them under Settings → Secrets and variables → Actions, then run this workflow via workflow_dispatch.

The difference after this PR is that until that happens, the workflow says so in red instead of green.

Expect the first run on main after merge to fail. That is the point.

🤖 Generated with Claude Code

dna.suedeai.ai has not been serving main. Live right now, the Organization
node carries no foundingDate and the page ships two JSON-LD blocks; main sets
foundingDate '2024' and consolidated the graph in #11 (77b6721, 2026-08-31).
The commit merged, the Actions tab went green, and nothing shipped.

Two causes, both fixed here.

1. The credential check set `ready=false` when VERCEL_TOKEN was missing and
   every later step carried `if: steps.creds.outputs.ready == 'true'`. So the
   job skipped its way to success. A deploy workflow that cannot deploy is a
   failure, not a skip. It now checks all three secrets, writes which are
   missing to the step summary, emits ::error:: and exits 1. The nine dead
   per-step guards are gone with it.

2. "Verify production is serving" only asserted a 200. The host answered 200
   throughout the entire period when main was never deployed, so that check
   could never have caught this. Next chunk filenames are content-hashed, so
   the step now pulls the chunk set from both the deployment just created and
   from dna.suedeai.ai and requires them to match - which is the thing we
   actually care about: did the production alias move to this build. If the
   deployment URL cannot be read it warns rather than failing, so a genuine
   deploy is never failed by a flaky fetch.

Verified: the workflow parses as YAML, the new verify step passes `bash -n`,
and the chunk-extraction logic was dry-run against the live site (7 chunks,
self-comparison matches).

This does not by itself put main on production - the repository still has no
VERCEL_TOKEN, VERCEL_ORG_ID or VERCEL_PROJECT_ID. That needs someone with
admin on Suede-AI/dna to add them under Settings -> Secrets and variables ->
Actions, then run this workflow via workflow_dispatch. The difference is that
until that happens the workflow will say so in red instead of green.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-03T17:18:58.977119Z 47b0b4c PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 47b0b4cac1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +141 to +143
if [ "$live" = "$fresh" ]; then
echo "production is serving the deployment just built"
exit 0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Verify deployment identity instead of client chunks

For server-rendered-only changes—such as the JSON-LD change in src/app/layout.tsx that motivated this workflow—the old and new deployments can reference identical client JavaScript chunks because the browser bundle did not change. In that scenario the stale custom domain and fresh deployment produce equal lists here, so the workflow exits successfully even though production is still serving different HTML; compare an explicit commit/build marker or the alias target instead.

AGENTS.md reference: AGENTS.md:L3-L4

Useful? React with 👍 / 👎.

https://www.linkedin.com/company/suede-labs-ai 301s to
https://www.linkedin.com/company/suede-labs. LinkedIn only redirects a vanity
slug within the same company page, so the destination is the current canonical
URL for the page this estate already claims.

It matters more than an ordinary redirect because most of these occurrences
are in JSON-LD `sameAs`, the field search and answer engines use to decide
which accounts belong to the same entity. An entity's identity links should
resolve directly rather than through a hop.

Confirmed with the owner (2026-09-03) that the destination page is theirs.

Part of an estate-wide sweep: 82 occurrences across 16 repos, verified to be
the only line changed in every file. Occurrences inside
JasonColapietro/suede-geo's docs/seo-audits/ are deliberately left alone -
those are dated records of what an earlier audit saw, and they are not
published.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@JasonColapietro

Copy link
Copy Markdown
Collaborator Author

Added one more commit after this PR was opened, so the description above no longer covers it in full.

seo: point the LinkedIn sameAs at the URL LinkedIn redirects tolinkedin.com/company/suede-labs-ai 301s to /company/suede-labs. LinkedIn only redirects a vanity slug within the same company page, and the owner confirmed the destination is theirs. Most occurrences are in JSON-LD sameAs, where identity links should resolve directly rather than through a hop.

Part of an estate-wide sweep: 82 occurrences across 16 repos, one line changed per occurrence and nothing else. Still mechanical — no copy, headings, titles, descriptions or claims.

@JasonColapietro
JasonColapietro merged commit 910e873 into main Sep 3, 2026
1 check passed
@JasonColapietro
JasonColapietro deleted the fix/deploy-fails-loudly branch September 3, 2026 23:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants