Skip to content

test(ci): freeze audited generated stylesheet fixtures - #2388

Merged
schlessera merged 2 commits into
mainfrom
fix/2373-frozen-generated-fixtures
Oct 18, 2026
Merged

schlessera merged 2 commits into
mainfrom
fix/2373-frozen-generated-fixtures

Conversation

@schlessera

@schlessera schlessera commented Oct 18, 2026 •

Copy link
Copy Markdown
Owner

Closes #2373

What changed

Generated CSS/theme and inclusion self-tests now obtain positive producer fixtures from raw Git blobs owned by audited revision 498270fbdc4ef2788fdd3babb259b647d77f6c77. Current producer bytes are checked separately and refuse binding on genuine audit drift. The real locked offline compiler, temporary theme compilation and installed-asset byte/mode controls remain intact.

Why this shape

Copying arbitrary current source into a frozen positive made legitimate #2370 caller changes fail generic self-tests. A pinned independent owner preserves the audit without refreshing any production hash or relaxing refusal. Git history is required offline, as supplied by CI's full-history checkout.

Proof

Base b7a0885181445125d576e02f61c562d704c81099; actual head recorded with the candidate confirmation.

  • Original three test files with fix(ci): refuse slow Linux sandbox setup before local preflight #2372's changed check-pr.ts reproduce the reported assertion failures; restored corrected fixtures pass all 20 tests / 88 assertions, including against that same changed caller.
  • Bypassing the production producer digest comparison fails both producer/execution-path negative tests on their intended assertions (18 pass / 2 fail). Changing the frozen fixture owner to fix(ci): refuse slow Linux sandbox setup before local preflight #2372's changed revision fails the positive CSS/theme/inclusion controls (14 pass / 6 fail). Both mutations restored byte-for-byte; restored suite passes 20/20.
  • bun run check:pr --base origin/main passes all contribution gates, fast invariants and 20 affected import-feedback tests. Strict bun run typecheck passes.
  • No production binder, qualification pins, test discovery, images or runtime assertions changed. Documentation records positive ownership and current drift separation.

Checklist

  • Focused local preflight/behavioral receipts and complete selected hosted proof passed; actual head/base/job checkout evidence is recorded below.
  • Acceptance criteria from the issue are all met, or the gap is named below.
  • The PR and completed/advanced issues have verified release milestones under docs/process/github.md.
  • A changeset is included, or this changes nothing a consumer can see (tests/docs only).
  • No personal data anywhere in the diff — the leakage gate covers the whole tree.
  • The integration contract index or relevant component is updated in this same commit, or nothing in the machine surface moved.
  • Docs under docs/ reflect the change, or nothing documented moved.
  • Provider history stays append-only: nothing on a turn's path changed.

Anything left open

Nothing for #2373. Delivered by squash fcb7d5c5357c550f74300a53b5af5c46570b215f, parent 68e12f27eb249c9fe7262a498a0397c04bbda8f4, tree 63d5f502f85c5a76722451a29ed329fb98cd550c, exactly matching qualified synthetic checkout 2b355c03d1bbc3114c1a98c989ede59bcba56c2f. Confirmation 39085115921, attempt 1, passes metadata, strict/fast verification, all four selected unit shards and aggregate. Every selected job's actual checkout agrees; requested base, immutable parents/tree and aggregate receipt match. Remaining skips are planner-intended. Matching-head merge, fetched main ancestry, exact squash tree, issue closure and PR/issue milestone 0.44.0 are verified. Automatic main-push run 39087160233 also completes successfully.

Dependent #2372 requires its own complete proof for its actual candidate; this fixture delivery does not qualify later caller edits. Original failed and superseded/cancelled receipts remain historical evidence.

@schlessera schlessera added this to the 0.44.0 milestone Oct 18, 2026
@schlessera schlessera added type: fix Something is broken and must behave the way it is documented. area: ci CI workflows, the gates they run, release scripts, packaging. labels Oct 18, 2026
@schlessera
schlessera marked this pull request as ready for review October 18, 2026 00:05
@schlessera
schlessera marked this pull request as draft October 18, 2026 01:02
@schlessera
schlessera marked this pull request as ready for review October 18, 2026 01:04
@schlessera
schlessera merged commit fcb7d5c into main Oct 18, 2026
16 of 27 checks passed
schlessera added a commit that referenced this pull request Oct 18, 2026
#2388 binds generated-CSS positive fixtures to producer bytes frozen at
the audited revision, and its ruling says legitimate drift requires
fresh proof rather than redefining the audit. Refreshing the ci.yml
digest here made six frozen fixtures fail. The job-name change now
leaves the binding to fresh proof; #2408 asks how re-audits happen.

Refs #2363

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
schlessera added a commit that referenced this pull request Oct 18, 2026
#2388 binds generated-CSS positive fixtures to producer bytes frozen at
the audited revision, and its ruling says legitimate drift requires
fresh proof rather than redefining the audit. Refreshing the ci.yml
digest here made six frozen fixtures fail. The job-name change now
leaves the binding to fresh proof; #2408 asks how re-audits happen.

Refs #2363

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
schlessera added a commit that referenced this pull request Oct 18, 2026
#2388 binds generated-CSS positive fixtures to producer bytes frozen at
the audited revision, and its ruling says legitimate drift requires
fresh proof rather than redefining the audit. Refreshing the ci.yml
digest here made six frozen fixtures fail. The job-name change now
leaves the binding to fresh proof; #2408 asks how re-audits happen.

Refs #2363

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
schlessera added a commit that referenced this pull request Oct 18, 2026
…2398)

* fix(ci): fail draft-mode proof once the live PR is ready

A draft push and a ready_for_review transition seconds apart can be queued
out of order: the draft run cancels the confirmation run, then passes
`proof` with every product job unselected, leaving a green draft check as
the ready PR's latest proof. The draft cadence now reads the live PR and
refuses when it is ready, closed or at another head, with the same
confirmation-required action as ready feedback. Unreadable live state
fails closed.

Refs #2363

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

* test(ci): cover every draft action and the hosted draft-proof entry point

Refs #2363

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

* fix(ci): name the draft aggregate apart from candidate proof

The live readiness read is a snapshot: a PR marked ready between that
read and the draft run's completion could still show a passing `proof`
until its confirmation reported. Draft runs now report their aggregate
as `draft gates`, so a `proof` row on a pull request only ever comes
from feedback (which fails) or confirmation. The workflow guard pins the
new name and rejects dropping the draft branch. The audited producer
digest for ci.yml is refreshed for the one-line job-name change.

Refs #2363

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

* test(ci): drive the draft readiness check through its hosted callers

Cover a present token through the real API client, malformed live state,
and the emitted aggregate refusing a draft run it cannot verify. State
in the docs that the live read only fails when it observes readiness;
the distinct check name covers a later transition.

Refs #2363

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

* test(ci): drop the spawned draft aggregate control

Planning the whole repository twice (fixture outputs, then the child's
selection check) took 20 s locally and timed out at 30 s on a hosted
unit shard. A cheap version needs the aggregate to validate the
candidate before planning, which changes a pinned producer; #2400
tracks it. The present-token entry-point control remains.

Refs #2363

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

* fix(ci): keep the audited ci.yml producer digest

#2388 binds generated-CSS positive fixtures to producer bytes frozen at
the audited revision, and its ruling says legitimate drift requires
fresh proof rather than redefining the audit. Refreshing the ci.yml
digest here made six frozen fixtures fail. The job-name change now
leaves the binding to fresh proof; #2408 asks how re-audits happen.

Refs #2363

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: ci CI workflows, the gates they run, release scripts, packaging. type: fix Something is broken and must behave the way it is documented.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci: generated stylesheet self-tests reject legitimate producer drift

1 participant