Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
229 commits
Select commit Hold shift + click to select a range
cf16418
Add request phase timing design spec and implementation plan (#1069)
jevansnyc Aug 25, 2026
052eada
Add RequestTimings phase collection and Server-Timing rendering
jevansnyc Aug 25, 2026
7505fb8
Add observability settings and decouple tinybird access and auction e…
jevansnyc Aug 25, 2026
4ce413f
Add test coverage for the access_enabled without tinybird.enabled rej…
jevansnyc Aug 25, 2026
f83092a
Emit Server-Timing at the send freeze point on conclusively private r…
jevansnyc Aug 25, 2026
4b19c44
Record filter and geo spans and dedupe the per-request geo lookup
jevansnyc Aug 25, 2026
ce295f1
Record origin, template cache, and KV phase spans in core
jevansnyc Aug 25, 2026
c222ae2
Capture stream duration, auction wait placement, and response bytes
jevansnyc Aug 25, 2026
8b028bb
Add access telemetry snapshot, route classes, and coarse route templates
jevansnyc Aug 25, 2026
48acd81
Emit confirmed access telemetry rows after pull-sync post-send
jevansnyc Aug 25, 2026
72d5755
Extend access_logs_raw with phase columns and a non-null sorting key
jevansnyc Aug 25, 2026
c50be03
Widen time_elapsed_ms to nullable so dropped snapshots cannot quarant…
jevansnyc Aug 25, 2026
0aead79
Emit Server-Timing from the Axum terminal layer with adapter-specific…
jevansnyc Aug 25, 2026
e9cf5b9
Document the observability and access telemetry configuration surface
jevansnyc Aug 25, 2026
7942c74
Normalize telemetry method, guard zero sample rate, and mirror geo wr…
jevansnyc Aug 26, 2026
d8fcb5e
Add a local dev config envelope generator example
jevansnyc Aug 26, 2026
7cf7d86
Add JSONPaths and expression sorting key to the access datasource
jevansnyc Aug 26, 2026
600746f
Use web_time Instant on request timing paths
jevansnyc Aug 26, 2026
3d7e697
Reject opaque identifier segments in publisher route templates
jevansnyc Aug 26, 2026
38043d7
Address access telemetry review feedback
jevansnyc Aug 26, 2026
274241b
Add auction timeline offsets spec amendment
jevansnyc Aug 26, 2026
29d45e8
Add auction timeline offsets implementation plan
jevansnyc Aug 26, 2026
46911a6
Record T0-anchored auction timeline offsets in the access row
jevansnyc Aug 26, 2026
1fa9f8c
Remove generated integration wrangler config from tracking
jevansnyc Aug 26, 2026
2ef7635
Reject single-segment publisher paths in route templates
jevansnyc Aug 28, 2026
082461d
Sample access rows with real randomness at the snapshot rate
jevansnyc Aug 28, 2026
f3ee473
Drop the origin span before error-path auction telemetry
jevansnyc Aug 28, 2026
46b3c7f
Address remaining review feedback on timing surfaces and docs
jevansnyc Aug 28, 2026
a0a3af5
Merge remote-tracking branch 'origin/main' into feat/request-phase-ti…
ChristianPavilonis Aug 31, 2026
c6235b9
Enforce access telemetry body limit
ChristianPavilonis Aug 31, 2026
576ef33
Merge remote-tracking branch 'origin/feat/request-phase-timing' into …
ChristianPavilonis Sep 4, 2026
ca46e4f
Format auction timeline implementation plan
ChristianPavilonis Sep 4, 2026
6f133cc
Merge origin/main into feat/request-phase-timing
jevansnyc Sep 8, 2026
bcc1475
Bound route templates by allowlist and harden the telemetry config su…
jevansnyc Sep 8, 2026
a152367
Address round-3 telemetry robustness findings
jevansnyc Sep 8, 2026
bdb68dd
Merge feat/request-phase-timing and resolve auction timeline review f…
jevansnyc Sep 17, 2026
58f8a35
Correct the section 18 status line and give the wrangler ignore its o…
jevansnyc Sep 17, 2026
589d6cc
Merge main into feat/request-phase-timing
jevansnyc Sep 17, 2026
dae88a0
Improve GPT auction diagnostics observability
ChristianPavilonis Sep 4, 2026
30ccab8
Fix GPT auction diagnostics timing accuracy
ChristianPavilonis Sep 4, 2026
563670d
Address GPT diagnostics review feedback
ChristianPavilonis Sep 14, 2026
628ce28
Clarify GPT auction diagnostics evidence
ChristianPavilonis Sep 8, 2026
b316aee
Address GPT diagnostics review feedback
ChristianPavilonis Sep 14, 2026
9b5bb41
Align GPT diagnostics tests with current metadata
ChristianPavilonis Sep 17, 2026
54d33ad
Hide placeholder dimensions from diagnostics overlay
ChristianPavilonis Sep 17, 2026
3e8cde2
Update crates/trusted-server-js/lib/src/integrations/prebid/index.ts
ChristianPavilonis Sep 20, 2026
a7b19ca
Address remaining GPT diagnostics review feedback
ChristianPavilonis Sep 21, 2026
f951955
Fix cross-adapter GPT diagnostic timing origins
ChristianPavilonis Sep 21, 2026
0fa7dfb
Clarify Prebid diagnostics export boundaries
ChristianPavilonis Sep 25, 2026
2791ceb
Use shared EdgeZero request timing across adapters
ChristianPavilonis Sep 28, 2026
2abb8e8
Merge console timing updates into clarity
ChristianPavilonis Oct 1, 2026
3a8b8ba
Use neutral labels for unobserved server clocks
ChristianPavilonis Oct 2, 2026
74a8f44
Merge origin/main into feat/request-phase-timing
jevansnyc Oct 5, 2026
ee66fbf
Combine request timing and GPT diagnostics stack
ChristianPavilonis Oct 8, 2026
e6d51e3
Integrate main and address timing and diagnostics review
ChristianPavilonis Oct 9, 2026
06e1336
Fix request timing and access telemetry review blockers
ChristianPavilonis Oct 12, 2026
3d39b1e
Fix diagnostics isolation and timing privacy
ChristianPavilonis Oct 13, 2026
51aff43
Keep auction-wait metrics unset without provider launches
ChristianPavilonis Oct 13, 2026
686826e
Merge main into request timing branch
ChristianPavilonis Oct 13, 2026
21f91f4
Match SDK URLs by vendor hostname and path
ChristianPavilonis Oct 16, 2026
ed91166
Share SDK URL parsing and test support
ChristianPavilonis Oct 16, 2026
eb6e892
Add spec for EID Fidelity
dhruv8sh Oct 19, 2026
3bdac07
Carry OpenRTB EID-level fields on Eid
dhruv8sh Oct 19, 2026
5dc8a37
Add one parser for browser-supplied EIDs
dhruv8sh Oct 19, 2026
953a03d
Validate body and cookie EIDs with the shared parser
dhruv8sh Oct 19, 2026
cdcf51f
Forward browser EIDs as sent and fill only absent sources from KV
dhruv8sh Oct 19, 2026
eb3a69b
Ingest only the auction's own client EIDs on /auction
dhruv8sh Oct 19, 2026
b597a1c
Add a pure collector for the trustedServer bidder request's EIDs
dhruv8sh Oct 19, 2026
a845cc7
Forward the trustedServer bidder request's EIDs and write ts-eids in …
dhruv8sh Oct 19, 2026
5d5fadc
Re-justify the served shim size bound
dhruv8sh Oct 19, 2026
606b5a5
Stop overriding the publisher's Prebid userSync settings
dhruv8sh Oct 19, 2026
8d7cffd
Prove the trustedServer EID contract with real Prebid.js
dhruv8sh Oct 19, 2026
29191a9
Assert readyState in every real-Prebid arm
dhruv8sh Oct 19, 2026
ab34b2a
Delete the unused EID-to-module resolver
dhruv8sh Oct 19, 2026
191bc78
Document Prebid EID forwarding, the ts-eids writer and the TCF exception
dhruv8sh Oct 19, 2026
8e9214e
Keep buildRequests alive when the ts-eids cookie cannot be written
dhruv8sh Oct 19, 2026
c463952
Report non-array ts-eids cookie JSON as a parse error
dhruv8sh Oct 19, 2026
34a776b
Merge branch 'main' into fix/1199-sdk-url-matching
prk-Jr Oct 19, 2026
40b75e7
Merge branch 'main' into spec/1246-prebid-eid-fidelity
aram356 Oct 19, 2026
0ea795a
Merge branch 'spec/1246-prebid-eid-fidelity' of https://github.com/IA…
dhruv8sh Oct 19, 2026
c84a73d
Add plan for EID fidelity
dhruv8sh Oct 19, 2026
cf76307
Queue pull request CI runs per author and workflow
dhruv8sh Oct 20, 2026
68e005b
Key the CI queue on the PR author and add job timeouts
dhruv8sh Oct 20, 2026
3d448f9
Merge branch 'main' into chore/ci-per-user-concurrency
aram356 Oct 20, 2026
5fd5827
Add spec for server-side identity providers
dhruv8sh Oct 21, 2026
5ab7d49
Separate import groups in the Prebid integration test
dhruv8sh Oct 21, 2026
f0f7a17
Merge branch 'spec/1246-prebid-eid-fidelity' into spec/1246-server-si…
dhruv8sh Oct 21, 2026
a9fb1b2
Merge branch 'main' into fix/1199-sdk-url-matching
aram356 Oct 21, 2026
d51bbec
Write ts-eids only with TCF Purpose 1 storage consent
dhruv8sh Oct 22, 2026
573e011
Resolve round 10 review of the identity providers spec
dhruv8sh Oct 22, 2026
88725f4
Validate legacy ts-eids cookie UIDs before browser precedence
dhruv8sh Oct 22, 2026
328dd2c
Borrow raw EID elements instead of boxing each copy
dhruv8sh Oct 22, 2026
fbae25f
Confirm the removal overflow write and equal-second tie rule
dhruv8sh Oct 22, 2026
46031de
Merge branch 'main' into spec/1246-prebid-eid-fidelity
prk-Jr Oct 22, 2026
9b901f2
Require TCF Purposes 1 and 4 for the ts-eids write
dhruv8sh Oct 22, 2026
21fd172
Add implementation plan for server-side identity providers
dhruv8sh Oct 22, 2026
a752e1d
Merge branch 'main' into chore/ci-per-user-concurrency
aram356 Oct 22, 2026
4df289f
Merge branch 'main' into fix/1199-sdk-url-matching
aram356 Oct 22, 2026
b170c44
Revise the identity providers spec to revision 12
dhruv8sh Oct 23, 2026
878186f
Merge branch 'main' into spec/1246-prebid-eid-fidelity
aram356 Oct 25, 2026
e49916f
Revise the identity providers spec to revision 15 and update the plan
dhruv8sh Oct 26, 2026
13920fe
Close the spec section 8 gaps in the identity providers plan
dhruv8sh Oct 26, 2026
5c3bd5e
Add identity cookie lists and a cookie strip by name
dhruv8sh Oct 26, 2026
f0a1e4f
Strip identity cookies from Prebid Server requests in every mode
dhruv8sh Oct 26, 2026
f9c5ac2
Strip ID cookies from publisher origin requests
dhruv8sh Oct 26, 2026
e85225d
Refuse the identity mirror cookie as a template cache key
dhruv8sh Oct 26, 2026
2bdf774
Add the identity module with provider and source ID newtypes
dhruv8sh Oct 26, 2026
e661413
Move the KV schema to version 2 with one record shape
dhruv8sh Oct 26, 2026
38fbf52
Restate spec 6.1 size figures in the KvEntry doc comment
dhruv8sh Oct 26, 2026
e15ce97
Record when browser ingest acquired each ID
dhruv8sh Oct 26, 2026
27a2c91
Add the identity provider descriptor and its builder
dhruv8sh Oct 26, 2026
81aad20
Add declared-input enforcement for identity providers
dhruv8sh Oct 26, 2026
6f1c9b1
Add provider requests, responses and resolutions
dhruv8sh Oct 26, 2026
8357365
Add the IdentityProvider trait
dhruv8sh Oct 26, 2026
d63697b
Evaluate provider consent policies against decoded consent
dhruv8sh Oct 26, 2026
ef4e51c
Add record revisions, state revisions and UID hashes
dhruv8sh Oct 26, 2026
feb30a5
Filter served KV IDs through one servability check
dhruv8sh Oct 26, 2026
de97171
Add IdentityMutation and its merge into a live identity row
dhruv8sh Oct 26, 2026
1e8e9e7
Add the ts-eids-s mirror payload and its size cap
dhruv8sh Oct 26, 2026
cafe2e6
Add the shared identity removal write
dhruv8sh Oct 26, 2026
04c56ae
Add [ec.identity] coordinator settings
dhruv8sh Oct 26, 2026
b4c6dcd
Merge branch 'main' into fix/1199-sdk-url-matching
aram356 Oct 26, 2026
88cc505
Merge branch 'main' into spec/1246-prebid-eid-fidelity
aram356 Oct 26, 2026
518dccc
Add coordinator eligibility and outcome rules
dhruv8sh Oct 26, 2026
b0d9ca2
Handle a result naming only unclaimed sources as Malformed
dhruv8sh Oct 26, 2026
2c00529
Add coordinator dispatch with request checks and byte caps
dhruv8sh Oct 26, 2026
0c6f2aa
Give each dispatched call only its own provider state
dhruv8sh Oct 26, 2026
9cc246d
Model pull sync partners as GenericPullProvider
dhruv8sh Oct 26, 2026
273c148
Decide the writer request once routing allows dispatch
dhruv8sh Oct 26, 2026
cc068bd
Test the real-browser gate on proxy EC generation
dhruv8sh Oct 26, 2026
33322d0
Stop writing cluster size from /identify
dhruv8sh Oct 26, 2026
405abe9
Queue browser ingest in the writer's mutation and stop stager writes
dhruv8sh Oct 26, 2026
ab358b8
Return the ts-eids-s mirror from /auction and stop stager ingest
dhruv8sh Oct 26, 2026
1de9f80
Retry a failed withdrawal tombstone once after send
dhruv8sh Oct 26, 2026
8ce81cf
Clear a withdrawal from the failed list once its retry succeeds
dhruv8sh Oct 26, 2026
98c5434
Merge the server identity set into auction EIDs and apply provider de…
dhruv8sh Oct 26, 2026
2c1a32b
Flush identity changes once after send and run pull partners there
dhruv8sh Oct 26, 2026
5cfe152
Finalize the response when the reloaded identity runtime is unavailable
dhruv8sh Oct 26, 2026
a67dca7
Test the one-write-per-page-load invariant end to end
dhruv8sh Oct 26, 2026
e8a57e2
Document the single identity write and the ts-eids-s mirror
dhruv8sh Oct 26, 2026
42dac1b
Count the new-EC create write in the identity measurement
dhruv8sh Oct 26, 2026
639f9ad
Let integrations register identity providers
dhruv8sh Oct 26, 2026
d7eec83
Keep pull providers when the reload registry fails
dhruv8sh Oct 26, 2026
0481643
Add source ownership and validate identity provider config at deploy
dhruv8sh Oct 26, 2026
977a382
Decode the GPP opt-outs strict identity policies need
dhruv8sh Oct 26, 2026
8911492
Fail closed on undecodable GPP US sections
dhruv8sh Oct 26, 2026
2669589
Add a per-provider circuit breaker on transport failures
dhruv8sh Oct 26, 2026
d07ffe5
Expand SDK URL normalization safely, add ownership and attribute-rout…
ChristianPavilonis Oct 26, 2026
ce2247a
Apply owner precedence and clear provider opt-outs on re-grant
dhruv8sh Oct 26, 2026
0be0c53
Run hold-mode identity providers before the writer navigation's auction
dhruv8sh Oct 26, 2026
a13902f
Make hold dispatch honour call timeouts and fail closed without a lim…
dhruv8sh Oct 26, 2026
347b682
Capture identity revocations from proxied provider responses
dhruv8sh Oct 26, 2026
a531006
Count unreadable-row capture removals as lost and measure capture KV …
dhruv8sh Oct 26, 2026
0ef5ad4
Write a capture opt-out even when the row view is unreadable
dhruv8sh Oct 26, 2026
2dc951a
Keep batch sync from replacing an owned source's value
dhruv8sh Oct 26, 2026
2634026
Add the provider harness and conformance checks
dhruv8sh Oct 26, 2026
34d286e
Prove complete provider EIDs end to end through a registered provider
dhruv8sh Oct 26, 2026
38f7728
Document the identity provider framework for operators and authors
dhruv8sh Oct 26, 2026
b1ecfa6
Merge remote-tracking branch 'origin/main' into pr-1426-review
dhruv8sh Oct 27, 2026
7074ec1
Cancel superseded PR runs and queue each job per author
dhruv8sh Oct 27, 2026
600f6a9
Guard the CI concurrency blocks and job timeouts
dhruv8sh Oct 27, 2026
ab58ced
Test zero-provider page-bids diagnostics omission
ChristianPavilonis Oct 27, 2026
39568b1
Keep immediate test outcomes unlaunched
ChristianPavilonis Oct 27, 2026
ba18e09
Reject legacy access datasets when emission is on
ChristianPavilonis Oct 27, 2026
b8ccff4
Retry failed Prebid diagnostics registration
ChristianPavilonis Oct 27, 2026
0305f9f
Suppress referrers on diagnostics dictionary links
ChristianPavilonis Oct 27, 2026
2e0722f
Honor readiness in the Axum dev-server bridge
ChristianPavilonis Oct 27, 2026
5cf32ab
Borrow settings when building access targets
ChristianPavilonis Oct 27, 2026
c4cec08
Correct timing review documentation and fixtures
ChristianPavilonis Oct 27, 2026
7214c60
Define access telemetry v2 outcome fields
ChristianPavilonis Oct 27, 2026
d964741
Measure auction collection from launch evidence
ChristianPavilonis Oct 27, 2026
e8ff076
Dispatch access telemetry without ingest waits
ChristianPavilonis Oct 27, 2026
3e4b73c
Load Prebid diagnostics only with its recorder
ChristianPavilonis Oct 27, 2026
b7d0d0b
Keep diagnostics controls outside creative bounds
ChristianPavilonis Oct 27, 2026
02f020a
Document request timing and delivery contracts
ChristianPavilonis Oct 27, 2026
9654deb
Finish request timing and diagnostics review cleanups
ChristianPavilonis Oct 27, 2026
1e2ab0e
Await hold-mode provider calls inside the request executor
dhruv8sh Oct 27, 2026
3990a05
Write only registered sources into ts-eids and merge them per source
dhruv8sh Oct 27, 2026
270d26c
Correct the ownership and harness details in the identity docs
dhruv8sh Oct 27, 2026
4133e17
Bring the spec and plan in line with the async dispatch and ts-eids m…
dhruv8sh Oct 27, 2026
ee61c7e
Fix factual review points in the identity providers spec
dhruv8sh Oct 27, 2026
54f4bbe
Cover the ts-eids merge edge cases
dhruv8sh Oct 27, 2026
43613d0
Explain why the hold fixture runs inside an executor
dhruv8sh Oct 27, 2026
ef3a491
Strip the query and fragment from the harness page URL
dhruv8sh Oct 27, 2026
dd3b960
Drop the links to an uncommitted review log
dhruv8sh Oct 27, 2026
3987765
Correct factual claims the round 14 review found in the identity spec
dhruv8sh Oct 28, 2026
f957796
Wait out the per-key write limit before after-send removal retries
dhruv8sh Oct 28, 2026
9979f69
Apply captured revocations from clients that fail the bot check
dhruv8sh Oct 28, 2026
e74a598
Stop an opted-out owner's source from taking or serving any value
dhruv8sh Oct 28, 2026
853426c
Return provider-written IDs from /identify only to browser calls
dhruv8sh Oct 28, 2026
741f3a9
Keep ts-eids on origin requests unless the operator strips it
dhruv8sh Oct 28, 2026
b2723d6
Gate the ts-eids-s mirror off until a consumer is named
dhruv8sh Oct 28, 2026
2c65bf4
Keep a stateless owner's expired ID as a refresh anchor
dhruv8sh Oct 28, 2026
40027d6
Clear provider opt-outs only on recorded denials, up to the opt-out seen
dhruv8sh Oct 28, 2026
615f483
Correct the provider guide's real-browser gate and the plan's clear rule
dhruv8sh Oct 28, 2026
0cbed38
Cap the connect timeout of hold-mode identity calls
dhruv8sh Oct 28, 2026
eafc0a0
Bound provider calls by a per-request backend budget
dhruv8sh Oct 28, 2026
a46eaa6
Add a per-IP ceiling on identity provider calls
dhruv8sh Oct 28, 2026
1bf1dd8
Add a reader-first rollout step before the schema v2 write
dhruv8sh Oct 28, 2026
ca9cc9b
Stop EC minting after a global revoke until consent changes
dhruv8sh Oct 28, 2026
70425c8
Hold missed removals and capture IDs in a pending key for the next wr…
dhruv8sh Oct 28, 2026
c5d1237
Let a same-origin page-bids call write for single-page apps
dhruv8sh Oct 28, 2026
e6c3bc4
Run hold-mode providers on a new visitor's first navigation
dhruv8sh Oct 28, 2026
faf6478
Make identity providers declare their consent purposes and vendor
dhruv8sh Oct 28, 2026
08eb99c
Name the spec author as the decision-maker and confirm the withdrawal…
dhruv8sh Oct 28, 2026
f3fa6b7
Merge branch 'main' into fix/1199-sdk-url-matching
aram356 Oct 29, 2026
1f82b07
Address routine SDK URL matching review feedback
ChristianPavilonis Oct 29, 2026
5068110
Merge branch 'main' into chore/ci-per-user-concurrency
aram356 Oct 29, 2026
39adfd5
Merge main into fix/1199-sdk-url-matching
ChristianPavilonis Oct 29, 2026
2206d5c
Merge branch 'main' into chore/ci-per-user-concurrency
aram356 Oct 30, 2026
32523f1
Strengthen and document CI concurrency policy checks
dhruv8sh Oct 30, 2026
bb8a85e
Record served HTML SDK ownership and recognition limits
ChristianPavilonis Oct 30, 2026
03f24f9
Merge remote-tracking branch 'origin/main' into chore/ci-per-user-con…
dhruv8sh Nov 2, 2026
d79392a
Run the CI concurrency guard in cargo fmt and tighten its checks
dhruv8sh Nov 2, 2026
2acb20b
Merge main into fix/1199-sdk-url-matching
ChristianPavilonis Nov 2, 2026
476759e
Await Hyper connection readiness in proxy integration tests to elimin…
ChristianPavilonis Nov 2, 2026
1f94506
Merge main into fix/1199-sdk-url-matching
ChristianPavilonis Nov 2, 2026
bfc2d19
Merge PR #1405 SDK URL ownership into November RC
ChristianPavilonis Nov 2, 2026
6841d8d
Merge PR #1261 timing and diagnostics into November RC
ChristianPavilonis Nov 2, 2026
ae4fc73
Merge PR #1416 Prebid EID fidelity into November RC
ChristianPavilonis Nov 2, 2026
4eae122
Merge PR #1428 identity providers into November RC
ChristianPavilonis Nov 2, 2026
6d14963
Merge PR #1426 CI scheduling into November RC
ChristianPavilonis Nov 2, 2026
8ccb96a
Keep the CI concurrency expression literal without lint warnings
ChristianPavilonis Nov 2, 2026
e191a32
Preserve default connect timeout in the integration backend fixture
ChristianPavilonis Nov 2, 2026
c0f1c92
Document narrow URL host exceptions for imported RC fixtures
ChristianPavilonis Nov 2, 2026
4b1221b
Refresh the merged trace source digest and test manifest freshness
ChristianPavilonis Nov 2, 2026
7e50da0
Keep sensitive identity and telemetry metadata out of diagnostic logs
ChristianPavilonis Nov 2, 2026
09f1953
Restore transport-bound ingress in the timed Axum listener
ChristianPavilonis Nov 2, 2026
595dffe
Exercise the passive diagnostics badge and accessible handle in browsers
ChristianPavilonis Nov 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ on:
schedule:
- cron: "42 6 * * 0"

# New pushes cancel older runs for the same pull request. Each job queues by
# workflow, job, and author, so one author runs one copy of each job at a time.
# GitHub orders jobs by when they start waiting, but does not guarantee FIFO.
# Each queue holds up to 100 pending jobs; later arrivals are canceled.
# Timeouts release queues after hung jobs. Bots and non-PR events use unique
# run IDs and do not queue together.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true

jobs:
analyze:
name: Analyze (${{ matrix.language }})
Expand All @@ -28,6 +38,10 @@ jobs:
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: 45
concurrency:
group: ${{ github.workflow }}-analyze-${{ matrix.language }}-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
permissions:
# required for all workflows
security-events: write
Expand Down
53 changes: 53 additions & 0 deletions .github/workflows/format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,24 @@ on:
permissions:
contents: read

# New pushes cancel older runs for the same pull request. Each job queues by
# workflow, job, and author, so one author runs one copy of each job at a time.
# GitHub orders jobs by when they start waiting, but does not guarantee FIFO.
# Each queue holds up to 100 pending jobs; later arrivals are canceled.
# Timeouts release queues after hung jobs. Bots and non-PR events use unique
# run IDs and do not queue together.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true

jobs:
check-claude-md-symlink:
name: CLAUDE.md symlink guard
runs-on: ubuntu-latest
timeout-minutes: 5
concurrency:
group: ${{ github.workflow }}-check-claude-md-symlink-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -42,6 +56,10 @@ jobs:
check-ci-node-pin:
name: CI Node pin guard
runs-on: ubuntu-latest
timeout-minutes: 5
concurrency:
group: ${{ github.workflow }}-check-ci-node-pin-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand All @@ -66,6 +84,10 @@ jobs:
format-rust:
name: cargo fmt
runs-on: ubuntu-latest
timeout-minutes: 25
concurrency:
group: ${{ github.workflow }}-format-rust-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -97,6 +119,25 @@ jobs:
cache: npm
cache-dependency-path: crates/trusted-server-js/lib/package-lock.json

# The concurrency guard runs here because `cargo fmt` is a required check.
# Pin the yq binary by checksum, so a replaced release asset cannot run in
# CI with this job's token.
- name: Install yq
shell: bash
run: |
curl --fail --location --silent --show-error \
https://github.com/mikefarah/yq/releases/download/v4.54.1/yq_linux_amd64 \
--output "$RUNNER_TEMP/yq"
echo "8e34fc298390875de416e6a4afcb8cabeceb25d9aa8506c1a2f9353cf702ea5f $RUNNER_TEMP/yq" | sha256sum --check --strict
chmod +x "$RUNNER_TEMP/yq"
echo "$RUNNER_TEMP" >> "$GITHUB_PATH"

- name: Test the CI concurrency policy guard
run: node --test scripts/check-ci-concurrency.test.mjs

- name: Require per-PR cancellation, per-author job queues and timeouts
run: scripts/check-ci-concurrency.sh

- name: Run cargo fmt
uses: actions-rust-lang/rustfmt@v1

Expand Down Expand Up @@ -136,6 +177,10 @@ jobs:

format-typescript:
runs-on: ubuntu-latest
timeout-minutes: 10
concurrency:
group: ${{ github.workflow }}-format-typescript-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
defaults:
run:
working-directory: crates/trusted-server-js/lib
Expand Down Expand Up @@ -167,6 +212,10 @@ jobs:

format-docs:
runs-on: ubuntu-latest
timeout-minutes: 10
concurrency:
group: ${{ github.workflow }}-format-docs-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
defaults:
run:
working-directory: docs
Expand Down Expand Up @@ -208,6 +257,10 @@ jobs:
docs-proposal-scripts:
name: docs-proposal scripts
runs-on: ubuntu-latest
timeout-minutes: 10
concurrency:
group: ${{ github.workflow }}-docs-proposal-scripts-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,16 @@ on:
types: [opened, synchronize, reopened]
workflow_dispatch:

# New pushes cancel older runs for the same pull request. Each job queues by
# workflow, job, and author, so one author runs one copy of each job at a time.
# GitHub orders jobs by when they start waiting, but does not guarantee FIFO.
# Each queue holds up to 100 pending jobs; later arrivals are canceled.
# Timeouts release queues after hung jobs. Bots and non-PR events use unique
# run IDs and do not queue together.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true

env:
ORIGIN_PORT: 8888
ARTIFACTS_DIR: /tmp/integration-test-artifacts
Expand All @@ -23,6 +33,9 @@ jobs:
name: prepare integration artifacts
runs-on: ubuntu-latest
timeout-minutes: 30
concurrency:
group: ${{ github.workflow }}-prepare-artifacts-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -64,6 +77,9 @@ jobs:
needs: prepare-artifacts
runs-on: ubuntu-latest
timeout-minutes: 20
concurrency:
group: ${{ github.workflow }}-integration-tests-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -119,6 +135,9 @@ jobs:
needs: prepare-artifacts
runs-on: ubuntu-latest
timeout-minutes: 15
concurrency:
group: ${{ github.workflow }}-integration-tests-fastly-ec-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -159,6 +178,9 @@ jobs:
# Playwright cannot install chromium on the ubuntu-latest 26.04 image.
runs-on: ubuntu-24.04
timeout-minutes: 45
concurrency:
group: ${{ github.workflow }}-trace-runtime-tests-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -254,6 +276,9 @@ jobs:
# once the pinned Playwright version supports the newer image.
runs-on: ubuntu-24.04
timeout-minutes: 15
concurrency:
group: ${{ github.workflow }}-browser-tests-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/pbs-example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,24 @@ on:
permissions:
contents: read

# New pushes cancel older runs for the same pull request. Each job queues by
# workflow, job, and author, so one author runs one copy of each job at a time.
# GitHub orders jobs by when they start waiting, but does not guarantee FIFO.
# Each queue holds up to 100 pending jobs; later arrivals are canceled.
# Timeouts release queues after hung jobs. Bots and non-PR events use unique
# run IDs and do not queue together.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true

jobs:
local-checks:
name: PBS Terraform and Compose checks
runs-on: ubuntu-latest
timeout-minutes: 20
concurrency:
group: ${{ github.workflow }}-local-checks-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
env:
TF_IN_AUTOMATION: 'true'
AWS_EC2_METADATA_DISABLED: 'true'
Expand Down
44 changes: 44 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,24 @@ on:
branches: [main]
pull_request:

# New pushes cancel older runs for the same pull request. Each job queues by
# workflow, job, and author, so one author runs one copy of each job at a time.
# GitHub orders jobs by when they start waiting, but does not guarantee FIFO.
# Each queue holds up to 100 pending jobs; later arrivals are canceled.
# Timeouts release queues after hung jobs. Bots and non-PR events use unique
# run IDs and do not queue together.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true

jobs:
test-rust:
name: cargo test
runs-on: ubuntu-latest
timeout-minutes: 45
concurrency:
group: ${{ github.workflow }}-test-rust-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -79,6 +92,9 @@ jobs:
name: HTML EOF runtime (Fastly)
runs-on: ubuntu-latest
timeout-minutes: 25
concurrency:
group: ${{ github.workflow }}-test-fastly-eof-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -127,6 +143,10 @@ jobs:
test-axum:
name: cargo test (axum native)
runs-on: ubuntu-latest
timeout-minutes: 30
concurrency:
group: ${{ github.workflow }}-test-axum-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -208,6 +228,10 @@ jobs:
test-cloudflare:
name: cargo check (cloudflare native + wasm32-unknown-unknown)
runs-on: ubuntu-latest
timeout-minutes: 15
concurrency:
group: ${{ github.workflow }}-test-cloudflare-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -242,6 +266,10 @@ jobs:
test-spin:
name: cargo check/build/test (spin native + wasm32-wasip1)
runs-on: ubuntu-latest
timeout-minutes: 20
concurrency:
group: ${{ github.workflow }}-test-spin-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -288,6 +316,10 @@ jobs:
test-parity:
name: cargo test (cross-adapter parity)
runs-on: ubuntu-latest
timeout-minutes: 15
concurrency:
group: ${{ github.workflow }}-test-parity-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -322,6 +354,10 @@ jobs:
matrix:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 45
concurrency:
group: ${{ github.workflow }}-test-cli-${{ matrix.os }}-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -394,6 +430,10 @@ jobs:
name: ts dev lint domains (changed lines)
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
timeout-minutes: 10
concurrency:
group: ${{ github.workflow }}-lint-domains-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
steps:
# A PR checkout is GitHub's merge commit; depth 2 also fetches its
# parents, so `HEAD^1` is the exact base commit the PR merges into.
Expand Down Expand Up @@ -428,6 +468,10 @@ jobs:
test-typescript:
name: vitest
runs-on: ubuntu-latest
timeout-minutes: 10
concurrency:
group: ${{ github.workflow }}-test-typescript-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
defaults:
run:
working-directory: crates/trusted-server-js/lib
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/worker-auction-deadlines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,23 @@ on:
permissions:
contents: read

# New pushes cancel older runs for the same pull request. Each job queues by
# workflow, job, and author, so one author runs one copy of each job at a time.
# GitHub orders jobs by when they start waiting, but does not guarantee FIFO.
# Each queue holds up to 100 pending jobs; later arrivals are canceled.
# Timeouts release queues after hung jobs. Bots and non-PR events use unique
# run IDs and do not queue together.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true

jobs:
worker-deadlines:
runs-on: ubuntu-latest
timeout-minutes: 30
concurrency:
group: ${{ github.workflow }}-worker-deadlines-${{ matrix.adapter }}-${{ github.event_name == 'pull_request' && github.event.pull_request.user.type != 'Bot' && github.event.pull_request.user.login || github.run_id }}
queue: max
strategy:
fail-fast: false
matrix:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,6 @@ src/*.html

# Documentation proposal workflow scratch space
/.docs-proposal/
# Wrangler config rendered by the Cloudflare integration-test harness from
# wrangler.ci.toml for CI or test-specific configuration overrides.
wrangler.integration.generated.toml
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@ Every PR must pass:
13. CI Node pin guard: `node --test scripts/check-ci-node-pin.test.mjs && node scripts/check-ci-node-pin.mjs` with the `.tool-versions` Node (every CI job that compiles Rust sets up the `.tool-versions` Node before its first cargo step)
14. Fastly absolute-deadline network fixtures under Viceroy (the harness builds the adapter test binary itself): `node crates/trusted-server-adapter-fastly/tests/deadline-origin.mjs "$(command -v viceroy)"`
15. Worker auction-deadline runtime fixtures (`worker-auction-deadlines.yml`): build and lint the runtime fixture, then run it under the local runtime. For Cloudflare, `cargo build --locked -p trusted-server-adapter-cloudflare --example deadline-runtime --target wasm32-unknown-unknown --features cloudflare` and `node scripts/test-worker-auction-deadlines.mjs cloudflare --runtime "$(command -v wrangler)"` (requires wrangler and the `Cargo.lock` wasm-bindgen CLI). For Spin, `cargo build --locked -p trusted-server-adapter-spin --example deadline-runtime --target wasm32-wasip1 --features spin` and `node scripts/test-worker-auction-deadlines.mjs spin --runtime "$(command -v spin)"`. CI lints each fixture with the same `cargo clippy` arguments plus `-- -D warnings`
16. CI concurrency policy guard: `node --test scripts/check-ci-concurrency.test.mjs && scripts/check-ci-concurrency.sh` (requires yq v4); every PR-triggered workflow must use `test.yml`'s per-PR cancellation block, and every non-reusable job must set a timeout and a per-author `queue: max` group. Matrix jobs must also include their matrix values in the group.

CI also runs these HTML EOF checks. Run them locally only when changing EOF
finalization, publisher or HTML-processor code:
Expand Down
Loading
Loading