September release candidate (DO NOT MERGE) - #1112
Draft
ChristianPavilonis wants to merge 466 commits into
Draft
Conversation
The known-per-render slot tests embedded a real GAM network id, ad-unit path, and div-id token. Replace them with the fictional network id already used elsewhere in the module, a generic placement path, and a synthetic token. The `rh-gam-kso` prefix stays: it is the shipped matcher constant under test, not fixture data. The token keeps the shape the matcher requires (eight or more leading digits followed by letters), so both the dynamic and all-digit branches are still exercised.
`Url::origin()` includes the scheme, so an `http://publisher.example/` entry URL that canonically redirects to `https://publisher.example/` was refused as a cross-origin root redirect, forcing operators to find and enter the canonical URL before generation could run. Reuse the verify path's `origin_changed`, which already permits only the same-host default-port `http:80` to `https:443` upgrade and still refuses host changes, port changes, and HTTPS downgrades. The host is the cookie boundary, so the upgrade leaves the trust boundary intact.
Blocking:
- Refuse an unreadable `[creative_opportunities]` section instead of reading it
as absent, which let a merge replace the operator's whole slot array.
- Tell one re-rendered element apart from two colliding elements by comparing
what the ephemeral markers did not cover, so a React SSR/hydration pair no
longer refuses itself (a fully per-render publisher generated zero slots).
- Refuse volatile div-id families by token shape rather than a hardcoded vendor
name, covering every placement after the token instead of two.
- Carry the ambiguous-stem verdict site-wide, so a landing page that renders one
member of a refused group cannot resurrect the prefix.
- Read only ISO 639-1 codes as a locale prefix, so `/tv`, `/ai` and `/us` stay
section roots.
- Track line endings past comments and single-line strings, so a stray triple
quote no longer flips a CRLF config to LF.
- Report evidence truncation instead of dropping entries silently, and align the
Rust cap with the collector's.
- Escape config-derived slot ids in `ts config ad-templates check` output.
Non-blocking:
- Adopt an inferred section policy when the config has none: a `{section}` slot
without `section_root` cannot load, so there is no policy to preserve.
- Note a followed root redirect; keep credentials, queries, and origins out of
per-page notes and the cross-origin refusal.
- Report per-page collection failures once and the consent stub once per run.
- Collapse index-document links onto their section.
- Expose the browser flags on `ts audit generate` and its legacy alias.
- Move the dry-run "no changes" sentence to stderr and build the diff lazily.
- Pace the crawl before announcing the page; scope audit cookies by origin.
- Make the consent stub configurable and enumerable so a CMP that installs via
`defineProperty` is not aborted, and the stub is not a fingerprint.
Docs and debt: correct the strict-mode claim for sizeless out-of-page slots,
document both new refusal classes and the stderr progress contract, drop the real
publisher and vendor identifiers from the spec, order the manifest dependencies,
and document the arms and fields that are unreachable or reserved.
A placement that only exists on section pages — a sidebar, an in-article unit —
witnessed no `section_root` of its own, so inference fell through to a literal
decision and refused the slot outright. On a live crawl that dropped
`ad-atf_sidebar-0` from the config even though its five observed ad-unit paths
differ only in the section segment, and the reported reason ("used several
ad-unit paths and none generalized") pointed at the wrong cause.
`SlotAnalysis::RootUnwitnessed` now carries the varying segment, so such a slot
templates against the config-level `section_root` another slot witnessed. That is
safe because the slot's page patterns are derived from the paths it was seen on,
all of which carry a section segment: `{section}` never falls back to the root
for it. A note names the borrowed `section_root`. When *no* slot witnessed a
root, nothing templates, and the diagnostic now says that the crawl never
included a page without a section segment instead of blaming generalization.
Verified against a live crawl: the sidebar is written with
`/{network_id}/autoblog/{section}`, matches only its five sections, and does not
match the root, while the previously written slots are unchanged.
A static configuration choice should not emit a warning during every request-time settings load. Removing the log keeps runtime output focused without changing validation or creative processing behavior. Resolves: #1089
# Conflicts: # crates/trusted-server-adapter-fastly/src/app.rs
# Conflicts: # crates/trusted-server-adapter-fastly/src/app.rs # crates/trusted-server-core/src/config.rs # scripts/template-cache-local-test.sh # trusted-server.example.toml
# Conflicts: # docs/superpowers/plans/2026-08-26-auction-timeline-offsets.md
…spec/auction-timeline-offsets
# Conflicts: # crates/trusted-server-cli/src/commands/audit/mod.rs # crates/trusted-server-cli/src/commands/config/init.rs # crates/trusted-server-core/src/config.rs # crates/trusted-server-core/src/integrations/js_asset_proxy.rs # crates/trusted-server-core/src/integrations/mod.rs # crates/trusted-server-core/src/platform/test_support.rs # docs/guide/getting-started.md # docs/superpowers/specs/2026-04-01-js-asset-proxy-design.md # docs/superpowers/specs/2026-06-22-ts-audit-js-asset-proxy-config-design.md # trusted-server.example.toml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
September release candidate
This PR is an integration branch for release-candidate validation. Do not merge it into
main.Already included through main:
Included PRs