Skip to content

Combined CI verification and migration evidence

Historical evidence: the October 23, 2026 approved project-workflow redesign supersedes the selector/no-op graph described below. Its counts, hosted results and old protection proposal do not verify the new revision. See the current CI standard, approved design and exact proposed migration map. No settings migration or new hosted result is claimed here.

This closes the local verification slice of spec 367 without changing the parent spec, repository settings, production deployments, packages or existing consumers. The final standard contains the trigger map and the separately authorized protection migration/rollback procedure. The baseline remains the historical live observation.

Combined contract

Input/eventProject and generatorWebsite/native/candidate coverage
Docs Markdown onlyRoot source/docs quality; package/generator bodies no-opWebsite build, Chromium/axe and Lighthouse
Website onlyRoot quality; package/generator bodies no-opFull website browsers and budgets
Content-modelLocal model; no generated registry consumerRepository model/frontmatter integration and native CMS serialization
FrontmatterFrontmatter package and isolated packed consumerIndependent website/generator remain unrelated
Browser/nativeNative package, Rust quality and package runtime checksReproducibility, packed browsers and CMS serialization
Generator/templatePacked CLI, generated source/build consumers and distinct behavior fixturesTemplate also reaches native CMS/browser candidate
Shared/unknown, missing revisions, empty change setBroad validationAll selected; full website browser matrix
Mixed/deleted/renamedUnion of actual consumers, including both rename pathsSame ownership rules; no release inference
Weekly/manualBroad project, generator, native and website validationNo production deployment or publication
PRValidation onlyWebsite deployment/smoke intentionally skipped
Affected main pushRequired selected validationWebsite deployment and deployed smoke must succeed

GitLab reuses the same consumption selector and emits only selected native jobs. Its mirror trigger waits for child status. Generated standalone/nested consumers own their emitted YAML: site/shared inputs select validation; unrelated nested repository changes can succeed without running the site. PRs retain Chromium/axe; weekly/manual coverage includes full browsers and Lighthouse. Current committed locks and primary-provider deployment restrictions remain intact.

Local contracts exercise uncertainty, mixed input, deletion/rename paths, actual diff failure, selected workspace commands and mandatory producer/artifact edges. Tool/Generator summaries reject unsuccessful prerequisite statuses. Website summary also rejects cancellation, unexpected skips, failed selection and failed deployed smoke, while accepting only unrelated site and non-push deployment skips. Generated-provider execution tests cover the corresponding required-result policy.

Evidence and limits

  • Root: 90 tests; TypeScript; tracked formatting; code/Markdown lint, spelling and documentation validation. Three non-native package suites: 117 generator, 32 content-model and 27 frontmatter tests; their type checks pass.
  • Actionlint 1.7.12 parses native workflows with only narrow documented exceptions for supported same-repository action/workflow syntax. Shell/Python supplemental tools were unavailable. Zizmor 1.31.1 offline scan reports no findings.
  • Packed generator evidence from ticket 377 covers 11 isolated scenarios plus default starter and customized consumer unit/build/validation/Chromium commands. Generated-provider syntax/security scans were also recorded in that slice.
  • Packed frontmatter/model public declarations and consumer behavior passed in 373. Native serialization remains wired; the separate model-order browser probe times out behind a dialog and was not added as a new failing gate. These are different contracts; successful serialization does not prove the failed ordering probe.
  • Rust validation cannot start locally because the Rust compiler is unavailable. No native source changed. Live GitLab CI Lint/runner/report behavior and protection migration remain unverified. Hosted checks at the later ffe7351 revision establish native and runtime coverage as recorded below; each corrected revision still needs its own run.
  • Reference assessments and proposed alignment issues are in consumer alignment. No reference repository was mutated, deployed or migrated; its own custom scripts remain authoritative.

Counts and timings

The 27 legacy required contexts remain. Conditional steps reduce expensive bodies, not their compatibility runner jobs. Impact, summary and candidate jobs add runner overhead; no reduction in total hosted runner-job count is claimed.

Docs-only workBaseline executionSelected execution
Local package buildsFour workspacesNone
Package runtime lanesFourNo-op bodies
Generator candidate/consumer runtime lanesOne package plus five consumersNo-op bodies
Root source/documentation qualityFive jobsSame five jobs
Website browser projectsThreeChromium/axe; all three on weekly/manual

This statically skips 23 historical project/generator job bodies for docs-only changes, including Rust quality, while retaining their existing check names. Generated consumer PRs also avoid two browser projects and defer Lighthouse to push/weekly/manual runs. These are graph-derived counts, not hosted measurements. Baseline samples were project 6m50s, generator 4m22s and website 5m26s on different successful runs. No comparable post-change hosted timing or billed-minute evidence exists, so no measured speedup is claimed. Publish only after approval, then inspect actual check names, failures/cancellations, artifacts and timings before approving any protection migration. GitLab requires a separately configured weekly schedule.

Final review disposition

The standards review found a documentation mismatch: generated consumers use Chromium on ordinary pushes as well as PRs, with full browsers weekly/manually. The standard now states that policy without expanding execution.

The spec review found that navigation-only Lighthouse URLs omitted content-detail performance, SEO, script and size budgets. Lighthouse now discovers one deterministic nested public HTML route and its listing at invocation time, alongside the homepage. It excludes CMS/404 output, accepts renamed content and maps nested deployment bases. Unit tests use temporary build outputs; importing the module before a build performs no I/O. This retains the original bounded homepage/listing/detail budgets without auditing every navigation destination or article, or reintroducing a starter-specific slug.

Review-fix verification passed template static/unused-code/type checks before a build, 38 template tests with full configured coverage, the public template build and root/nested Lighthouse URL selection against its output. Root 90 and generator 117 tests plus root type checks, formatting and repository lint also pass. The unchanged 11-scenario packed suite and full Lighthouse benchmark were not repeated. Independent website core verification passed static checks, 35 tests with full configured coverage, and its 53-page public build/validation. Hosted evidence and the previously recorded native/CMS limitations remain unchanged.

Hosted follow-up at ffe7351

PR 396 passed native reproducibility, packed browsers, CMS serialization, Tool Rust/build/pack/runtime lanes, candidate frontmatter and consumer browser checks. Consumer Lighthouse failed on the newly included About page (126,785 bytes against the unchanged 125,000-byte limit); Generator validation correctly propagated that failure. The original budget sample covered only homepage, listing and one detail. URL selection now preserves that bounded scope dynamically, rather than expanding to incidental navigation pages. Budgets and template styles remain unchanged. Local built-output URL checks cover root and nested bases; the corrected hosted revision still requires a rerun.

The follow-up fix passed 39 template tests with full configured coverage, static checks before build, public build and exact root/nested URL selection. A real local lighthouse:ci run passed all unchanged assertions across three URLs and nine runs. Root 90 tests, root types, formatting and repository lint also passed. The 11-scenario packed suite was not repeated for this bounded URL-selection correction.

Package test ownership follow-up

Markdownlint unit and packed-consumer checks now run without a content-model checkout. The former local-source integration moved to the repository test suite; content-model changes no longer select markdownlint package checks or its packed candidate. Isolation was verified by copying only the markdownlint package and running its public test and packed-consumer commands. No package runtime code or published dependency changed. The broader project-workflow and required-check redesign remains a separate design decision.