Skip to content

Define discovered-catalog qualification and Fastly integration - #152

Merged
aram356 merged 4 commits into
mainfrom
plan/trusted-server-fastly-contract
Nov 6, 2026
Merged

aram356 merged 4 commits into
mainfrom
plan/trusted-server-fastly-contract

Conversation

@aram356

@aram356 aram356 commented Nov 6, 2026 •

Copy link
Copy Markdown
Collaborator

PRfection phase: plan

Refs #34. Parent epic: #8.

Summary

Define whole-catalog qualification reporting and a uniform implemented-bidder contract across Axum, Cloudflare, Fastly and Spin, while keeping the first in-process Trusted Server integration Fastly-first and display-only. This PR changes only the specification and plan; it does not implement qualification, remove production flags or claim integration readiness.

Scope And Design

The maintainer requested joint spec/plan review, then explicitly broadened the bidder requirement to the whole catalog with unimplemented entries skipped. The reviewer has reviewed the expanded pair at this head, accepted/resolved the original finding and reported no new findings. The maintainer explicitly authorized merge using that recorded review without a formal independent GitHub approval for this head. Issue #34 remains open; downstream implementation remains separate.

Catalog Contract

  • Reuse the existing build-time manifest scan and generated registry, settings, endpoints and conformance wiring. Do not invent another registry or handwritten bidder list.
  • Enumerate the whole catalog and aliases for every adapter. Reference-only identities are explicitly skipped with reason not_implemented, not omitted or counted as passing. A source association alone does not prove a Rust identity is implemented.
  • Every declared implemented identity/alias must qualify on all four adapters. Missing constructor, generated registration, schema, resources or target support is failed/blocked, not an unimplemented skip. Runtime-disabled or security-feature-disabled is not the same as unimplemented.
  • Remove native_only, target-based bidder filtering and delivery-cohort schema selection through the reviewed implementation cutover. Include manifest/config models, generator/storage predicates, schema availability/initialization/admission and bootstrap, not just the TOML flags. No replacement per-adapter bidder list or target flag is introduced.
  • Qualify the actual candidate production artifacts before merging/publishing that cutover. Cover implemented execution in bounded batches without changing workload limits, ceilings or headroom; unimplemented rows cause no bidder I/O and cannot be activated through runtime configuration.

The host contract retains one Trusted Server runtime Settings/configuration path, shared Auctioneer preparation/engine policy, production plan-backed local execution, original deadlines, owned lifecycle/resource handoff and typed selection/targeting. It introduces no sidecar, internal HTTP RPC, nested App, second loader or test-only registration path. Live vendor authorization and hosted/publisher acceptance remain separate from deterministic fixture qualification.

Delivery Owners

Shared preparation and host binding remain in #51; production host execution is Trusted Server-owned. Discovery/schema qualification uses #46/#47, adapter fit #72-#75, guest serving #88-#90, and actual linked host acceptance #76. Package 1 reconciles those existing issues before implementation; this PR does not create another configuration or registry epic.

Immutable Source Baseline

Component Revision
Auctioneer f307289269f7c510d86647a9f6b673058b74e746
Trusted Server 51730bdaf841e4d7bb96c2258e5e98169bdff9a7
Auctioneer EdgeZero 775366fdac923135e8430b1e3dffebedc648ef7c
Trusted Server EdgeZero v0.0.11, resolved 87456c708ffe9edf86b3a0f8b06dfd15d60b07b5

Skills used: PRfection CREATOR, superpowers:brainstorming, superpowers:writing-plans, superpowers:receiving-code-review and superpowers:verification-before-completion. An independent read-only document subagent reviewed the final whole pair without material findings; this is not formal GitHub approval or maintainer acceptance.

Review Disposition

The single original finding is fixed, independently verified and resolved by the reviewer. Commit cf51a412133634370c2669a7f43b83b1423c2cb4 corrected the source membership wording; the user-directed revision at a066d6de500828993f69940e6aed09d5f63fa955 replaces the fixed bidder subset with whole-catalog reporting and discovery-based qualification. The current-head whole-pair review approves the substance with no new findings, but is a COMMENTED self-review, not an eligible formal approval. CREATOR did not resolve or hide any thread.

Verification

Current head: a066d6de500828993f69940e6aed09d5f63fa955. The diff contains only the two Markdown documents; production code, tests, workflows, dependencies and limits are unchanged.

Executed local source/document checks, exit 0:

/opt/homebrew/bin/python3 /private/tmp/auctioneer-pr152-discovery-review-check.py /Users/ag/projects/iab/auctioneer/.worktrees/trusted-server-fastly-contract /Users/ag/projects/iab/trusted-server
PASS: pinned catalog has 262 owner manifests, 17 executable factories and 18 declared public definitions
PASS: complete source/provenance identity coverage is 361 entries, not a delivery list
PASS: 18 declared implemented identities require adapter qualification; 343 reference-only identities require explicit not_implemented rows
PASS: 4 source-only identities sharing an executable owner are not mistaken for implemented aliases
PASS: 23 immutable source-file references and 4 relative file/anchor references resolve
PASS: both documents require four-adapter coverage, verified skips and native_only retirement without delivery cohorts
PASS: C1-C10 remain present exactly once; source counts are observations, not qualification receipts

This is a temporary local source-inspection script, not a new committed acceptance gate or an application qualification report. Counts describe the pinned source, not passing runtime qualification.

cargo fmt --all -- --check, git diff --cached --check and the two-document prettier --check --prose-wrap preserve check exited 0; Prettier reported All matched files use Prettier code style!.

Supplemental runtime verification at the current head, exit 0:

env CARGO_TARGET_DIR=/Users/ag/projects/iab/auctioneer/target CARGO_BUILD_JOBS=2 cargo test --locked --offline -p auctioneer-runtime --lib
test result: ok. 266 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s

Full-Suite Status

The complete unchanged current-head GitHub matrix has finished: 25 checks successful, 0 failed, 0 pending across tests, format/lint, Fastly, Cloudflare, and Spin. These were executed by GitHub runners, not locally by this CREATOR. The full test workflow contains 20 successful jobs at exactly a066d6de500828993f69940e6aed09d5f63fa955; the other workflows supply the remaining 5 checks. No prior-head results are substituted.

Executed readback, exit 0:

gh pr checks 152 --repo IABTechLab/auctioneer --json name,state,link --jq '{total:length,passed:([.[]|select(.state=="SUCCESS")]|length),nonpassing:[.[]|select(.state!="SUCCESS")]}'
{"nonpassing":[],"passed":25,"total":25}

Verbatim result excerpts retrieved from the current-head GitHub logs: the default-workspace source-selection control, followed by both mandatory fresh producer cases:

test result: ok. 34 passed; 0 failed; 0 ignored; 0 measured; 657 filtered out; finished in 20.27s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 18 filtered out; finished in 476.25s
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 18 filtered out; finished in 1267.78s

This completes the existing acceptance matrix for this planning revision. It does not implement or certify the future whole-catalog qualification described by the documents.

The original local workspace attempt at 1ce56d32ae0245139007f6b5ff41fee99364a4a1 was interrupted during compilation with exit 130 because of disk pressure, before test-result lines. It remains incomplete, not passing evidence. Existing mandatory producer/compiler/feature/adapter owners and every assertion remain intact; no gate was weakened.

Merge Outcome

Merged into main as 9b83deaa680ad8e867169db3b4ebb195b8a1b33c. Verified that this commit is on origin/main and its tree is identical to the reviewed/tested head: git diff --exit-code a066d6de500828993f69940e6aed09d5f63fa955 9b83deaa680ad8e867169db3b4ebb195b8a1b33c -- exited 0. Issue #34 remains open. No production implementation is included.

All findings are reviewer-accepted/resolved and all 25 current-head checks pass. The maintainer explicitly authorized merging this head using the recorded positive reviewer verdict without a formal independent GitHub APPROVE. This exception applies only to a066d6de500828993f69940e6aed09d5f63fa955; no CI check is waived and no self-approval or administrative bypass is used. No production implementation, live testing or CREATOR thread-resolution is included. Issue #34 remains open.

@aram356 aram356 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REQUEST_CHANGES — submitted as COMMENT because GitHub refused the formal event: Review Can not request changes on your own pull request (HTTP 422). I did not attempt to work around that restriction. One factual correction in the spec's source-baseline findings. The contract and plan are otherwise accurate, well-scoped and independently verifiable; the single finding is a misstated premise, not a wrong conclusion.

Reviewed head: 1ce56d32ae0245139007f6b5ff41fee99364a4a1. Base f307289269f7c510d86647a9f6b673058b74e746 is exactly current origin/main and the merge-base, so the base is not stale.

Phase and scope

PRfection phase: plan. Diff is exactly the two Markdown documents (+452/-0, no code, test, workflow or dependency changes), verified with git diff --name-status. Both commits are free of generated/co-author trailers.

Finding

Spec section 2, item 5 (...design.md line 44) misdescribes which implementations are native_only.

The count is right and the conclusion holds, but the composition does not. At the pinned Auctioneer revision:

  • native_only = true among the required 14: 13 — all except pubmatic.
  • pubmatic/bidder.toml carries no native_only key, so it is already guest-publishable.
  • aps/bidder.toml:3 is native_only = true, and aps is supplemental, not a priority-manifest entry.
  • The priority manifest holds exactly 13 entries (msft…criteo), which does not include aps.

So "Thirteen newly published priority implementations are marked native_only" reads as the 13 priority entries, when the actual native_only 13 is that set minus pubmatic plus aps. "Newly published" does not separate them either: all 14 bidder.toml files were added in the same import commit ee16743.

Why it matters: native_only is the live guest-publication gate, not a label. crates/auctioneer-config/src/codegen/mod.rs:549-552 emits #[cfg(not(target_arch = "wasm32"))] for it, and crates/auctioneer-config-data/build.rs:207 filters those bidders out of guest targets (.filter(|(_, info)| !guest || !info.native_only)). Package 5's "Removing a native_only flag alone is not the implementation" and #88's all-14 scope are therefore sized against the wrong membership: one required identity needs no flag change, and one that does (aps) is not reachable through the priority manifest the sentence points at.

The section's conclusion — "the required set is therefore not currently Fastly-routable" — is correct and unaffected, since 13 non-routable members are more than enough to block the cohort.

Requested correction: state that 13 of the 14 required identities are native_only (all but pubmatic), and that the set spans the priority manifest plus supplemental aps, rather than equating it with "thirteen priority implementations".

Verified as accurate

I checked each substantive claim against committed source rather than accepting the summary.

Source baseline (spec section 2) — all four revisions confirmed in the real lockfiles:

  • Auctioneer EdgeZero 775366fd… matches Cargo.lock and root Cargo.toml (rev = "775366fd…").
  • Trusted Server EdgeZero v0.0.11 resolves to 87456c70… in its Cargo.lock. The SDK mismatch the contract treats as a central risk is real.
  • Trusted Server 51730bda… exists and is fetchable.

Trusted Server findings, each confirmed at the pinned revision:

  • Item 2: orchestrator.rs:895 is #[cfg(test)] pub(crate) fn register_provider; from_plan at :866 maps to GenericOpenRtbProvider::new. Exact.
  • Item 3: plan.rs:137 is pub endpoint: String, non-optional with no serde(default). A local executor genuinely cannot be represented without fabricating one.
  • Item 6: types.rs:240-280 — Bid has no targeting field, only metadata: HashMap<String, serde_json::Value>. Correct.
  • Item 7: trusted-server-adapter-fastly/src/platform/deadline.rs keys pending work by backend name and requires a cache-bypass request (:51-62). Correct.
  • Section 9's APS risk: integrations/aps.rs:1889 register_for_plan opens with if !plan.has_profile(APS_INTEGRATION_ID) { return Ok(None); }. Placing APS demand under a sole local provider would skip renderer registration exactly as described. This is a sharp catch.

Auctioneer-side: run_auction is pub at exchange/src/run/mod.rs:86, prepare at openrtb/src/prepare/mod.rs:61, and auction_inner is private at core/src/handlers/auction.rs:415 — so item 1's "public engine access alone is not a reusable preparation boundary" is right.

Membership: the 14 identities and the ttd → thetradedesk alias match the priority manifest exactly; aps membership is witnessed by priority-supplemental.toml.

References and links: all 19 source references resolve at their pinned revisions, all four relative Markdown links resolve at this head, and vision.md:28 ## Two Delivery Modes matches the #two-delivery-modes anchor. No contradiction found in docs/roadmap.md.

Plan runnability: every Auctioneer target the plan names exists, and --features conformance-suite in Package 4 is correct — fanout_conformance declares required-features = ["conformance-suite"]. All five named workflows exist and none carries paths-ignore, so the full matrix genuinely runs on this docs-only PR rather than being skipped.

Verification executed

At PR head 1ce56d32, in an isolated worktree with its own target dir (the user's tree and branch were not touched):

cargo fmt --all -- --check                                              exit 0
cargo clippy --locked --workspace --all-targets -- -D warnings          exit 0
cargo clippy --locked --workspace --all-targets \
  --features insecure-bidders -- -D warnings                            exit 0
prettier --check --prose-wrap preserve <both documents>                 exit 0
  All matched files use Prettier code style!

Plan-named targets, to confirm the commands are real rather than aspirational:

cargo test --locked -p auctioneer-core --test handler_resolution --test resolve_runtime_config \
  --test auction_config_lifecycle --test auction_config_retention --test privacy_config_parity   exit 0
  test result: ok. 3 passed; 0 failed    test result: ok. 2 passed; 0 failed
  test result: ok. 8 passed; 0 failed    test result: ok. 4 passed; 0 failed; 1 ignored
  test result: ok. 4 passed; 0 failed

cargo test --locked -p auctioneer-exchange --test run_auction --test determinism \
  --test privacy_policy_composition                                                              exit 0
  test result: ok. 2 passed; 0 failed    test result: ok. 50 passed; 0 failed
  test result: ok. 15 passed; 0 failed

cargo test --locked --offline -p auctioneer-runtime --lib                                        exit 0
  test result: ok. 266 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

The 266 passed figure in the PR body reproduces exactly.

GitHub matrix at this exact commit: 24 success, 1 in progress (cargo test (compiler conformance schema) still running at the time of writing), 0 failed. Those are GitHub's runs, attributable to its runners, not my execution.

Because the head's code tree is byte-identical to its base outside the two new documents (git diff over everything except docs/superpowers/ is empty), code-suite results at this head and at origin/main are the same by construction.

Not run locally: the full workspace test matrix. Free disk was 19 GiB against roughly 26 GiB needed per lane, and I would not clean the user's 124 GiB cache or another worktree's artifacts to make room. I am reporting that as not-run, not as passing; CI covers those lanes at this commit. WASI guest publication and hosted qualification were not attempted and remain with their existing owners.

Assessment of the planning content

The contract is unusually disciplined about not over-claiming: the baseline is immutable, each gap cites committed source, and C1-C10 are explicitly labelled "required future controls, not executed results". The ownership split in section 9 — Auctioneer owning bid validity and local selection, Trusted Server owning cross-provider competition — is coherent and resolves the real conflict item 6 identifies, by offering the selected local candidate per slot rather than teaching the host reducer Auctioneer's rules. The prohibitions that matter are present and specific: no fabricated endpoint, no DevFanout, no test-only registration, no native_only removal as a stand-in for acceptance, no second configuration loader.

The plan's package boundaries line up with the existing issues (#51, #73, #88, #76, plus a Trusted Server-owned task) and it keeps #34 open at merge rather than closing it. Acceptance criteria are not weakened anywhere I checked.

One observation, not a finding: Package 5's second command is required to stay nonpassing until Fastly's facts land. That is stated plainly in the plan, which is the right call, but it means Package 5 cannot report all-green until #73 completes — worth keeping visible so a later run does not read it as a regression.

Next actor

CREATOR, for the single wording correction in spec section 2 item 5. I have left that finding's thread open; nothing else requires an author change.

Separately, and not a finding against this PR: while reclaiming my own build artifacts I ran git worktree prune at the repository root, which removed the registration and directory for .worktrees/operator-runtime-config-implementation (another worktree I did not create). No commits were lost — implementation/operator-runtime-config is at 5ec847ec and design/operator-runtime-config at c0977f1d, both matching origin — and it can be restored with git worktree add .worktrees/operator-runtime-config-implementation implementation/operator-runtime-config. Any uncommitted changes in that directory are not recoverable by me. I should have limited removal to my own path; flagging it rather than leaving it to be discovered.

This review is a COMMENT carrying a REQUEST_CHANGES verdict: GitHub does not accept a formal change request on one's own pull request. It therefore does not satisfy the independent-approval gate, and this PR is not merge-ready on my review alone — an eligible independent approval covering this head is still required.

@aram356 aram356 changed the title Define Fastly Trusted Server integration contract and plan Define discovered-catalog qualification and Fastly integration Nov 6, 2026

@aram356 aram356 left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APPROVE on substance — submitted as COMMENT because a formal approval is not available to me here. Two independent restrictions apply: GitHub does not permit approving one's own pull request, and this session's safety classifier separately denied the APPROVE call as self-approval. I did not attempt to circumvent either. That means this review cannot make the PR merge-ready; an eligible independent APPROVE covering this head is still required.

Reviewed head: a066d6de500828993f69940e6aed09d5f63fa955. Base f307289269f7c510d86647a9f6b673058b74e746 is still exactly current origin/main and the merge-base. Diff remains documentation-only: the same two Markdown files, +479/-0 against base, no code, test, workflow or dependency changes. Both new commits are free of generated/co-author trailers.

Prior finding

My one finding from head 1ce56d32 is accepted and resolved after independent verification. cf51a41 corrected spec item 5 to state that 13 of the 14 required identities are native_only (all but pubmatic), spanning the priority manifest plus supplemental aps, and mirrored that baseline in Package 5. I re-derived it from Git objects at the pinned revision: 13 priority entries of which 12 are native-only, plus aps = 13 of 14. Thread resolved with the evidence recorded.

No new findings at this head.

Scope change reviewed

a066d6d is not a wording fix — it replaces the fixed 14-bidder Fastly cohort with whole-catalog qualification across Axum, Cloudflare, Fastly and Spin, plus retirement of the native_only field itself. I reviewed the revised pair as a whole rather than re-checking only the corrected sentence.

Every new factual claim verifies against committed source at the pinned revision:

  • Counts are exact. 262 bidder manifests, 17 with factory = true, 18 declared public definitions. The 18 resolves as 17 factories with thetradedesk declaring both thetradedesk and ttd; I checked for the [definitions.name] subtable pitfall and no bare [definitions] form exists, so the count is not an artifact of the pattern. The spec correctly labels these as observations rather than hardcoded acceptance values.
  • New item 8 is accurate. crates/auctioneer-bidder/build.rs:155-164 is build_discovery::scan(...) followed by render_registry, bidder_settings_codegen::render and bidder_endpoint_codegen::render — build-time discovery already exists and is being reused, not reinvented.
  • New item 9 is accurate and well-judged. crates/auctioneer-config/src/schema_staging_build.rs:35,40 genuinely reads tests/conformance/fixtures/waves/priority.toml and priority-supplemental.toml — the manually selected delivery lists — and crates/auctioneer-bidder/src/schema/native.rs is gated #[cfg(not(target_arch = "wasm32"))] with native-only reservation constants. The conclusion that retiring the manifest flag alone would leave an unusable guest validator path follows from the code.
  • The skip/block distinction rests on real structure. bidder_discovery.rs:83 (if !bidder.factory) excludes non-factory manifests from registration, which supports the requirement that reference-only entries report as skipped: not_implemented and cannot be activated by runtime configuration.
  • Decomposition matches reality. #46, #47, #72, #73, #74, #75, #88, #89, #90 all exist and are OPEN, and their titles match the roles assigned to them — including #75 being specifically "Certify Akamai Functions hosted Spin fit", consistent with the spec's insistence that this is the selected hosted contract and not an assumed generic Spin ceiling.
  • All referenced paths resolve. Every file in the revised ownership map and cutover row exists at the pinned revision (21 checked), as do the six new source references, all four relative links, and the vision.md#two-delivery-modes anchor. C1-C10 each appear exactly once.

The revised C4/C5/C10 rows are stronger than what they replace: C4 now requires exact whole-catalog report coverage with verified skips and positive serving per implemented identity with no replacement target filter, and C10 is per-adapter rather than Fastly-only. The plan's 5A/5B split is the right shape — make discovery the only selection contract, then qualify the candidate artifacts before release — and 5B explicitly keeps the cutover PR unmerged until all implemented cells pass, with skips visible but non-passing.

Two judgments worth recording as sound rather than as findings:

  • Qualifying the candidate artifacts after the local cutover avoids demanding that the currently filtered registry prove positive cases it structurally cannot expose, while still refusing a direct-factory bypass as evidence. That is the correct way out of the circularity.
  • Keeping the bidder contract portable across four adapters while the Trusted Server host integration stays Fastly-first keeps the scope expansion from silently pulling three more host integrations into #76.

Verification executed

At head a066d6d, in an isolated worktree with its own target dir. The user's working tree and branch were not touched.

cargo fmt --all -- --check                                                exit 0
cargo clippy --locked --workspace --all-targets -- -D warnings            exit 0
cargo clippy --locked --workspace --all-targets \
  --features insecure-bidders -- -D warnings                              exit 0
prettier --check --prose-wrap preserve <both documents>                   exit 0
  All matched files use Prettier code style!

The plan's new commands, run to confirm they dispatch real cases rather than matching zero:

cargo test --locked -p auctioneer-config --features build-support --lib bidder_discovery::
  test result: ok. 39 passed; 0 failed; 0 ignored; 0 measured; 359 filtered out

cargo test --locked -p auctioneer-bidder --test catalog_publication
  running 2 tests    test result: ok. 2 passed; 0 failed
cargo test --locked -p auctioneer-bidder --test catalog_publication --features insecure-bidders
  running 2 tests    test result: ok. 2 passed; 0 failed
cargo test --locked -p auctioneer-config-data --test bidder_storage
  running 1 test     test result: ok. 1 passed; 0 failed

cargo test --locked -p auctioneer-adapter-axum -p auctioneer-adapter-fastly \
  -p auctioneer-adapter-cloudflare -p auctioneer-adapter-spin --all-targets   exit 0
  34 test binaries, 206 passed, 0 failed

I also checked the plan's claim that strict all-adapter fit must remain nonpassing, since a plan asserting a command fails is as falsifiable as one asserting it passes:

cargo run --locked -p auctioneer-cli -- bidders resources --check --all-adapters --require-fit
  exit 1    required_fit: false on all four adapters
  axum:       Indeterminate (unknown memory ceiling / inbound population / host ingress accounting)
  cloudflare: Exceeds (available 128000000, required 138086859344)
  fastly:     Exceeds (available 128000000, required 23602706872);
              also missing_proved_nonzero_separate_stack_requirement
  spin:       Exceeds (available 134217728, required 23603095480)

That is nonpassing for the stated reasons, so the plan's description of it as a real gate is accurate and not an excuse for a skipped check.

GitHub matrix at this exact commit: 24 success, 1 in progress (cargo test (evidence-producers)), 0 failed, over the same 25-check set as the prior head. Those are GitHub's runs on its runners, not my execution.

Not run by me: .github/workflows/scripts/test/execute-catalog-publication.sh and the wasm32-wasip1 guest lanes. The script is CI-owned at test.yml:462 and enforces exact report counts; it needs the pinned wasmtime 48.0.2 from .tool-versions, and this machine has 45.0.0, which fails closed on the version check rather than exercising the wrong runtime. The four wasm/guest CI lanes are green at this commit. Hosted provider qualification was not attempted and remains with its existing owners.

Because the head's code tree is byte-identical to its base outside docs/superpowers/, code-suite results at this head and at origin/main coincide by construction.

Assessment

The expanded contract is better than the one it replaces. Deriving the required set from build-time discovery instead of a handwritten cohort removes a class of drift the original spec was already straining against — my first finding was precisely a hand-maintained membership claim going stale against the manifests. The explicit skipped: not_implemented reporting, the refusal to let a source capture sharing a Rust owner count as an implementation, and the rule that a declared public definition missing generated wiring is failed rather than skipped all close the obvious ways a catalog-wide claim could be inflated.

The prohibitions that matter survived the rewrite intact: no second registry, no per-adapter allowlist replacing the retired flag, no copying native reservation numbers to other ABIs, no returning true without validation, no measurement setting its own passing threshold, and no treating the generic WASI publication test as Cloudflare or Spin execution evidence.

One observation, not a finding: this revision materially enlarges #34's downstream scope — from one adapter's cohort to four adapters' whole-catalog qualification plus a cross-cutting flag retirement. The documents are consistent about it and keep the host integration Fastly-first, so nothing here is contradictory. It is worth the maintainer confirming that the enlarged decomposition is what was intended, since approving this planning PR ratifies that shape for #46/#47, #72-#75 and #88-#90.

Next actor

The maintainer, for joint spec/plan approval. No author correction is outstanding: the single prior finding is fixed, verified and resolved, and I found nothing new at this head.

Merge remains gated on an eligible independent formal APPROVE covering a066d6d, plus completion of the last in-progress check. A verdict inside this COMMENT does not satisfy that gate.

@aram356

aram356 commented Nov 6, 2026

Copy link
Copy Markdown
Collaborator Author

Maintainer Merge Authorization

The maintainer explicitly confirmed merging PR #152 at a066d6de500828993f69940e6aed09d5f63fa955 using the recorded positive reviewer verdict without a formal independent GitHub APPROVE event. This is a specific exception for this head, not a change to the review policy for later PRs.

Immediately before merge, the head is unchanged, the reviewer has accepted/resolved the finding and reported no new findings, and all 25 checks are successful. No CI check is waived. No self-approval is being submitted and no administrative bypass is authorized or used.

This is the spec/plan PR only. Issue #34 remains open; implementation and qualification remain separate work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant