I3977 — Every page a deployment serves names only versions of the release model, checked after the deploy
I3449 makes every built surface read one release model and gates the built site and the snapshots. This issue carries the same judgement to what is served: after a deploy, the served-surface check (apps/majordomus-cli/src/served.rs, the capability majordomus served) fetches every page the deployment declares, extracts each version string with its role label, and compares them with the release model of the commit the deployment says it serves; a page naming another version, or a version without its role, is reported with the URL and the string, and the deploy check fails. The extractor is one Rust function: when I3449 lands its gate as shell in scripts/site-check, this issue moves the extraction into a library function in served.rs that the site gate calls through the executable, with a library test holding both on one fixture. It sits under this milestone because the owner listed it in this order: a version on a page is a reference to a release, and it must resolve to the model as a record id must resolve on master.
BLOKOVÁNO vlna 1 · p1 · profil implementation · běží samostatně
Blocked. This issue cannot start until I3449 is done. The status is derived from that, not declared.
Cíl
I3449 makes every built surface read one release model and gates the built site and the snapshots. This issue carries the same judgement to what is served: after a deploy, the served-surface check (apps/majordomus-cli/src/served.rs, the capability majordomus served) fetches every page the deployment declares, extracts each version string with its role label, and compares them with the release model of the commit the deployment says it serves; a page naming another version, or a version without its role, is reported with the URL and the string, and the deploy check fails. The extractor is one Rust function: when I3449 lands its gate as shell in scripts/site-check, this issue moves the extraction into a library function in served.rs that the site gate calls through the executable, with a library test holding both on one fixture. It sits under this milestone because the owner listed it in this order: a version on a page is a reference to a release, and it must resolve to the model as a record id must resolve on master.
Proč
On 2026-10-22 an outside reviewer read three versions on the published homepage (navbar v0.30.2, product block v1.0.0-alpha.4, footer v1.0.0-alpha.6); I3449 records it. A built-site gate cannot see a page served from a stale cache, an older deployment or a host that did not take the new build, which is the case the reviewer actually saw.
Aktuální stav
Verified at 355a0cee79a: I3449 (READY, p0, milestone truthful-plan-surfaces) plans the release model and the built-site gate; served.rs observes which commit each deployment serves (case 3110_a_served_surface_names_its_checkout) but reads no version on a page.
Cílový stav
After every deploy each served page's versions agree with the release model of the served commit, or the deploy check names the page and the string.
Rozsah
- apps/majordomus-cli/src/served.rs
- scripts/pages
- scripts/site-check
- test/cases/3110_a_served_surface_names_its_checkout.sh
- .ai/repo/project/issues/I3977.yaml
Mimo rozsah
- The release model and the built-site gate, which are I3449's
Závislosti
Kritéria přijetí
- A fixture deployment serving a page whose footer names a version the model does not hold is refused naming the URL and the string (case a_served_page_with_a_foreign_version_is_refused)
- A page naming the offered release and the newer pre-release, each with its role, passes
- A library test runs the one extractor on a fixture page and the site gate yields the same versions for it
Validace
- bin/majordomus plan validate
- env -u MAJORDOMUS_SHARE cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib -- served::
- env -u MAJORDOMUS_SHARE bash test/run.sh 3110_a_served_surface_names_its_checkout
Požadované důkazy
- one_version_everywhere
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3977.yaml. Read it back with majordomus plan show I3977.