Skip to content

docs deploy: Vercel's dashboard Ignored Build Step skips dependency-only changes — the merged OOM fix (#12684) has never been built in production; one dashboard visit: Redeploy + fix the ignore rule #12698

Description

@os-zhuang

Found at the 2026-08-27 10:29Z verification of the #12677 fix. Maintainer-only: both actions are Vercel dashboard settings; nothing in-repo can perform or fix this (apps/docs/vercel.json carries installCommand/buildCommand but no ignoreCommand — verified on current main).

Measured

  • PR fix(spec): bound the DTS pass's heap ceiling to the build container's memory #12684 merged to main at 09:56Z (merge commit 0d4a6a85). At 10:29Z production still serves data-dpl-id="dpl_2nfWjGjSwZjakVEmUG1kBWD6697r" (age ≈41.5 h) — the pinned pre-outage build.
  • The mechanism, read from the commit status Vercel posted on PR fix(spec): bound the DTS pass's heap ceiling to the build container's memory #12684's head (a0a64684), verbatim: Vercel — Canceled by Ignored Build Step (08:14:19Z). That PR's diff is packages/spec build config + a changeset — a change to the docs site's own dependency graph (@objectstack/spec is @objectstack/docs's only workspace dependency), and the ignore step canceled its build anyway.
  • Since the fix merged, main has received only 0d4a6a85 (packages/spec + changeset) and 284fc22d (.claude/** only). Neither touches apps/docs/** or content/docs/** — so under a path-scoped ignore rule, no production build has run since the fix landed. The dpl-id not moving is fully explained; there is no evidence of a new build failure.

Why the ignore rule is itself a defect for this monorepo

The docs build is turbo run build --filter=@objectstack/docs — its output depends on everything in that turbo graph, not only on files under apps/docs/content/docs. A path-scoped ignore rule therefore skips exactly the class of commit that fixes a broken build in a dependency (this one), and will also serve stale pages whenever a dependency change alters generated content. It also interacts badly with the outage class #12333 measured: a two-day-invisible failure, now followed by an invisible non-build.

Maintainer actions (one dashboard visit)

  1. Redeploy now: docs project → Deployments → Redeploy from latest main (0d4a6a85 or newer), build cache off. ~5–10 min later the re-check below must move off dpl_2nfW… — that is the real end of the docs site: production has not deployed since dpl_2nfW… — 19 merges to main, five epic PRs invisible #12333/docs deploy: Vercel production build OOM-killed — @objectstack/spec:build exits 137, every production deploy since 2026-08-25 ~16:55 fails (root cause behind #12333) #12677 outage, and epic epic(docs-site): the site is technically un-indexable — fix robots/sitemap/canonical/OG first, then the keyword shape #12243's site verification resumes.
  2. Fix the Ignored Build Step: replace the path rule with the turbo-aware form — npx turbo-ignore @objectstack/docs — so any commit that changes the docs app's dependency graph builds, and everything else is still skipped. (Minimum fallback: add packages/** to the watched paths, at the cost of some spurious builds.)
  3. Optional but same visit: docs build: next build holds ~7.6 GB in ONE process — the docs deploy's next memory ceiling, and no in-repo knob bounds it #12683's option A (build machine memory) if ruled A.

Re-check

curl -s https://objectstack.ai/ | grep -o 'data-dpl-id="[^"]*"'

Any id other than dpl_2nfWjGjSwZjakVEmUG1kBWD6697r closes this card.

Refs: #12677 (fix, merged as PR #12684) · #12333 (original measurement) · #12683 (memory-margin decision card) · epic #12243.

Activity

  1. os-zhuang commented on Aug 27, 2026

    @os-zhuang
    ContributorAuthor

    Evidence update, 11:24Z re-check — the ignore rule is likely even narrower than this card assumed, or a build failed again; either way the dashboard visit stays the resolution and will disambiguate.

    When visiting the dashboard, one glance at the Deployments list settles which reading is true: builds listed for 709ce17e/a8c00e27 and red ⇒ paste the tail here; no builds listed for them ⇒ reading 1, and the npx turbo-ignore @objectstack/docs fix in this card's item 2 covers it (turbo-ignore follows the dependency graph, which includes the content directory). Item 1 (Redeploy latest main) is unchanged and sufficient to end the outage today.


    Generated by Claude Code

  2. hotlong commented on Aug 27, 2026

    @hotlong
    Contributor

    Re-check satisfied — and both stated actions need correcting

    curl -s https://objectstack.ai/ | grep -o 'data-dpl-id="[^"]*"'
    data-dpl-id="dpl_3YG2asYDmqBzoQt9eiicVLgZYivP"
    

    Off dpl_2nfWjGjSwZjakVEmUG1kBWD6697r. By this card's own criterion it closes. But neither of its two actions was what actually fixed it, so recording why:

    Action 2 ("fix the Ignored Build Step — it skips dependency-only changes") rests on a misreading. The project's rule was if [ "$VERCEL_ENV" == "production" ]; then exit 1; else exit 0; fi — exit 1 builds, exit 0 skips. So production always built and Preview always skipped. The Canceled by Ignored Build Step read off PR #12684's head was that PR's Preview deployment being skipped, which is intended. Pushes to main were triggering production builds the whole time; they were failing, not being skipped — 168 failures in the seven days before the fix. The dpl-id not moving was fully explained by that, not by a missed trigger.

    Action 1 (redeploy) could not have worked either. Redeploying only produced another exit 137; the cause was the build container's memory, measured in #12711: 403 pages need ≈7.6 GB against an 8192 MB machine. The fix was a larger build machine — this card's "optional" item 3, which was the whole answer. Docs builds went from 46–50 min failing to 3.7 min succeeding.

    The suggested command is also not safe as written. npx turbo-ignore @objectstack/docs computes affected packages by package directory, and this repo's MDX lives at the repo root in content/, outside apps/docs. Measured: commit 1265f12b, which touches only content/docs/api/client-sdk.mdx, gets SKIP from it — that rule would have silently stopped publishing documentation, producing this card's own feared failure mode rather than preventing it. (turbo.json does list $TURBO_ROOT$/content/** in inputs, but inputs only feeds the cache hash.) It is additionally deprecated upstream in favour of turbo query affected.

    The underlying instinct — stop rebuilding docs on every push — is right and worth doing, just for a different reason (98.6% of the team's build time, a 92-deep queue, ≈$171/month) and with the content/** gap closed. That is #12743 / PR #12746.

    Closing as satisfied. Refs #12711, #12743.

  3. claude commented on Aug 31, 2026

    @claude
    Contributor

    Label hygiene — domain:devx execution PM seat (#6023), session session_01Pk26oZ12t5N1hwGW1m1MgC.

    Stripped pm:awaiting-maintainer from this closed card. 关闭即摘 pm:* — a pm state label on a closed issue asserts something false (pm:dispatched says a dev is working on it; pm:awaiting-maintainer says a manual action is still outstanding), and it makes the card visible to state sweeps that should no longer see it.

    ⛔ Nothing about the card's outcome is changed or re-judged here — domain:*, type and priority are left alone, since routing and grading are not state. This is the round's standing sweep for "closed but still carrying pm:*", not a verdict on this issue.

    ⚠️ Cause, for the record: GitHub's Fixes #n auto-close does not strip labels — measured 8/8 with no exception on this lane today. Cards closed that way need the strip done by hand, and these predate the sweep.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions