ci(nightly-next): a content key and a record namespace of its own for the nightly app

Merged
TE
10d ago
+308-49

Leo, 2026-10-26: "And I thought we were incremental. You keep saying, yeah, we're gonna do the incremental building. Nobody has come back with the incremental building results." Earlier: "like how fast can we just have it, like hot and incrementally built?... reusing as much as you can".

What this does (1 of 2)

This PR adds the key and the record namespace for reusing the cmux NEXT Nightly app. It changes no workflow behaviour; the follow-up PR wires it into nightly.yml.

  • job_input_fingerprint.py nightly-release-product: the DEV product's closure (the whole tree minus docs, tests and other products), keyed by nightly.yml instead of cmux-next.yml. It also keys every decide output that reaches the nightly build (NIGHTLY_PRODUCT_FLAGS, '' allowed), plus Xcode, the SDK, the arch, the recipe and the cmux-tui tree. The job's name is part of the key, so a nightly key never equals a DEV key.

  • dev_release_product_reuse.py: lookup and record now take a Lane. DEV holds the existing names and is the default for every caller, so DEV behaviour is unchanged. NIGHTLY_NEXT is its own lane:

    • records cmux-nightly-next-release-product-* and archives cmux-nightly-next-release-archive-*;
    • workflow nightly.yml, branch nightly-next, push events only;
    • producer job build-nightly-app.

    A DEV record is never a nightly product, and the reverse never happens either.

Risk

Low. Nothing calls the new job or lane yet. DEV keys and lookups are byte-for-byte the same; tests/test_dev_release_product_reuse.py, tests/test_dev_release_product_key.py and tests/test_job_input_fingerprint.py pass unchanged.

Tests

tests/test_nightly_release_product_key.py (new) covers:

  • key coverage: each decide flag, each toolchain value, nightly.yml, app sources;
  • docs and tests not changing the key;
  • the same tree keying the same;
  • nightly and DEV keys differing;
  • namespace separation in both directions;
  • only nightly.yml push runs on nightly-next whose build-nightly-app succeeded being trusted.

Signals: none at runtime. The follow-up PR measures it.

Stacked follow-up: #25731 wires this into nightly.yml.

Agent session: agent session

šŸ¤– Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.